pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/webUtil/BaseResponseUtils.java
@@ -44,6 +44,10 @@ return buildResult(ResultCodeMsg.RsCode.ERROR_CODE, msg, null); } public static BaseResponse buildCodeMsg(Integer code, String msg) { return buildResult(String.valueOf(code), msg, null); } public static BaseResponse buildError(Object obj){ return buildResult(ResultCodeMsg.RsCode.ERROR_CODE,ResultCodeMsg.RsMsg.ERROR_MESSAGE, obj); } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrGroupClientMapper.java
New file @@ -0,0 +1,27 @@ package com.dy.pipIrrGlobal.daoIr; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dy.pipIrrGlobal.pojoIr.IrGroupClient; import org.apache.ibatis.annotations.Mapper; /** * @author ZhuBaoMin * @date 2024-07-10 14:48 * @LastEditTime 2024-07-10 14:48 * @Description */ @Mapper public interface IrGroupClientMapper extends BaseMapper<IrGroupClient> { int deleteByPrimaryKey(Long id); int insert(IrGroupClient record); int insertSelective(IrGroupClient record); IrGroupClient selectByPrimaryKey(Long id); int updateByPrimaryKeySelective(IrGroupClient record); int updateByPrimaryKey(IrGroupClient record); } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrUnitClientMapper.java
New file @@ -0,0 +1,28 @@ package com.dy.pipIrrGlobal.daoIr; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dy.pipIrrGlobal.pojoIr.IrUnitClient; import org.apache.ibatis.annotations.Mapper; /** * @author ZhuBaoMin * @date 2024-07-10 14:47 * @LastEditTime 2024-07-10 14:47 * @Description */ @Mapper public interface IrUnitClientMapper extends BaseMapper<IrUnitClient> { int deleteByPrimaryKey(Long id); int insert(IrUnitClient record); int insertSelective(IrUnitClient record); IrUnitClient selectByPrimaryKey(Long id); int updateByPrimaryKeySelective(IrUnitClient record); int updateByPrimaryKey(IrUnitClient record); } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrGroupClient.java
New file @@ -0,0 +1,69 @@ package com.dy.pipIrrGlobal.pojoIr; import com.alibaba.fastjson2.annotation.JSONField; import com.alibaba.fastjson2.writer.ObjectWriterImplToString; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.dy.common.po.BaseEntity; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.*; import java.util.Date; /** * @author ZhuBaoMin * @date 2024-07-10 14:48 * @LastEditTime 2024-07-10 14:48 * @Description */ /** * 轮灌组农户关联表 */ @TableName(value="ir_group_client", autoResultMap = true) @Data @Builder @ToString @NoArgsConstructor @AllArgsConstructor @Schema(name = "轮灌组农户关联实体") public class IrGroupClient implements BaseEntity { public static final long serialVersionUID = 202407101455001L; /** * 主键 */ @JSONField(serializeUsing= ObjectWriterImplToString.class) @TableId(type = IdType.INPUT) private Long id; /** * 轮灌组ID */ @JSONField(serializeUsing= ObjectWriterImplToString.class) @NotNull(message = "轮灌组不能为空") private Long groupId; /** * 农户ID */ @JSONField(serializeUsing= ObjectWriterImplToString.class) @NotNull(message = "农户不能为空") private Long clientId; /** * 创建人 */ @JSONField(serializeUsing= ObjectWriterImplToString.class) private Long operator; /** * 创建时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date operateTime; } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrUnitClient.java
New file @@ -0,0 +1,68 @@ package com.dy.pipIrrGlobal.pojoIr; import com.alibaba.fastjson2.annotation.JSONField; import com.alibaba.fastjson2.writer.ObjectWriterImplToString; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.dy.common.po.BaseEntity; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.*; import java.util.Date; /** * @author ZhuBaoMin * @date 2024-07-10 14:47 * @LastEditTime 2024-07-10 14:47 * @Description */ /** * 灌溉单元农户关联表 */ @TableName(value="ir_unit_client", autoResultMap = true) @Data @Builder @ToString @NoArgsConstructor @AllArgsConstructor @Schema(name = "灌溉单元农户关联实体") public class IrUnitClient implements BaseEntity { public static final long serialVersionUID = 202407101454001L; /** * 主键 */ @JSONField(serializeUsing= ObjectWriterImplToString.class) @TableId(type = IdType.INPUT) private Long id; /** * 灌溉单元ID */ @JSONField(serializeUsing= ObjectWriterImplToString.class) @NotNull(message = "灌溉单元不能为空") private Long unitId; /** * 农户ID */ @JSONField(serializeUsing= ObjectWriterImplToString.class) @NotNull(message = "农户不能为空") private Long clientId; /** * 创建人 */ @JSONField(serializeUsing= ObjectWriterImplToString.class) private Long operator; /** * 创建时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date operateTime; } pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrGroupClientMapper.xml
New file @@ -0,0 +1,102 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dy.pipIrrGlobal.daoIr.IrGroupClientMapper"> <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoIr.IrGroupClient"> <!--@mbg.generated--> <!--@Table ir_group_client--> <id column="id" jdbcType="BIGINT" property="id" /> <result column="group_id" jdbcType="BIGINT" property="groupId" /> <result column="client_id" jdbcType="BIGINT" property="clientId" /> <result column="operator" jdbcType="BIGINT" property="operator" /> <result column="operate_time" jdbcType="TIMESTAMP" property="operateTime" /> </resultMap> <sql id="Base_Column_List"> <!--@mbg.generated--> id, group_id, client_id, `operator`, operate_time </sql> <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap"> <!--@mbg.generated--> select <include refid="Base_Column_List" /> from ir_group_client where id = #{id,jdbcType=BIGINT} </select> <delete id="deleteByPrimaryKey" parameterType="java.lang.Long"> <!--@mbg.generated--> delete from ir_group_client where id = #{id,jdbcType=BIGINT} </delete> <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoIr.IrGroupClient"> <!--@mbg.generated--> insert into ir_group_client (id, group_id, client_id, `operator`, operate_time) values (#{id,jdbcType=BIGINT}, #{groupId,jdbcType=BIGINT}, #{clientId,jdbcType=BIGINT}, #{operator,jdbcType=BIGINT}, #{operateTime,jdbcType=TIMESTAMP}) </insert> <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrGroupClient"> <!--@mbg.generated--> insert into ir_group_client <trim prefix="(" suffix=")" suffixOverrides=","> <if test="id != null"> id, </if> <if test="groupId != null"> group_id, </if> <if test="clientId != null"> client_id, </if> <if test="operator != null"> `operator`, </if> <if test="operateTime != null"> operate_time, </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="id != null"> #{id,jdbcType=BIGINT}, </if> <if test="groupId != null"> #{groupId,jdbcType=BIGINT}, </if> <if test="clientId != null"> #{clientId,jdbcType=BIGINT}, </if> <if test="operator != null"> #{operator,jdbcType=BIGINT}, </if> <if test="operateTime != null"> #{operateTime,jdbcType=TIMESTAMP}, </if> </trim> </insert> <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrGroupClient"> <!--@mbg.generated--> update ir_group_client <set> <if test="groupId != null"> group_id = #{groupId,jdbcType=BIGINT}, </if> <if test="clientId != null"> client_id = #{clientId,jdbcType=BIGINT}, </if> <if test="operator != null"> `operator` = #{operator,jdbcType=BIGINT}, </if> <if test="operateTime != null"> operate_time = #{operateTime,jdbcType=TIMESTAMP}, </if> </set> where id = #{id,jdbcType=BIGINT} </update> <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoIr.IrGroupClient"> <!--@mbg.generated--> update ir_group_client set group_id = #{groupId,jdbcType=BIGINT}, client_id = #{clientId,jdbcType=BIGINT}, `operator` = #{operator,jdbcType=BIGINT}, operate_time = #{operateTime,jdbcType=TIMESTAMP} where id = #{id,jdbcType=BIGINT} </update> </mapper> pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrUnitClientMapper.xml
New file @@ -0,0 +1,102 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dy.pipIrrGlobal.daoIr.IrUnitClientMapper"> <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoIr.IrUnitClient"> <!--@mbg.generated--> <!--@Table ir_unit_client--> <id column="id" jdbcType="BIGINT" property="id" /> <result column="unit_id" jdbcType="BIGINT" property="unitId" /> <result column="client_id" jdbcType="BIGINT" property="clientId" /> <result column="operator" jdbcType="BIGINT" property="operator" /> <result column="operate_time" jdbcType="TIMESTAMP" property="operateTime" /> </resultMap> <sql id="Base_Column_List"> <!--@mbg.generated--> id, unit_id, client_id, `operator`, operate_time </sql> <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap"> <!--@mbg.generated--> select <include refid="Base_Column_List" /> from ir_unit_client where id = #{id,jdbcType=BIGINT} </select> <delete id="deleteByPrimaryKey" parameterType="java.lang.Long"> <!--@mbg.generated--> delete from ir_unit_client where id = #{id,jdbcType=BIGINT} </delete> <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoIr.IrUnitClient"> <!--@mbg.generated--> insert into ir_unit_client (id, unit_id, client_id, `operator`, operate_time) values (#{id,jdbcType=BIGINT}, #{unitId,jdbcType=BIGINT}, #{clientId,jdbcType=BIGINT}, #{operator,jdbcType=BIGINT}, #{operateTime,jdbcType=TIMESTAMP}) </insert> <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrUnitClient"> <!--@mbg.generated--> insert into ir_unit_client <trim prefix="(" suffix=")" suffixOverrides=","> <if test="id != null"> id, </if> <if test="unitId != null"> unit_id, </if> <if test="clientId != null"> client_id, </if> <if test="operator != null"> `operator`, </if> <if test="operateTime != null"> operate_time, </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="id != null"> #{id,jdbcType=BIGINT}, </if> <if test="unitId != null"> #{unitId,jdbcType=BIGINT}, </if> <if test="clientId != null"> #{clientId,jdbcType=BIGINT}, </if> <if test="operator != null"> #{operator,jdbcType=BIGINT}, </if> <if test="operateTime != null"> #{operateTime,jdbcType=TIMESTAMP}, </if> </trim> </insert> <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrUnitClient"> <!--@mbg.generated--> update ir_unit_client <set> <if test="unitId != null"> unit_id = #{unitId,jdbcType=BIGINT}, </if> <if test="clientId != null"> client_id = #{clientId,jdbcType=BIGINT}, </if> <if test="operator != null"> `operator` = #{operator,jdbcType=BIGINT}, </if> <if test="operateTime != null"> operate_time = #{operateTime,jdbcType=TIMESTAMP}, </if> </set> where id = #{id,jdbcType=BIGINT} </update> <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoIr.IrUnitClient"> <!--@mbg.generated--> update ir_unit_client set unit_id = #{unitId,jdbcType=BIGINT}, client_id = #{clientId,jdbcType=BIGINT}, `operator` = #{operator,jdbcType=BIGINT}, operate_time = #{operateTime,jdbcType=TIMESTAMP} where id = #{id,jdbcType=BIGINT} </update> </mapper> pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml
@@ -3,7 +3,8 @@ datasource: #配置数据源 type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.40.166:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull # url: jdbc:mysql://192.168.40.166:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull url: jdbc:mysql://8.140.179.55:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull username: root password: dysql,;.abc!@# druid: pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateGroup/IrrigateGroupCtrl.java
@@ -5,16 +5,13 @@ import com.dy.common.webUtil.BaseResponseUtils; import com.dy.common.webUtil.QueryResultVo; import com.dy.common.webUtil.ResultCodeMsg; import com.dy.pipIrrGlobal.pojoIr.IrGroupClient; import com.dy.pipIrrGlobal.pojoIr.IrGroupUnit; import com.dy.pipIrrGlobal.pojoIr.IrIrrigateGroup; import com.dy.pipIrrGlobal.pojoIr.IrIrrigateUnit; import com.dy.pipIrrGlobal.voIr.VoGroup; import com.dy.pipIrrGlobal.voIr.VoGroupOne; import com.dy.pipIrrGlobal.voIr.VoUnit; import com.dy.pipIrrGlobal.voIr.VoUnitOne; import com.dy.pipIrrGlobal.voSe.VoActiveCard; import com.dy.pipIrrIrrigate.irrigateUnit.IrrigateUnitSv; import com.dy.pipIrrIrrigate.irrigateGroup.QueryVo; import com.dy.pipIrrIrrigate.irrigateGroup.dto.GroupClient; import com.dy.pipIrrIrrigate.result.IrrigateResultCode; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; @@ -415,4 +412,34 @@ } return BaseResponseUtils.buildSuccess(true); } /** * 轮灌组关联农户 * @param po * @param bindingResult * @return */ @PostMapping(path = "add_group_client", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> addGroupClient(@RequestBody @Valid GroupClient po, BindingResult bindingResult) { if (bindingResult != null && bindingResult.hasErrors()) { return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } IrGroupClient irGroupClient = new IrGroupClient(); irGroupClient.setGroupId(po.getGroupId()); irGroupClient.setClientId(po.getClientId()); irGroupClient.setOperator(po.getOperator()); irGroupClient.setOperateTime(new Date()); try { Long rec = Optional.ofNullable(irrigateGroupSv.addGroupClient(irGroupClient)).orElse(0L); if (rec == 0) { return BaseResponseUtils.buildErrorMsg(IrrigateResultCode.GRPUP_ASSOCIATE_CLIENT_FAIL.getMessage()); } } catch (Exception e) { return BaseResponseUtils.buildException(e.getMessage()); } return BaseResponseUtils.buildSuccess(true); } } pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateGroup/IrrigateGroupSv.java
@@ -1,8 +1,10 @@ package com.dy.pipIrrIrrigate.irrigateGroup; import com.dy.common.webUtil.QueryResultVo; import com.dy.pipIrrGlobal.daoIr.IrGroupClientMapper; import com.dy.pipIrrGlobal.daoIr.IrGroupUnitMapper; import com.dy.pipIrrGlobal.daoIr.IrIrrigateGroupMapper; import com.dy.pipIrrGlobal.pojoIr.IrGroupClient; import com.dy.pipIrrGlobal.pojoIr.IrGroupUnit; import com.dy.pipIrrGlobal.pojoIr.IrIrrigateGroup; import com.dy.pipIrrGlobal.voIr.VoGroup; @@ -25,11 +27,13 @@ @Slf4j @Service public class IrrigateGroupSv { @Autowired private IrIrrigateGroupMapper irIrrigateGroupMapper; @Autowired private IrGroupUnitMapper irGroupUnitMapper; @Autowired private IrGroupClientMapper irGroupClientMapper; /** * 创建轮灌组 @@ -149,4 +153,19 @@ List<Long> notBindUnits = irGroupUnitMapper.getNotBindUnits(); return notBindUnits; } //轮灌组关联农户 public Long addGroupClient(IrGroupClient po) { irGroupClientMapper.insert(po); return po.getId(); } /** * 删除轮灌组与农户管理 * @param id * @return */ public Integer deleteGroupClient (Long id) { return irGroupClientMapper.deleteByPrimaryKey(id); } } pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateGroup/dto/GroupClient.java
New file @@ -0,0 +1,34 @@ package com.dy.pipIrrIrrigate.irrigateGroup.dto; import jakarta.validation.constraints.NotNull; import lombok.Data; /** * @author ZhuBaoMin * @date 2024-07-10 16:37 * @LastEditTime 2024-07-10 16:37 * @Description 轮灌组农户关联对象 */ @Data public class GroupClient { public static final long serialVersionUID = 202407101638001L; /** * 轮灌组ID */ @NotNull(message = "轮灌组不能为空") private Long groupId; /** * 农户ID */ @NotNull(message = "农户不能为空") private Long clientId; /** * 操作员 */ @NotNull(message = "操作员不能为空") private Long operator; } pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateUnit/IrrigateUnitCtrl.java
@@ -7,13 +7,11 @@ import com.dy.common.webUtil.QueryResultVo; import com.dy.common.webUtil.ResultCodeMsg; import com.dy.pipIrrGlobal.pojoIr.IrIrrigateUnit; import com.dy.pipIrrGlobal.pojoIr.IrProject; import com.dy.pipIrrGlobal.voIr.VoProject; import com.dy.pipIrrGlobal.voIr.VoProjectOne; import com.dy.pipIrrGlobal.pojoIr.IrUnitClient; import com.dy.pipIrrGlobal.voIr.VoUnit; import com.dy.pipIrrGlobal.voIr.VoUnitOne; import com.dy.pipIrrGlobal.voSe.VoActiveCard; import com.dy.pipIrrIrrigate.irrigateUnit.QueryVo; import com.dy.pipIrrIrrigate.irrigateUnit.dto.UnitClient; import com.dy.pipIrrIrrigate.result.IrrigateResultCode; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; @@ -30,10 +28,7 @@ import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.*; /** * @author :WuZeYu @@ -229,4 +224,58 @@ return BaseResponseUtils.buildException(e.getMessage()); } } /** * 灌溉单元分配(农户租地) * @param po * @param bindingResult * @return */ @PostMapping(path = "add_unit_client", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> addUnitClient(@RequestBody @Valid UnitClient po, BindingResult bindingResult) { if (bindingResult != null && bindingResult.hasErrors()) { return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } IrUnitClient irUnitClient = new IrUnitClient(); irUnitClient.setUnitId(po.getUnitId()); irUnitClient.setClientId(po.getClientId()); irUnitClient.setOperator(po.getOperator()); irUnitClient.setOperateTime(new Date()); try { Long rec = Optional.ofNullable(irrigateUnitSv.addUnitClient(irUnitClient)).orElse(0L); if (rec == 0) { return BaseResponseUtils.buildErrorMsg(IrrigateResultCode.UNIT_ASSOCIATE_CLIENT_FAIL.getMessage()); } } catch (Exception e) { return BaseResponseUtils.buildException(e.getMessage()); } return BaseResponseUtils.buildSuccess(true); } @PostMapping(path = "delete_unit_client", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> deleteUnitClient(@RequestBody @Valid UnitClient po, BindingResult bindingResult) { if (bindingResult != null && bindingResult.hasErrors()) { return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } IrUnitClient irUnitClient = new IrUnitClient(); irUnitClient.setUnitId(po.getUnitId()); irUnitClient.setClientId(po.getClientId()); irUnitClient.setOperator(po.getOperator()); irUnitClient.setOperateTime(new Date()); try { Long rec = Optional.ofNullable(irrigateUnitSv.addUnitClient(irUnitClient)).orElse(0L); if (rec == 0) { return BaseResponseUtils.buildErrorMsg(IrrigateResultCode.UNIT_ASSOCIATE_CLIENT_FAIL.getMessage()); } } catch (Exception e) { return BaseResponseUtils.buildException(e.getMessage()); } return BaseResponseUtils.buildSuccess(true); } } pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateUnit/IrrigateUnitSv.java
@@ -3,14 +3,11 @@ import com.dy.common.webUtil.QueryResultVo; import com.dy.pipIrrGlobal.daoIr.IrGroupUnitMapper; import com.dy.pipIrrGlobal.daoIr.IrIrrigateUnitMapper; import com.dy.pipIrrGlobal.daoIr.IrProjectMapper; import com.dy.pipIrrGlobal.daoIr.IrUnitClientMapper; import com.dy.pipIrrGlobal.pojoIr.IrIrrigateUnit; import com.dy.pipIrrGlobal.pojoIr.IrProject; import com.dy.pipIrrGlobal.voIr.VoProject; import com.dy.pipIrrGlobal.voIr.VoProjectOne; import com.dy.pipIrrGlobal.pojoIr.IrUnitClient; import com.dy.pipIrrGlobal.voIr.VoUnit; import com.dy.pipIrrGlobal.voIr.VoUnitOne; import com.dy.pipIrrIrrigate.irrigateUnit.QueryVo; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.common.utils.PojoUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -29,11 +26,13 @@ @Slf4j @Service public class IrrigateUnitSv { @Autowired private IrIrrigateUnitMapper irIrrigateUnitMapper; @Autowired private IrGroupUnitMapper irGroupUnitMapper; @Autowired private IrUnitClientMapper irUnitClientMapper; /** * 创建灌溉单元 @@ -105,4 +104,20 @@ rsVo.obj = irIrrigateUnitMapper.getUnits(params); return rsVo; } //灌溉单元分配(农户租地) public Long addUnitClient(IrUnitClient po) { irUnitClientMapper.insert(po); return po.getId(); } /** * 删除灌溉单元与农户关联 * @param id * @return */ public Integer deleteUnitClient(Long id) { return irUnitClientMapper.deleteByPrimaryKey(id); } } pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateUnit/dto/UnitClient.java
New file @@ -0,0 +1,34 @@ package com.dy.pipIrrIrrigate.irrigateUnit.dto; import jakarta.validation.constraints.NotNull; import lombok.Data; /** * @author ZhuBaoMin * @date 2024-07-10 15:35 * @LastEditTime 2024-07-10 15:35 * @Description 灌溉单元农户关联对象 */ @Data public class UnitClient { public static final long serialVersionUID = 202407101536001L; /** * 灌溉单元ID */ @NotNull(message = "灌溉单元不能为空") private Long unitId; /** * 农户ID */ @NotNull(message = "农户不能为空") private Long clientId; /** * 操作员 */ @NotNull(message = "操作员不能为空") private Long operator; } pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/result/IrrigateResultCode.java
@@ -20,12 +20,18 @@ PLEASE_INPUT_PROJECT_ID(10002, "请输入项目ID"), DELETE_PROJECT_FAIL(10003, "项目删除失败"), UPDATE_PROJECT_FAIL(10004, "项目修改失败"), NO_PROJECT(10005, "无符合条件的项目记录"); NO_PROJECT(10005, "无符合条件的项目记录"), /** * 灌溉单元 */ UNIT_ASSOCIATE_CLIENT_FAIL(20001, "灌溉单元分配失败"), // /** // * 灌溉单元 // */ /** * 轮灌组 */ GRPUP_ASSOCIATE_CLIENT_FAIL(30001, "轮灌组关联农户失败"); // ADD_IRRIGATE_UNIT_FAIL(20001, "创建灌溉单元失败"), private final Integer code; pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java
@@ -15,7 +15,6 @@ import com.dy.pipIrrGlobal.voSe.VoOperate; import com.dy.pipIrrGlobal.voSe.VoRecharge; import com.dy.pipIrrGlobal.voSe.VoReissueCard; import com.dy.pipIrrSell.cardOperate.converter.RechargeDtoMapper; import com.dy.pipIrrSell.cardOperate.dto.*; import com.dy.pipIrrSell.cardOperate.enums.OperateTypeENUM; import com.dy.pipIrrSell.cardOperate.qo.*; @@ -65,21 +64,19 @@ @PostMapping(path = "active", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> add_active(@RequestBody @Valid DtoActiveCard po, BindingResult bindingResult){ public BaseResponse<Boolean> add_active(@RequestBody @Valid ActiveCard po, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long clientId = po.getClientId(); // 获取5级行政区划串areaCode String areaCode = cardOperateSv.getAreaCodeByNum(po.getClientNum()); if(areaCode.trim().length() == 0) { Long areaCodeL = cardOperateSv.getAreaCodeById(clientId); if(areaCodeL == null) { return BaseResponseUtils.buildErrorMsg(SellResultCode.AREA_CODE_MISTAKE.getMessage()); } // p206V1_0_1协议,取行政区划的后6位 if(po.getProtocol() != null && po.getProtocol().trim().equals("p206V1_0_1")) { areaCode = areaCode.substring(6); } String areaCode = String.valueOf(areaCodeL); /** * 根据行政区划串(areaCode)在水卡表中针对水卡编号(cardNum)进行模糊查询 @@ -88,18 +85,6 @@ * cardNum为新的卡号 */ String cardNum = Optional.ofNullable(cardOperateSv.getCardNumOfMax(areaCode)).orElse(""); if(po.getProtocol().trim().equals("p206V1_0_1")) { if(cardNum != null && cardNum.trim().length() > 0) { Integer number = Integer.parseInt(cardNum.substring(6)); number = number + 1; if(number > 9999) { return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_OVERRUN.getMessage()); } cardNum = cardNum.substring(0, 6) + String.format("%04d", number); } else { cardNum = areaCode + "0001"; } }else { if(cardNum != null && cardNum.trim().length() > 0) { Integer number = Integer.parseInt(cardNum.substring(12)); number = number + 1; @@ -110,12 +95,11 @@ } else { cardNum = areaCode + "00001"; } } /** * cardAddr 水卡地址(仅仅写入,无业务) * clientNum 农户编号 * cardCost 卡片费用 * originalCardId 原水卡ID * amount 充值金额,充值接口为输入参数,补卡接口为原卡退还金额 * reissueAmount 补卡金额,补卡时使用 * paymentId 支付方式编号 @@ -124,7 +108,6 @@ * activeTime 开卡时间 */ String cardAddr = po.getCardAddr(); String clientNum = po.getClientNum(); Integer cardCost = po.getCardCost(); Long originalCardId = po.getOriginalCardId(); Float amount = po.getAmount(); @@ -132,14 +115,6 @@ String remarks = po.getRemarks(); Long operator = po.getOperator(); Date activeTime = new Date(); /** * 根据农户编号获取农户ID */ Long clientId = cardOperateSv.getClientIdByNum(clientNum); if(clientId == null) { return BaseResponseUtils.buildErrorMsg(SellResultCode.CLIENT_NUM_ERROR.getMessage()); } /** * 添加农户卡记录,退还金额作为当前余额 @@ -166,7 +141,7 @@ SeCardOperate seCardOperate = new SeCardOperate(); seCardOperate.setCardId(cardId); seCardOperate.setClientId(clientId); seCardOperate.setMoney(amount); seCardOperate.setMoney(0f); seCardOperate.setCardCost(cardCost); seCardOperate.setPaymentId(paymentId); seCardOperate.setOperateType(OperateTypeENUM.ACTIVE.getCode()); @@ -182,10 +157,13 @@ * 如果操作人员开卡时输入了充值金额,则开卡后调用充值功能 * 补卡除外,补卡的退还金额是从挂失卡中转移过来的,没有实际金钱交易 */ po.setCardNum(Long.parseLong(cardNum)); if(amount != null && amount > 0 && originalCardId == null) { po.setClientId(clientId); DtoRecharge dtoRecharge = RechargeDtoMapper.INSTANCT.po2vo(po); DtoRecharge dtoRecharge = new DtoRecharge(); dtoRecharge.setCardNum(Long.parseLong(cardNum)); dtoRecharge.setAmount(amount); dtoRecharge.setPaymentId(paymentId); dtoRecharge.setRemarks(remarks); dtoRecharge.setOperator(operator); dtoRecharge.setMoney(0f); dtoRecharge.setGift(0f); dtoRecharge.setPrice(0f); @@ -213,7 +191,7 @@ @SsoAop() public BaseResponse<Boolean> add_reissue(@RequestBody @Valid DtoReissue po, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } /** @@ -231,6 +209,7 @@ String cardAddr = po.getCardAddr(); String clientNum = ""; Long clientId = 0L; Long cardNum = po.getCardNum(); Long cardId = 0L; Integer cardCost = Optional.ofNullable(po.getCardCost()).orElse(0); @@ -238,7 +217,6 @@ Long paymentId = po.getPaymentId(); String remarks = po.getRemarks(); Long operator = po.getOperator(); String protocol = null; // 判断当前水卡是否为挂失状态且未补卡,仅已经挂失且未补卡的可以补卡 if(!cardOperateSv.isLostAndUnreplaced(cardNum)) { @@ -262,6 +240,7 @@ } clientNum = map.get("clientNum").toString(); cardId = Long.parseLong(map.get("cardId").toString()); clientId = Long.parseLong(map.get("clientId").toString()); /** * 如果是补卡调用的开卡且转移了退还金额,需修改挂失卡余额为0 @@ -276,20 +255,16 @@ /** * 添加开卡记录,退还金额冲到新卡中 */ if(String.valueOf(cardNum).trim().length() == 10) { protocol = "p206V1_0_1"; } DtoActiveCard dtoActiveCard = new DtoActiveCard(); dtoActiveCard.setProtocol(protocol); dtoActiveCard.setCardAddr(cardAddr); dtoActiveCard.setClientNum(clientNum); dtoActiveCard.setOriginalCardId(cardId); dtoActiveCard.setCardCost(cardCost); dtoActiveCard.setAmount(reissueAmount); dtoActiveCard.setPaymentId(paymentId); dtoActiveCard.setRemarks(remarks); dtoActiveCard.setOperator(operator); BaseResponse<java.lang.Boolean> baseResponse_addActive = add_active(dtoActiveCard, null); ActiveCard activeCard = new ActiveCard(); activeCard.setCardAddr(cardAddr); activeCard.setClientId(clientId); activeCard.setOriginalCardId(cardId); activeCard.setCardCost(cardCost); activeCard.setAmount(reissueAmount); activeCard.setPaymentId(paymentId); activeCard.setRemarks(remarks); activeCard.setOperator(operator); BaseResponse<java.lang.Boolean> baseResponse_addActive = add_active(activeCard, null); if(!baseResponse_addActive.getCode().equals("0001")) { return BaseResponseUtils.buildErrorMsg(SellResultCode.REPLACE_FAIL_WRITE_RECHARGE_ERROR.getMessage()); @@ -318,7 +293,7 @@ @SsoAop() public BaseResponse<Boolean> add_recharge(@RequestBody @Valid DtoRecharge po, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } return cardOperateSv.addRecharge(po); } @@ -334,7 +309,7 @@ @SsoAop() public BaseResponse<Boolean> add_cancel(@RequestBody @Valid DtoCancel po, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } /** @@ -425,7 +400,7 @@ @SsoAop() public BaseResponse<Boolean> add_loss(@RequestBody @Valid DtoLoss po, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } /** @@ -518,7 +493,7 @@ @SsoAop() public BaseResponse<Boolean> add_reversal(@RequestBody @Valid DtoReversal po, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } /** @@ -607,7 +582,7 @@ @SsoAop() public BaseResponse<Boolean> add_refund(@RequestBody @Valid DtoRefund po, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } /** @@ -691,7 +666,7 @@ @SsoAop() public BaseResponse<Boolean> add_unlock(@RequestBody @Valid DtoUnlock po, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } /** @@ -838,7 +813,7 @@ try { QueryResultVo<List<VoActiveCard>> res = cardOperateSv.getActiveCards(vo); if(res.itemTotal == 0) { return BaseResponseUtils.buildFail(SellResultCode.No_ActiveCards.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.No_ActiveCards.getMessage()); } return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { @@ -867,7 +842,7 @@ try { QueryResultVo<List<VoReissueCard>> res = cardOperateSv.getReissueCards(vo); if(res.itemTotal == 0) { return BaseResponseUtils.buildFail(SellResultCode.No_ReissueCards.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.No_ReissueCards.getMessage()); } return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { @@ -898,13 +873,13 @@ // 验证操作类型是否正确 Integer operateType = Optional.ofNullable(vo.getOperateType()).orElse(0); if(operateType != 3 && operateType != 6 && operateType != 7 && operateType != 8) { return BaseResponseUtils.buildFail(SellResultCode.PARAMS_ERROR.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.PARAMS_ERROR.getMessage()); } try { QueryResultVo<List<VoOperate>> res = cardOperateSv.getCommonOperations(vo); if(res.itemTotal == 0) { return BaseResponseUtils.buildFail(SellResultCode.No_CANCELS.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.No_CANCELS.getMessage()); } return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { @@ -933,7 +908,7 @@ try { Map res = Optional.ofNullable(cardOperateSv.getReceipts(vo)).orElse(new HashMap()); if(res.size() == 0) { return BaseResponseUtils.buildFail(SellResultCode.No_RECEIPTS.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.No_RECEIPTS.getMessage()); } return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/ActiveCard.java
New file @@ -0,0 +1,64 @@ package com.dy.pipIrrSell.cardOperate.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Data; /** * @author ZhuBaoMin * @date 2024-07-11 11:27 * @LastEditTime 2024-07-11 11:27 * @Description 开卡传入对象 */ @Data public class ActiveCard { public static final long serialVersionUID = 202407111129001L; /** * 水卡地址,仅保存,无业务 */ @NotBlank(message = "水卡地址不能为空") private String cardAddr; /** * 农户ID(主键) */ @NotNull(message = "农户不能为空") private Long clientId; /** * 原挂失卡ID,补卡过程开卡需要 */ @Schema(description = "原挂失卡ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private Long originalCardId; /** * 卡片费用 */ @NotNull(message = "卡片费用不能为空") private Integer cardCost; /** * 充值金额 */ private Float amount; /** * 支付方式编号 */ @NotNull(message = "付方式不能为空") private Long paymentId; /** * 备注信息 */ private String remarks; /** * 操作人编号 */ private Long operator; } pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoActiveCard.java
@@ -10,7 +10,7 @@ * @author ZhuBaoMin * @date 2024-01-18 19:44 * @LastEditTime 2024-01-18 19:44 * @Description * @Description 开卡及补卡传入对象 */ @Data @@ -18,7 +18,7 @@ @ToString @NoArgsConstructor @AllArgsConstructor @Schema(name = "开卡传入对象") @Schema(name = "开卡及补卡传入对象") public class DtoActiveCard { public static final long serialVersionUID = 202401181945001L; @@ -43,7 +43,7 @@ private String clientNum; /** * 农户ID(主键),不是开卡接口传入,由农户编号获得,保存开卡记录和充值记录都需要 * 农户ID(主键) */ @Schema(description = "农户ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private Long clientId; pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoRecharge.java
@@ -46,7 +46,6 @@ * 充值金额 */ @Schema(description = "充值金额", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @Min(value = 0, message="充值金额不能小于0") private Float amount; /** pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientCtrl.java
@@ -143,6 +143,9 @@ String district8 = String.format("%02d", Integer.parseInt(countyNum)) + String.format("%03d", Integer.parseInt(townNum)) + String.format("%03d", Integer.parseInt(villageNum)); // 生成农户编号 String clientNum = generateClientNum(district8); if(clientNum == null) { return BaseResponseUtils.buildErrorMsg("农户编号超限"); } // 生成12位5级行政区划编码串及名称串 Long districtNum = Long.parseLong(provinceNum + cityNum + district8); String districtTitle = countryName + townName + villageName; @@ -195,7 +198,7 @@ Integer number = Integer.parseInt(clientNum.substring(8)); number = number + 1; if(number > 9999) { return "农户编号超限"; return null; } clientNum = clientNum.substring(0, 8) + String.format("%04d", number); } else { pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralCtrl.java
@@ -193,11 +193,7 @@ public BaseResponse<Map> getSummaries(QoSummary vo){ try { Map res = generalSv.getSummaries(vo); if(res.size() > 0) { return BaseResponseUtils.buildSuccess(res); }else { return BaseResponseUtils.buildFail(SellResultCode.No_TRADE_SUMMARIES.getMessage()); } } catch (Exception e) { log.error("查询交易汇总记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/qo/QoSummary.java
@@ -2,6 +2,8 @@ import com.dy.common.webUtil.QueryConditionVo; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.*; /** @@ -20,11 +22,14 @@ @Schema(name = "交易汇总查询条件") public class QoSummary extends QueryConditionVo { @Schema(description = "查询起始日期") @NotBlank(message = "查询起始日期不能为空") public String timeStart; @Schema(description = "查询截止日期") @NotBlank(message = "查询截止日期不能为空") public String timeStop; @Schema(description = "收银员ID") @NotNull(message = "收银员不能为空") public Long cashierId; } pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/virtualCard/VirtualCardCtrl.java
@@ -5,7 +5,6 @@ import com.dy.common.webUtil.BaseResponseUtils; import com.dy.common.webUtil.QueryResultVo; import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard; import com.dy.pipIrrGlobal.voPr.VoController; import com.dy.pipIrrGlobal.voSe.VoVcRecharge; import com.dy.pipIrrGlobal.voSe.VoVirtualCard; import com.dy.pipIrrSell.result.SellResultCode; @@ -101,7 +100,7 @@ if(vcNum != null && vcNum.trim().length() > 0) { Integer number = Integer.parseInt(vcNum.substring(12)); number = number + 1; if(number > 99999) { if(number > 65535) { return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_OVERRUN.getMessage()); } vcNum = vcNum.substring(0, 12) + String.format("%05d", number); pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java
@@ -113,7 +113,7 @@ // 虚拟卡状态为使用中,且不是强制开阀时提示 if (vc.getInUse() == 1 && !forceOpen) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.IN_USE_VC_CANNOT_OPEN_VALVE.getMessage()); return BaseResponseUtils.buildCodeMsg(WechatResultCode.IN_USE_VC_CANNOT_OPEN_VALVE.getCode(), WechatResultCode.IN_USE_VC_CANNOT_OPEN_VALVE.getMessage()); } // 获取水价 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/VirtualCardSv.java
New file @@ -0,0 +1,355 @@ package com.dy.pipIrrWechat.virtualCard; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; import com.dy.common.webUtil.QueryResultVo; import com.dy.pipIrrGlobal.daoSe.*; import com.dy.pipIrrGlobal.pojoSe.SeVcRecharge; import com.dy.pipIrrGlobal.pojoSe.SeVcRefund; import com.dy.pipIrrGlobal.pojoSe.SeVcRefundItem; import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard; import com.dy.pipIrrGlobal.voSe.VoOrders; import com.dy.pipIrrGlobal.voSe.VoVcRecharge; import com.dy.pipIrrGlobal.voSe.VoVirtualCard; import com.dy.pipIrrSell.result.SellResultCode; import com.dy.pipIrrSell.virtualCard.dto.DtoVcRecharge; import com.dy.pipIrrSell.virtualCard.dto.DtoVirtualCard; import com.dy.pipIrrSell.virtualCard.enums.LastOperateENUM; import com.dy.pipIrrSell.virtualCard.enums.OrderStateENUM; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.common.utils.PojoUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; import java.util.Map; /** * @author ZhuBaoMin * @date 2024-07-11 15:49 * @LastEditTime 2024-07-11 15:49 * @Description */ @Slf4j @Service public class VirtualCardSv { @Autowired private SeVirtualCardMapper seVirtualCardMapper; @Autowired private SeVcRechargeMapper seVcRechargeMapper; @Autowired private SeVcRefundMapper seVcRefundMapper; @Autowired private SeVcRefundItemMapper seVcRefundItemMapper; @Autowired private SeClientMapper seClientMapper; /** * 根据农户ID获取5级行政区划代码,注册虚拟卡使用 * @param clientId 农户ID * @return 5级行政区划代码 */ public Long getAreaCodeById(Long clientId) { return seClientMapper.getAreaCodeById(clientId); } /** * 获取农户全部虚拟卡 * @return */ public List<VoVirtualCard> getVCs(Long clientId) { return seVirtualCardMapper.getVCs(clientId); } /** * 根据虚拟卡ID获取虚拟卡对象 * @param vcId * @return */ public VoVirtualCard getVcById(Long vcId) { return seVirtualCardMapper.getVcById(vcId); } /** * 注册虚拟卡 * @param po * @return */ public Long insertVirtualCard(SeVirtualCard po) { seVirtualCardMapper.insert(po); return po.getId(); } /** * 根据行政区划串模糊查询虚拟卡编号,注册虚拟卡使用 * @param areaCode * @return */ String getVcCardNumOfMax(String areaCode) { return seVirtualCardMapper.getVcCardNumOfMax(areaCode); } /** 废弃 * 验证农户是否拥有指定名称的虚拟卡 * @param po * @return */ //public Integer getRecordCountByName(DtoRegist po) { // return seVirtualCardMapper.getRecordCountByName(po.getClientId(), po.getVcName()); //} /** * 修改虚拟卡 * 充值、消费、申请退款、审核退款时需要修改虚拟卡的:余额、最后操作、最后操作时间 * @param po * @return */ public Integer updateVirtualCard(SeVirtualCard po) { return seVirtualCardMapper.updateByPrimaryKeySelective(po); } /** * 根据虚拟卡编号获取虚拟卡对象 * @param virtualId * @return */ public SeVirtualCard selectVirtuCardById(Long virtualId) { return seVirtualCardMapper.selectByPrimaryKey(virtualId); } /** * 添加虚拟卡充值记录 * JSAPI下单后生成部分充值记录 * @param po * @return */ public BaseResponse<Boolean> insertVCRecharge(DtoVirtualCard po) { String orderNumber = po.getOrderNumber(); Long virtualId = po.getVirtualId(); Long clientId = po.getClientId(); Integer rechargeAmount = po.getRechargeAmount(); // 验证该虚拟卡账户是否存在并取出当前账户余额 SeVirtualCard seVirtualCard = seVirtualCardMapper.selectByPrimaryKey(virtualId); if(seVirtualCard == null) { return BaseResponseUtils.buildFail(SellResultCode.NO_ACCOUNT.getMessage()); } Double money = seVirtualCard.getMoney(); // 添加充值记录 SeVcRecharge seVcRecharge = new SeVcRecharge(); seVcRecharge.setVcId(virtualId); seVcRecharge.setClientId(clientId); seVcRecharge.setMoney(money); seVcRecharge.setOrderNumber(orderNumber); seVcRecharge.setRechargeAmount(rechargeAmount); seVcRecharge.setOrderTime(new Date()); seVcRecharge.setOrderState(OrderStateENUM.NON_PAYMENT.getCode()); Integer rec = seVcRechargeMapper.insert(seVcRecharge); if(rec == null) { return BaseResponseUtils.buildFail(SellResultCode.RECHARGE_FAIL.getMessage()); } return BaseResponseUtils.buildSuccess(true) ; } /** * 根据订单号获取虚拟卡充值对象 * @param orderNumber * @return */ public SeVcRecharge getVCRechargeByorderNumber(String orderNumber) { return seVcRechargeMapper.getVCRechargeByorderNumber(orderNumber); } /** * 修改虚拟卡充值记录 * 微信支付通知后: * 1. 更新充值表:充值后余额、支付完成时间、订单状态 * 2. 更新虚拟卡表:账户余额、最后操作、最后操作时间 * @param orderNumber 订单编号 * @return */ @Transactional(rollbackFor = Exception.class) public BaseResponse<Boolean> updateVCRecharge(String orderNumber, Date rechargeTime) { SeVcRecharge seVcRecharge = seVcRechargeMapper.getVCRechargeByorderNumber(orderNumber); if(seVcRecharge == null) { return BaseResponseUtils.buildFail(SellResultCode.RECHARGE_NOT_EXIST.getMessage()); } Long virtualId = seVcRecharge.getVcId(); Double money = seVcRecharge.getMoney(); Integer rechargeAmount = seVcRecharge.getRechargeAmount(); Double afterRrecharge = money + rechargeAmount; seVcRecharge.setAfterRecharge(afterRrecharge); seVcRecharge.setRechargeTime(rechargeTime); seVcRecharge.setOrderState(OrderStateENUM.PAID.getCode()); Integer rec = seVcRechargeMapper.updateByPrimaryKeySelective(seVcRecharge); if(rec == null) { return BaseResponseUtils.buildFail(SellResultCode.RECHARGE_FAIL.getMessage()); } SeVirtualCard seVirtualCard = seVirtualCardMapper.selectByPrimaryKey(virtualId); if(seVirtualCard == null) { return BaseResponseUtils.buildFail(SellResultCode.VIRTUAL_CARD_NOT_EXIST.getMessage()); } seVirtualCard.setMoney(afterRrecharge); seVirtualCard.setLastOperate(LastOperateENUM.RECHARGE.getCode()); seVirtualCard.setLastOperateTime(new Date()); Integer rec2 = seVirtualCardMapper.updateByPrimaryKeySelective(seVirtualCard); if(rec2 == null) { return BaseResponseUtils.buildFail(SellResultCode.RECHARGE_FAIL.getMessage()); } return BaseResponseUtils.buildSuccess(true) ; } /** * 修改虚拟卡充值记录(废弃) * 微信小程序支付通知后修改:余额、充值后余额、充值完成时间 * @param po * @return */ public Integer updateVCRecharge(SeVcRecharge po) { return seVcRechargeMapper.updateByPrimaryKeySelective(po); } /** * 根据虚拟卡号获取订单列表 * @param virtualId * @return */ public List<VoOrders> selectOrders(Long virtualId) { List<VoOrders> rsVo = seVcRechargeMapper.getOrders(virtualId); return rsVo ; } /** * 根据退款ID获取退款对象 * @param refundId * @return */ public SeVcRefund selectRefundByRefundId(Long refundId) { return seVcRefundMapper.selectByPrimaryKey(refundId); } /** * 添加退款申请 * @param po * @return */ public Long addRefund(SeVcRefund po) { seVcRefundMapper.insert(po); return po.getId(); } /** * 修改退款记录 * @param po * @return */ public Integer updateRefund(SeVcRefund po) { return seVcRefundMapper.updateByPrimaryKeySelective(po); } /** * 根据订单号获取其各笔退款金额 * @param orderNumber * @return */ public List<Integer> selectRefundAmount(String orderNumber) { List<Integer> rsVo = seVcRefundMapper.getRefundAmount(orderNumber); return rsVo; } /** * 添加退款分项 * @param po * @return */ public Long addRefundItem(SeVcRefundItem po) { seVcRefundItemMapper.insert(po); return po.getRefundId(); } /** * 编辑退款分项 * @param po * @return */ public Integer updateRefundItem(SeVcRefundItem po) { return seVcRefundItemMapper.updateByPrimaryKeySelective(po); } /** * 根据订单号生成退款单号 * @param orderNumber * @return */ public String generateRefundNumber(String orderNumber) { String refundNumber = seVcRefundItemMapper.getLastRefundNumber(orderNumber); if(refundNumber == null) { refundNumber = orderNumber + "01"; return refundNumber; } String a = String.format("%02d", (Integer.parseInt(refundNumber.substring(29,30).trim()) + 1)); return a; } /** * 根据订单号获取充值金额,调用退款申请接口使用 * @param orderNumber * @return */ public Integer getRechargeAmountByOrderNumber(String orderNumber) { return seVcRechargeMapper.getRechargeAmountByOrderNumber(orderNumber); } /** * 根据退款通知接口返回的退款单号反查退款ID,查询该退款ID下未退款记录数量 * @param refundNumber * @return */ public Integer getNoRefundedCount(String refundNumber) { return seVcRefundItemMapper.getNoRefundedCount(refundNumber); } /** * 根据退款单号获取退款ID,退款通知后更新退款表所需 * @param refundNumber * @return */ public Long getRefundIdByRefundNumber(String refundNumber) { return seVcRefundItemMapper.getRefundIdByRefundNumber(refundNumber); } /** * 获取虚拟卡充值记录 * @param dtoVcRecharge * @return */ public QueryResultVo<List<VoVcRecharge>> getVcRechargeRecords(DtoVcRecharge dtoVcRecharge){ Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(dtoVcRecharge); Long itemTotal = seVirtualCardMapper.getRechargeRecordCount(params); QueryResultVo<List<VoVcRecharge>> rsVo = new QueryResultVo<>(); rsVo.pageSize = dtoVcRecharge.pageSize; rsVo.pageCurr = dtoVcRecharge.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = seVirtualCardMapper.getVcRechargeRecords(params); return rsVo; } } pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/dto/DtoAudit.java
New file @@ -0,0 +1,35 @@ package com.dy.pipIrrWechat.virtualCard.dto; import jakarta.validation.constraints.NotNull; import lombok.Data; import org.hibernate.validator.constraints.Length; /** * @author ZhuBaoMin * @date 2024-07-11 15:38 * @LastEditTime 2024-07-11 15:38 * @Description */ @Data public class DtoAudit { public static final long serialVersionUID = 202407111539001L; /** * 虚拟卡退款ID */ @NotNull(message = "虚拟卡退款ID不能为空") private Long refundId; /** * 审核人ID */ @NotNull(message = "审核ID不能为空") private Long auditor; /** * 审核备注 */ @Length(max = 200) private String remarks; } pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/dto/DtoRefund.java
New file @@ -0,0 +1,30 @@ package com.dy.pipIrrWechat.virtualCard.dto; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Positive; import lombok.Data; /** * @author ZhuBaoMin * @date 2024-07-11 15:39 * @LastEditTime 2024-07-11 15:39 * @Description */ @Data public class DtoRefund { public static final long serialVersionUID = 202407111540001L; /** * 虚拟卡编号 */ @NotNull(message = "虚拟卡编号不能为空") private Long virtualId; /** * 退款金额 */ @NotNull(message = "退款金额不能为空") @Positive(message = "充值金额必须为大于0的整数") private Integer refundAmount; } pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/dto/DtoRegist.java
New file @@ -0,0 +1,23 @@ package com.dy.pipIrrWechat.virtualCard.dto; import jakarta.validation.constraints.NotNull; import lombok.Data; /** * @author ZhuBaoMin * @date 2024-07-11 15:40 * @LastEditTime 2024-07-11 15:40 * @Description */ @Data public class DtoRegist { public static final long serialVersionUID = 202407111541001L; /** * 农户ID */ @NotNull(message = "农户ID不能为空") private Long clientId; } pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/dto/DtoVcRecharge.java
New file @@ -0,0 +1,15 @@ package com.dy.pipIrrWechat.virtualCard.dto; import com.dy.common.webUtil.QueryConditionVo; import lombok.Data; /** * @author ZhuBaoMin * @date 2024-07-11 15:41 * @LastEditTime 2024-07-11 15:41 * @Description */ @Data public class DtoVcRecharge extends QueryConditionVo { } pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/dto/DtoVirtualCard.java
New file @@ -0,0 +1,41 @@ package com.dy.pipIrrWechat.virtualCard.dto; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Data; /** * @author ZhuBaoMin * @date 2024-07-11 15:43 * @LastEditTime 2024-07-11 15:43 * @Description */ @Data public class DtoVirtualCard { public static final long serialVersionUID = 202407111543001L; /** * 订单号 */ @NotBlank(message = "订单号不能为空") private String orderNumber; /** * 农户ID */ @NotNull(message = "农户ID不能为空") private Long clientId; /** * 虚拟卡ID */ @NotNull(message = "虚拟卡ID不能为空") private Long virtualId; /** * 充值金额 */ @NotNull(message = "充值金额不能为空") private Integer rechargeAmount; } pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/enums/LastOperateENUM.java
New file @@ -0,0 +1,27 @@ package com.dy.pipIrrWechat.virtualCard.enums; import lombok.AllArgsConstructor; import lombok.Getter; /** * @author ZhuBaoMin * @date 2024-07-11 15:45 * @LastEditTime 2024-07-11 15:45 * @Description */ @Getter @AllArgsConstructor public enum LastOperateENUM { OPEN_ACCOUNT((byte)1, "开户"), RECHARGE((byte)2, "充值"), CONSUME((byte)3, "消费"), APPLY_REFUND((byte)4, "申请退款"), AUDIT_REFUND((byte)5, "退款审核"), REFUND((byte)6, "退款"), OPEN_VALVE((byte)7, "开阀"), CLOSE_VALVE((byte)8, "关阀"); private final Byte code; private final String message; } pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/enums/OrderStateENUM.java
New file @@ -0,0 +1,21 @@ package com.dy.pipIrrWechat.virtualCard.enums; import lombok.AllArgsConstructor; import lombok.Getter; /** * @author ZhuBaoMin * @date 2024-07-11 15:46 * @LastEditTime 2024-07-11 15:46 * @Description */ @Getter @AllArgsConstructor public enum OrderStateENUM { NON_PAYMENT((byte)1, "未支付"), PAID((byte)2, "已支付"); private final Byte code; private final String message; } pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/enums/RefundItemStateENUM.java
New file @@ -0,0 +1,21 @@ package com.dy.pipIrrWechat.virtualCard.enums; import lombok.AllArgsConstructor; import lombok.Getter; /** * @author ZhuBaoMin * @date 2024-07-11 15:47 * @LastEditTime 2024-07-11 15:47 * @Description */ @Getter @AllArgsConstructor public enum RefundItemStateENUM { NO_REFUND((byte)1, "未退款"), REFUNDED((byte)2, "已退款"); private final Byte code; private final String message; } pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/virtualCard/enums/RefundStateENUM.java
New file @@ -0,0 +1,22 @@ package com.dy.pipIrrWechat.virtualCard.enums; import lombok.AllArgsConstructor; import lombok.Getter; /** * @author ZhuBaoMin * @date 2024-07-11 15:48 * @LastEditTime 2024-07-11 15:48 * @Description */ @Getter @AllArgsConstructor public enum RefundStateENUM { TO_AUDIT((byte)1, "待审核"), TO_REFUND((byte)2, "待退款"), REFUNDED((byte)3, "已退款"); private final Byte code; private final String message; }