Browse Source

包租协议

xlq 2 weeks ago
parent
commit
5c3383afe6

+ 8 - 1
src/main/java/com/qmrb/system/controller/ContractController.java

@@ -51,12 +51,19 @@ public class ContractController{
 
     private final IContractService contractService;
 
-	@Operation(summary = "客商协议表分页列表", security = {@SecurityRequirement(name = "Authorization")})
+	@Operation(summary = "客商扫码协议表分页列表", security = {@SecurityRequirement(name = "Authorization")})
     @GetMapping("/page")
     public PageResult<ContractVO> getPage(@ParameterObject ContractQuery queryParams) {
         Page<ContractVO> result = contractService.getPage(queryParams);
         return PageResult.success(result);
     }
+
+    @Operation(summary = "客商包租协议表分页列表", security = {@SecurityRequirement(name = "Authorization")})
+    @GetMapping("/getCharterPage")
+    public PageResult<ContractVO> getCharterPage(@ParameterObject ContractQuery queryParams) {
+        Page<ContractVO> result = contractService.getCharterPage(queryParams);
+        return PageResult.success(result);
+    }
     
     
     @Operation(summary = "新增客商协议表", security = {@SecurityRequirement(name = "Authorization")})

+ 11 - 1
src/main/java/com/qmrb/system/mapper/ContractMapper.java

@@ -8,6 +8,9 @@ import com.qmrb.system.pojo.vo.ContractVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * <p>
  * 客商协议表 Mapper 接口
@@ -19,5 +22,12 @@ import org.apache.ibatis.annotations.Param;
 @Mapper
 public interface ContractMapper extends BaseMapper<Contract> {
 
-    Page<ContractVO> pageWithCoupon(Page objectPage,@Param("queryParams") ContractQuery queryParams);
+    Page<ContractVO> pageWithCoupon(Page objectPage, @Param("queryParams") ContractQuery queryParams);
+
+
+    /**
+     * @param contractIds
+     * @return
+     */
+    List<Map<String, Object>> pageWithCharter(@Param("contractIds") String contractIds);
 }

+ 5 - 0
src/main/java/com/qmrb/system/pojo/vo/ContractPlaceNumberRelVO.java

@@ -20,6 +20,11 @@ import java.util.Date;
  */
 @Data
 public class ContractPlaceNumberRelVO {
+    /**
+     * 启用状态数量
+     */
+    @Schema(description = "启用状态数量",type="String")
+    private String abledNum;
 
     private Long id;
     /**

+ 12 - 0
src/main/java/com/qmrb/system/pojo/vo/ContractVO.java

@@ -17,6 +17,18 @@ import java.util.Date;
  */
 @Data
 public class ContractVO {
+    /**
+     * 大型车辆登记数量 总数/登记/在库
+     */
+    @Schema(description = "大型车辆实时统计",type="String")
+    private String largeTimeNums;
+
+    /**
+     * 小型车辆实时统计 总数/登记/在库
+     */
+    @Schema(description = "小型车辆实时统计",type="String")
+    private String smallTimeNums;
+
 
     private Long id;
     /**

+ 4 - 0
src/main/java/com/qmrb/system/service/IContractService.java

@@ -37,5 +37,9 @@ public interface IContractService extends IService<Contract> {
 	 * */
 	public ContractForm getFormData(Long id);
 
+
     ContractForm getformByUserId(Long userId);
+
+	Page<ContractVO> getCharterPage(ContractQuery queryParams);
+
 }

+ 10 - 0
src/main/java/com/qmrb/system/service/impl/CarParkStoredCardServiceImpl.java

@@ -5,7 +5,9 @@ import java.util.*;
 import java.util.stream.Collectors;
 
 import com.qmrb.system.pojo.entity.BarnRecord;
+import com.qmrb.system.pojo.entity.CarPark;
 import com.qmrb.system.pojo.form.BarnRecordForm;
+import com.qmrb.system.service.ICarParkService;
 import org.springframework.beans.factory.annotation.Autowired;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -40,6 +42,9 @@ public class CarParkStoredCardServiceImpl extends ServiceImpl<CarParkStoredCardM
 	@Autowired
 	private CarParkStoredCardConverter converter;
 
+	@Autowired
+	private ICarParkService carParkService;
+
 	/**分页查询
 	 * */
 	@Override
@@ -88,6 +93,11 @@ public class CarParkStoredCardServiceImpl extends ServiceImpl<CarParkStoredCardM
 	public boolean updateForm(Long id, CarParkStoredCardForm form) {
 		CarParkStoredCard entity = converter.form2Entity(form);
 		entity.setId(id);
+		// 更新停车场名字
+		List<CarPark> carParks = carParkService.list(new LambdaQueryWrapper<CarPark>().ne(CarPark::getId,form.getCarParkId()));
+		if (CollectionUtil.isNotEmpty(carParks)) {
+			entity.setCarParkName(carParks.get(0).getName());
+		}
         boolean result = this.updateById(entity);
         return result;
 	}

+ 11 - 1
src/main/java/com/qmrb/system/service/impl/ContractPlaceNumberRelServiceImpl.java

@@ -31,6 +31,7 @@ import java.time.Duration;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.Date;
+import java.util.List;
 
 /**
  * <p>
@@ -62,7 +63,15 @@ public class ContractPlaceNumberRelServiceImpl extends ServiceImpl<ContractPlace
         int pageSize = queryParams.getPageSize();
         // Integer status = queryParams.getStatus();
         // String keywords = queryParams.getKeywords();
-        SysUser sysUser = userService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getId, SecurityUtils.getUserId()));
+        SysUser sysUser = userService.getOne(new LambdaQueryWrapper<SysUser>()
+                .eq(SysUser::getId, SecurityUtils.getUserId())
+                // .eq(SysUser::getUserType, "3")//用户类型 1 系统用户 2扫码协议用户  3 包租协议用户
+        );
+        // 获取启用数据
+        List<ContractPlaceNumberRel> list = this.list(new LambdaQueryWrapper<ContractPlaceNumberRel>()
+                .eq(ContractPlaceNumberRel::getContractId, sysUser.getContractId())
+                .eq(ContractPlaceNumberRel::getStatus, "1")
+        );
         // 查询数据
         Page<ContractPlaceNumberRel> dictItemPage = this.page(
                 new Page<>(pageNum, pageSize),
@@ -78,6 +87,7 @@ public class ContractPlaceNumberRelServiceImpl extends ServiceImpl<ContractPlace
         // 获取车位上限
         Contract contract = contractService.getOne(new LambdaQueryWrapper<Contract>().eq(Contract::getId, sysUser.getContractId()));
         for (ContractPlaceNumberRelVO record : pageResult.getRecords()) {
+            record.setAbledNum(String.valueOf(list.size()));
             record.setMaxParkingLotNum(contract.getMaxParkingLotNum());
         }
         return pageResult;

+ 159 - 89
src/main/java/com/qmrb/system/service/impl/ContractServiceImpl.java

@@ -1,18 +1,20 @@
 package com.qmrb.system.service.impl;
 
 
-
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.qmrb.system.converter.ContractConverter;
 import com.qmrb.system.mapper.CouponMapper;
 import com.qmrb.system.pojo.entity.Contract;
+import com.qmrb.system.pojo.entity.Contract;
 import com.qmrb.system.pojo.entity.Coupon;
 import com.qmrb.system.pojo.entity.SysRole;
 import com.qmrb.system.pojo.entity.SysUser;
 import com.qmrb.system.pojo.form.ContractForm;
 import com.qmrb.system.pojo.form.UserForm;
+import com.qmrb.system.pojo.vo.ContractPlaceNumberRelVO;
 import com.qmrb.system.pojo.vo.ContractVO;
 import com.qmrb.system.pojo.query.ContractQuery;
 import com.qmrb.system.mapper.ContractMapper;
@@ -21,6 +23,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmrb.system.service.SysRoleService;
 import com.qmrb.system.service.SysUserService;
 import com.qmrb.system.service.UserService;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Service;
@@ -30,7 +33,9 @@ import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -45,109 +50,115 @@ import java.util.stream.Collectors;
 @RequiredArgsConstructor
 public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> implements IContractService {
 
-	private final ContractConverter converter;
-	@Autowired
-	private CouponMapper couponMapper;
-	
-	@Autowired
-	private SysUserService userService;
-	
-	@Autowired
-	private SysRoleService roleService;
-	@Autowired
-	private PasswordEncoder passwordEncoder;
-
-	/**分页查询
-	 * */
-	@Override
-	public Page<ContractVO> getPage(ContractQuery queryParams) {
-		// 查询参数
+    private final ContractConverter converter;
+    @Autowired
+    private CouponMapper couponMapper;
+
+    @Autowired
+    private SysUserService userService;
+
+    @Autowired
+    private SysRoleService roleService;
+    @Autowired
+    private PasswordEncoder passwordEncoder;
+
+    /**
+     * 分页查询
+     */
+    @Override
+    public Page<ContractVO> getPage(ContractQuery queryParams) {
+        // 查询参数
         int pageNum = queryParams.getPageNum();
         int pageSize = queryParams.getPageSize();
-        //Integer status = queryParams.getStatus();
-        //String keywords = queryParams.getKeywords();
+        // Integer status = queryParams.getStatus();
+        // String keywords = queryParams.getKeywords();
 
         // 查询数据
         Page<ContractVO> pageResult = baseMapper.pageWithCoupon(
                 new Page<>(pageNum, pageSize),
-				queryParams
+                queryParams
         );
-		
+
         return pageResult;
-	}
-	
-	
+    }
 
-	/**
-	 * 保存表单
-	 * */
-	@Override
-	@Transactional
-	public ContractForm saveForm(@Valid ContractForm form) {
-		// 实体对象转换 form->entity
-		Contract entity = converter.form2Entity(form);
+
+    /**
+     * 保存表单
+     */
+    @Override
+    @Transactional
+    public ContractForm saveForm(@Valid ContractForm form) {
+        // 实体对象转换 form->entity
+        Contract entity = converter.form2Entity(form);
         // 持久化
         this.save(entity);
-		// 创建协议时,创建客商用户
-		UserForm user = new UserForm();
-		user.setUsername(form.getUsername());
-		user.setPassword(form.getPassword());
-		user.setContractId(entity.getId());
-		user.setUserType("2");//用户类型 1 系统用户 2扫码协议用户  3 包租协议用户'
-		user.setMobile(form.getContactPhone());
-		user.setNickname(form.getContractName());
-		List<SysRole> roles = roleService.list(new LambdaQueryWrapper<SysRole>().eq(SysRole::getCode, "CONTRACT"));//协议用户角色
-		if(CollectionUtil.isNotEmpty(roles)){
-			List<Long> roleIds = roles.stream().map(item -> {
-				return item.getId();
-			}).collect(Collectors.toList());
-			user.setRoleIds(roleIds);
-		}
-		
-		userService.saveUser(user);
+        // 创建协议时,创建客商用户
+        UserForm user = new UserForm();
+        user.setUsername(form.getUsername());
+        user.setPassword(form.getPassword());
+        user.setContractId(entity.getId());
+        if (form.getMaxParkingLotNum() != null) {
+            user.setUserType("3");// 用户类型 1 系统用户 2扫码协议用户  3包租协议用户
+        } else {
+            user.setUserType("2");// 用户类型 1 系统用户 2扫码协议用户  3包租协议用户
+        }
+        user.setMobile(form.getContactPhone());
+        user.setNickname(form.getContractName());
+        List<SysRole> roles = roleService.list(new LambdaQueryWrapper<SysRole>().eq(SysRole::getCode, "CONTRACT"));// 协议用户角色
+        if (CollectionUtil.isNotEmpty(roles)) {
+            List<Long> roleIds = roles.stream().map(item -> {
+                return item.getId();
+            }).collect(Collectors.toList());
+            user.setRoleIds(roleIds);
+        }
+
+        userService.saveUser(user);
         ContractForm result = converter.entity2Form(entity);
         return result;
-	}
-
-	/**更新
-	 * */
-	@Override
-	@Transactional
-	public boolean updateForm(Long id, ContractForm form) {
-		// 修改账户或密码,更新用户表数据
-		Contract contract = this.getById(id);
-		SysUser user = userService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getContractId, id));
-		
-		Boolean changeFlag = false;
-		// 校验账户
-		if(!contract.getUsername().equals(form.getUsername())){
-			changeFlag = true;
-			user.setUsername(form.getUsername());
-			long count = userService.count(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, form.getUsername()));
-			Assert.isTrue(count == 0, "用户名已存在");
-		}
-		//校验密码
-		if(!contract.getPassword().equals(form.getPassword())){
-			changeFlag = true;
-			String encode = passwordEncoder.encode(form.getPassword());
-			user.setPassword(encode);
-		}
-		if(changeFlag){
-			userService.updateById(user);
-		}
-
-		Contract entity = converter.form2Entity(form);
-		entity.setId(id);
+    }
+
+    /**
+     * 更新
+     */
+    @Override
+    @Transactional
+    public boolean updateForm(Long id, ContractForm form) {
+        // 修改账户或密码,更新用户表数据
+        Contract contract = this.getById(id);
+        SysUser user = userService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getContractId, id));
+
+        Boolean changeFlag = false;
+        // 校验账户
+        if (!contract.getUsername().equals(form.getUsername())) {
+            changeFlag = true;
+            user.setUsername(form.getUsername());
+            long count = userService.count(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, form.getUsername()));
+            Assert.isTrue(count == 0, "用户名已存在");
+        }
+        // 校验密码
+        if (!contract.getPassword().equals(form.getPassword())) {
+            changeFlag = true;
+            String encode = passwordEncoder.encode(form.getPassword());
+            user.setPassword(encode);
+        }
+        if (changeFlag) {
+            userService.updateById(user);
+        }
+
+        Contract entity = converter.form2Entity(form);
+        entity.setId(id);
         boolean result = this.updateById(entity);
         return result;
