guoshuai 2 weeks ago
parent
commit
125aaf188f

+ 0 - 3
src/main/java/com/qmrb/system/controller/ContractController.java

@@ -59,7 +59,6 @@ public class ContractController{
     
     @Operation(summary = "新增客商协议表", security = {@SecurityRequirement(name = "Authorization")})
     @PostMapping
-    @PreAuthorize("@ss.hasPerm('contract:add')")
     @Resubmit
     public Result<ContractForm> saveForm(@RequestBody @Valid ContractForm form) {
         ContractForm result = contractService.saveForm(form);
@@ -75,7 +74,6 @@ public class ContractController{
 
     @Operation(summary = "修改客商协议表", security = {@SecurityRequirement(name = "Authorization")})
     @PutMapping(value = "/{id}")
-    @PreAuthorize("@ss.hasPerm('contract:edit')")
     public Result<?> updateForm(@Parameter(description = "客商协议表ID") @PathVariable Long id, @RequestBody @Validated ContractForm form) {
         boolean result = contractService.updateForm(id,form);
         return Result.judge(result);
@@ -83,7 +81,6 @@ public class ContractController{
 
     @Operation(summary = "删除客商协议表", security = {@SecurityRequirement(name = "Authorization")})
     @DeleteMapping("/{ids}")
-    @PreAuthorize("@ss.hasPerm('contract:delete')")
     public Result<?> deleteUsers( @Parameter(description = "客商协议表ID,多个以英文逗号(,)分割") @PathVariable String ids) {
     	if(StrUtil.isBlank(ids)) {
     		 return Result.failed(ResultCode.PARAM_ERROR, "删除的客商协议表数据为空");

+ 5 - 0
src/main/java/com/qmrb/system/mapper/ContractMapper.java

@@ -1,8 +1,12 @@
 package com.qmrb.system.mapper;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmrb.system.pojo.entity.Contract;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qmrb.system.pojo.query.ContractQuery;
+import com.qmrb.system.pojo.vo.ContractVO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -15,4 +19,5 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface ContractMapper extends BaseMapper<Contract> {
 
+    Page<ContractVO> pageWithCoupon(Page objectPage,@Param("queryParams") ContractQuery queryParams);
 }

+ 6 - 0
src/main/java/com/qmrb/system/pojo/entity/Coupon.java

@@ -47,6 +47,12 @@ public class Coupon extends BaseEntity {
      */
     @TableField("goods_id")
     private Long goodsId;
+    
+    /**
+     * 停车记录ID
+     */
+    @TableField("contract_id")
+    private Long contractId;
 
     /**
      * 使用场景(1-停车场, 2-其他场景)

+ 5 - 1
src/main/java/com/qmrb/system/pojo/form/ContractForm.java

@@ -104,5 +104,9 @@ public class ContractForm {
 	@Schema(description = "其中小型车位",type="Integer")
     private Integer smallParkingLotNum;
 
-
+    /**
+     * 已使用优惠券数量
+     */
+    @Schema(description = "已使用优惠券数量",type="Long")
+    private Long usedNum;
 }

+ 6 - 0
src/main/java/com/qmrb/system/pojo/form/CouponForm.java

@@ -36,6 +36,12 @@ public class CouponForm {
      */
 	@Schema(description = "停车记录ID",type="Long")
     private Long goodsId;
+    
+    /**
+     * 协议
+     */
+	@Schema(description = "协议ID",type="Long")
+    private Long contractId;
     /**
      * 使用场景(1-停车场, 2-其他场景)
      */

+ 3 - 0
src/main/java/com/qmrb/system/pojo/form/UserForm.java

@@ -25,6 +25,9 @@ public class UserForm {
     @Schema(description="用户名")
     @NotBlank(message = "用户名不能为空")
     private String username;
+    
+    @Schema(description="密码")
+    private String password;
 
     @Schema(description="昵称")
     @NotBlank(message = "昵称不能为空")

+ 5 - 0
src/main/java/com/qmrb/system/pojo/query/CouponQuery.java

@@ -43,6 +43,11 @@ public class CouponQuery extends BasePageQuery{
 	@Schema(description = "停车记录ID",type="Long")
     private Long goodsId;
     /**
+     * 协议
+     */
+    @Schema(description = "协议ID",type="Long")
+    private Long contractId;
+    /**
      * 使用场景(1-停车场, 2-其他场景)
      */
 	@Schema(description = "使用场景(1-停车场, 2-其他场景)",type="Integer")

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

@@ -1,5 +1,6 @@
 package com.qmrb.system.pojo.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -37,11 +38,13 @@ public class ContractVO {
      * 开始日期
      */
 	@Schema(description = "开始日期",type="Date")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date startDate;
     /**
      * 结束日期
      */
 	@Schema(description = "结束日期",type="Date")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date endDate;
     /**
      * 联系人姓名
@@ -103,6 +106,12 @@ public class ContractVO {
      */
 	@Schema(description = "其中小型车位",type="Integer")
     private Integer smallParkingLotNum;
+    
+    /**
+     * 已使用优惠券数量
+     */
+	@Schema(description = "已使用优惠券数量",type="Long")
+    private Long usedNum;
 
 
 

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

@@ -37,6 +37,11 @@ public class CouponVO {
 	@Schema(description = "停车记录ID",type="Long")
     private Long goodsId;
     /**
+     * 协议
+     */
+    @Schema(description = "协议ID",type="Long")
+    private Long contractId;
+    /**
      * 使用场景(1-停车场, 2-其他场景)
      */
 	@Schema(description = "使用场景(1-停车场, 2-其他场景)",type="Integer")

+ 73 - 8
src/main/java/com/qmrb/system/service/impl/ContractServiceImpl.java

@@ -2,21 +2,36 @@ package com.qmrb.system.service.impl;
 
 
 
+import cn.hutool.core.collection.CollectionUtil;
 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.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.ContractVO;
 import com.qmrb.system.pojo.query.ContractQuery;
 import com.qmrb.system.mapper.ContractMapper;
 import com.qmrb.system.service.IContractService;
 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.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Service;
 
 import cn.hutool.core.lang.Assert;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -31,6 +46,16 @@ import lombok.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;
 
 	/**分页查询
 	 * */
@@ -43,15 +68,11 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
         //String keywords = queryParams.getKeywords();
 
         // 查询数据
-        Page<Contract> dictItemPage = this.page(
+        Page<ContractVO> pageResult = baseMapper.pageWithCoupon(
                 new Page<>(pageNum, pageSize),
-                new LambdaQueryWrapper<Contract>()
-                	//.eq(status != null, Contract::getStatus,status)
-                	//.like(StrUtil.isNotBlank(keywords), Contract::getCategoryName, keywords)
+				queryParams
         );
-
-        // 实体转换
-        Page<ContractVO> pageResult = converter.entity2Page(dictItemPage);
+		
         return pageResult;
 	}
 	
@@ -61,11 +82,29 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
 	 * 保存表单
 	 * */
 	@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);
         ContractForm result = converter.entity2Form(entity);
         return result;
 	}
@@ -73,7 +112,30 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
 	/**更新
 	 * */
 	@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);
@@ -90,7 +152,10 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
 
         // 实体转换
         ContractForm form = converter.entity2Form(entity);
-        return form;
+		Long count = couponMapper.selectCount(new LambdaQueryWrapper<Coupon>().eq(Coupon::getContractId, id));
+		
+		form.setUsedNum(count);
+		return form;
 	}
 	
 }

+ 10 - 3
src/main/java/com/qmrb/system/service/impl/SysUserServiceImpl.java

@@ -119,9 +119,16 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         // 实体转换 form->entity
         SysUser entity = userConverter.form2Entity(userForm);
 
-        // 设置默认加密密码
-        String defaultEncryptPwd = passwordEncoder.encode(SystemConstants.DEFAULT_PASSWORD);
-        entity.setPassword(defaultEncryptPwd);
+        if(StrUtil.isNotBlank(userForm.getPassword())){
+            // 设置默认加密密码
+            String defaultEncryptPwd = passwordEncoder.encode(userForm.getPassword());
+            entity.setPassword(defaultEncryptPwd);
+        }else{
+            // 设置默认加密密码
+            String defaultEncryptPwd = passwordEncoder.encode(SystemConstants.DEFAULT_PASSWORD);
+            entity.setPassword(defaultEncryptPwd);
+        }
+        
 
         // 新增用户
         boolean result = this.save(entity);

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

@@ -2,4 +2,7 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.qmrb.system.mapper.ContractMapper">
 
+    <select id="pageWithCoupon" resultType="com.qmrb.system.pojo.vo.ContractVO">
+        select ct.*,te.used_num from contract ct left join (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
+    </select>
 </mapper>