-	}
-
-	/**获取表单数据
-	 * */
-	@Override
-	public ContractForm getFormData(Long id) {
-		// 获取entity
-		Contract entity = this.getById(id);
+    }
+
+    /**
+     * 获取表单数据
+     */
+    @Override
+    public ContractForm getFormData(Long id) {
+        // 获取entity
+        Contract entity = this.getById(id);
         Assert.isTrue(entity != null, "客商协议表不存在");
 
         // 实体转换
@@ -177,4 +188,63 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
 		return form;
 	}
 
+
+    @Override
+    public Page<ContractVO> getCharterPage(ContractQuery queryParams) {
+        // 查询参数
+        int pageNum = queryParams.getPageNum();
+        int pageSize = queryParams.getPageSize();
+        // Integer status = queryParams.getStatus();
+        // String keywords = queryParams.getKeywords();
+
+        // 查询数据
+        LambdaQueryWrapper<Contract> queryWrapper = new LambdaQueryWrapper<>();
+        // queryWrapper.ge(StrUtil.isNotBlank(queryParams.getStartTimeBegin()), Contract::getStartTime, queryParams.getStartTimeBegin()).le(StrUtil.isNotBlank(queryParams.getStartTimeEnd()), Contract::getStartTime, queryParams.getStartTimeEnd());
+        // queryWrapper.ge(StrUtil.isNotBlank(queryParams.getEndTimeBegin()), Contract::getEndTime, queryParams.getEndTimeBegin()).le(StrUtil.isNotBlank(queryParams.getEndTimeEnd()), Contract::getEndTime, queryParams.getEndTimeEnd());
+        queryWrapper.eq(Contract::getContractType, "3");
+        queryWrapper.orderByDesc(Contract::getCreateTime);
+
+        // 查询数据
+        Page<Contract> dictItemPage = this.page(
+                new Page<>(pageNum, pageSize),
+                queryWrapper
+        );
+
+
+        // 实体转换
+        Page<ContractVO> pageResult = converter.entity2Page(dictItemPage);
+        List<ContractVO> records = pageResult.getRecords();
+        List<Long> contractIds = records.stream()
+                .map(ContractVO::getId)
+                .collect(Collectors.toList());
+
+        // 将 contractIds 拼接成字符串
+        String contractIdsStr = String.join(",", contractIds.stream().map(String::valueOf).toArray(String[]::new));
+
+        // 执行 SQL 查询
+        List<Map<String, Object>> statistics = baseMapper.pageWithCharter(contractIdsStr);
+        // 将统计结果映射到 ContractVO 中
+        Map<Long, Map<String, Object>> statisticsMap = new HashMap<>();
+        for (Map<String, Object> stat : statistics) {
+            Long contractId = (Long) stat.get("contract_id");
+            statisticsMap.put(contractId, stat);
+        }
+
+        for (ContractVO record : pageResult.getRecords()) {
+            Long contractId = record.getId();
+            String largeTimeNums = "";
+            String smallTimeNums = "";
+            Map<String, Object> stat = statisticsMap.get(contractId);
+            if (stat != null) {
+                largeTimeNums = record.getBigParkingLotNum() + "/" + stat.get("largeRealTimeNum") + "/" + stat.get("largeInParkingCount");
+                smallTimeNums = record.getSmallParkingLotNum() + "/" + stat.get("smallRealTimeNum") + "/" + stat.get("smallInParkingCount");
+            }
+            record.setLargeTimeNums(largeTimeNums);
+            record.setSmallTimeNums(smallTimeNums);
+        }
+
+        return pageResult;
+    }
+
+
 }

+ 17 - 0
src/main/resources/mapper/ContractMapper.xml

@@ -10,4 +10,21 @@
             (select co.contract_id as contractId,count(co.contract_id) as used_num from coupon co GROUP BY co.contract_id) te on te.contractId = ct.id 
         where ct.contract_type = 2
     </select>
+    <select id="pageWithCharter" resultType="java.util.Map">
+        SELECT
+            cpnr.contract_id,
+            SUM(CASE WHEN cpnr.car_type = '1' AND cpnr.status = '1' THEN 1 ELSE 0 END) AS largeRealTimeNum,
+            SUM(CASE WHEN cpnr.car_type = '2' AND cpnr.status = '1' THEN 1 ELSE 0 END) AS smallRealTimeNum,
+            SUM(CASE WHEN cpnr.car_type = '1' AND br.status = 1 THEN 1 ELSE 0 END) AS largeInParkingCount,
+            SUM(CASE WHEN cpnr.car_type = '2' AND br.status = 1 THEN 1 ELSE 0 END) AS smallInParkingCount,
+            COUNT(br.id) AS inParkinCount
+        FROM
+            contract_place_number_rel cpnr
+                LEFT JOIN
+            barn_record br ON cpnr.plate_number = br.car_number AND br.status = 1
+        WHERE
+            cpnr.contract_id IN (${contractIds})
+        GROUP BY
+            cpnr.contract_id;
+    </select>
 </mapper>