pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java
@@ -125,4 +125,11 @@ * @return */ Double getTotalAmount(Map<?, ?> params); /** * 根据水卡编号获取其挂失时退款金额(补卡时判断使用) * @param cardNum * @return */ Double getTradeAmountByCardNo(Long cardNum); } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java
@@ -124,11 +124,18 @@ List<VoCards> getUnreplaced(Map<?, ?> params); /** * 判断指定水卡是否为挂失状态且无补卡记录 * 根据指定水卡编号获取挂失事记录数量(补卡、解锁使用) * @param cardNum * @return */ Integer getLostCount(@Param("cardNum") Long cardNum); /** * 根据指定水卡编号获取已补卡数量(补卡、解锁使用) * @param cardNum 水卡编号 * @return 符合条件记录数,最多一条 */ Integer isLostAndUnreplaced(@Param("cardNum") Long cardNum); Integer getReplacedCount(@Param("cardNum") Long cardNum); /** * 根据农户姓名和手机号获取水卡列表记录数,应用程序使用 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWaterTypeMapper.java
New file @@ -0,0 +1,26 @@ package com.dy.pipIrrGlobal.daoSe; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dy.pipIrrGlobal.pojoSe.SeWaterType; import org.apache.ibatis.annotations.Mapper; /** * @author :WuZeYu * @Date :2024/6/28 15:29 * @LastEditTime :2024/6/28 15:29 * @Description */ @Mapper public interface SeWaterTypeMapper extends BaseMapper<SeWaterType> { int deleteByPrimaryKey(Long id); int insert(SeWaterType record); int insertSelective(SeWaterType record); SeWaterType selectByPrimaryKey(Long id); int updateByPrimaryKeySelective(SeWaterType record); int updateByPrimaryKey(SeWaterType record); } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeWaterType.java
New file @@ -0,0 +1,47 @@ package com.dy.pipIrrGlobal.pojoSe; /** * @author :WuZeYu * @Date :2024/6/28 15:29 * @LastEditTime :2024/6/28 15:29 * @Description */ 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 io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import org.apache.logging.log4j.core.config.plugins.validation.constraints.NotBlank; /** * 用水类型表 */ @TableName(value="se_water_type", autoResultMap = true) @Data @Builder @ToString @NoArgsConstructor @AllArgsConstructor @Schema(name = "用水类型实体") public class SeWaterType implements BaseEntity { public static final long serialVersionUID = 202406281535001L; /** * 主键 */ @JSONField(serializeUsing= ObjectWriterImplToString.class) @TableId(type = IdType.INPUT) @Schema(description = "实体id", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private Long id; /** * 用水类型 */ @Schema(description = "用水类型", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @NotBlank(message = "用水类型不能为空") private String typename; } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoClient.java
@@ -20,8 +20,6 @@ public class VoClient implements BaseEntity { private static final long serialVersionUID = 1L; @Schema(title = "ID") private Long id; @Schema(title = "县ID") private String countyId; @@ -49,7 +47,7 @@ private String divideName; @Schema(title = "用户类型ID") private String waterTypeId; private String typeId; @Schema(title = "用户类型名称") private String waterTypeName; pipIrr-platform/pipIrr-global/src/main/resources/init-config.xml
@@ -24,6 +24,13 @@ <item4 item_name="controllerType" item_value="57" remarks="控制器类型"/> <item5 item_name="protocolName" item_value="p206V202404" remarks="协议名称"/> </settings> <waterTypes> <item1 typeName="灌溉用水"/> <item2 typeName="工业用水"/> <item3 typeName="生活用水"/> <item4 typeName="养殖用水"/> <item5 typeName="绿化用水"/> </waterTypes> </org1> </orgs> </config> pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml
@@ -665,4 +665,16 @@ </if> </where> </select> <!--根据水卡编号获取其挂失时退款金额(补卡时判断使用)--> <select id="getTradeAmountByCardNo" resultType="java.lang.Double"> SELECT ope.trade_amount AS tradeAmount FROM se_client_card card INNER JOIN se_card_operate ope ON ope.card_id = card.id <where> AND ope.operate_type = 6 AND card.cardNum = #{cardNum} </where> </select> </mapper> pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
@@ -435,12 +435,11 @@ </trim> </select> <!--判断指定水卡是否为挂失状态且无补卡记录--> <select id="isLostAndUnreplaced" resultType="java.lang.Integer"> <!--根据指定水卡编号获取挂失事记录数量(补卡、解锁使用)--> <select id="getLostCount" resultType="java.lang.Integer"> SELECT COUNT(*) AS recordCount FROM se_client_card card INNER JOIN se_client_card card2 ON card2.original_card_id = card.cardNum <where> AND card.state = 3 <if test = "cardNum != null and cardNum > 0"> @@ -448,6 +447,19 @@ </if> </where> </select> <!--根据指定水卡编号获取已补卡数量(补卡、解锁使用)--> <select id="getReplacedCount" resultType="java.lang.Integer"> SELECT COUNT(*) AS recordCount FROM se_client_card card INNER JOIN se_client_card card2 ON card2.original_card_id = card.id <where> <if test = "cardNum != null and cardNum > 0"> AND card.cardNum = #{cardNum} </if> </where> </select> <!--根据农户姓名和手机号获取水卡列表记录数,应用程序使用--> <select id="getCardsByClientNameAndPhoneCount" resultType="java.lang.Long"> SELECT pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientMapper.xml
@@ -333,7 +333,6 @@ <!--根据指定条件获取农户数据--> <select id="getClients" resultType="com.dy.pipIrrGlobal.voSe.VoClient"> SELECT (@i:=@i+1) AS id, CAST(cli.countyId AS char) AS countyId, dis_con.name AS countryName, CAST(cli.townId AS char) AS townId, @@ -344,7 +343,7 @@ blo.name AS blockName, CAST(cli.divideId AS char) AS divideId, divi.name AS divideName, CAST(cli.typeId AS char) AS waterTypeId, CAST(cli.typeId AS char) AS typeId, wat.typeName AS waterTypeName, CAST(cli.id AS char) AS clientId, cli.name, @@ -363,7 +362,6 @@ LEFT JOIN ba_block blo ON cli.blockId = blo.id LEFT JOIN pr_divide divi ON cli.divideId = divi.id LEFT JOIN se_water_type wat ON cli.typeId = wat.id , (SELECT @i:=0) AS itable <where> AND cli.disabled = 0 AND cli.deleted = 0 @@ -433,7 +431,7 @@ <!--获取用水方式列表--> <select id="getWaterTypes" resultType="java.util.Map"> SELECT id, typeName from se_water_type SELECT CAST(se_water_type.id AS char) AS id, typeName from se_water_type </select> <!--获取农户基本信息,小程序首页使用--> pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWaterTypeMapper.xml
New file @@ -0,0 +1,67 @@ <?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.daoSe.SeWaterTypeMapper"> <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoSe.SeWaterType"> <!--@mbg.generated--> <!--@Table se_water_type--> <id column="id" jdbcType="BIGINT" property="id" /> <result column="typeName" jdbcType="VARCHAR" property="typename" /> </resultMap> <sql id="Base_Column_List"> <!--@mbg.generated--> id, typeName </sql> <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap"> <!--@mbg.generated--> select <include refid="Base_Column_List" /> from se_water_type where id = #{id,jdbcType=BIGINT} </select> <delete id="deleteByPrimaryKey" parameterType="java.lang.Long"> <!--@mbg.generated--> delete from se_water_type where id = #{id,jdbcType=BIGINT} </delete> <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoSe.SeWaterType"> <!--@mbg.generated--> insert into se_water_type (id, typeName) values (#{id,jdbcType=BIGINT}, #{typename,jdbcType=VARCHAR}) </insert> <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeWaterType"> <!--@mbg.generated--> insert into se_water_type <trim prefix="(" suffix=")" suffixOverrides=","> <if test="id != null"> id, </if> <if test="typename != null"> typeName, </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="id != null"> #{id,jdbcType=BIGINT}, </if> <if test="typename != null"> #{typename,jdbcType=VARCHAR}, </if> </trim> </insert> <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeWaterType"> <!--@mbg.generated--> update se_water_type <set> <if test="typename != null"> typeName = #{typename,jdbcType=VARCHAR}, </if> </set> where id = #{id,jdbcType=BIGINT} </update> <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoSe.SeWaterType"> <!--@mbg.generated--> update se_water_type set typeName = #{typename,jdbcType=VARCHAR} where id = #{id,jdbcType=BIGINT} </update> </mapper> pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/district/DistrictCtrl.java
@@ -297,6 +297,7 @@ List<Map<String, Object>> list_towns = Optional.ofNullable(sv.getDistrictsBySupperId(countyId)).orElse(new ArrayList<>()); if (list_towns.size() > 0) { array_towns = JSONArray.parseArray(JSON.toJSONString(list_towns)); job_county.put("children", array_towns); // 遍历每一个镇,将镇下村列表加到镇的子集 for (int j = 0; j < array_towns.size(); j++) { JSONObject job_town = array_towns.getJSONObject(j); @@ -310,7 +311,7 @@ //System.out.println("----" + array_towns); } // 镇村组装完毕,将镇村加到县下 job_county.put("children", array_towns); // job_county.put("children", array_towns); } // 县组装完毕 //String a = array_counties.toJSONString(); pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/district/DistrictVo.java
@@ -25,7 +25,7 @@ @Schema(description = "行政区编号", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "行政区编号不能为空") //不能为空也不能为null @Length(message = "行政区编号是一位或两位数", min = 1, max = 2) @Length(message = "行政区编号是一位或两位数", min = 1, max = 3) public String num ; @Schema(description = "行政区级别", requiredMode = Schema.RequiredMode.NOT_REQUIRED) pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/util/InitListener.java
@@ -10,10 +10,12 @@ import com.dy.pipIrrGlobal.daoBa.BaSettingsMapper; import com.dy.pipIrrGlobal.daoBa.BaUserMapper; import com.dy.pipIrrGlobal.daoSe.SePaymentMethodMapper; import com.dy.pipIrrGlobal.daoSe.SeWaterTypeMapper; import com.dy.pipIrrGlobal.pojoBa.BaDistrict; import com.dy.pipIrrGlobal.pojoBa.BaSettings; import com.dy.pipIrrGlobal.pojoBa.BaUser; import com.dy.pipIrrGlobal.pojoSe.SePaymentMethod; import com.dy.pipIrrGlobal.pojoSe.SeWaterType; import com.dy.pipIrrGlobal.util.DistrictLevel; import org.jdom2.Document; import org.springframework.beans.factory.annotation.Autowired; @@ -37,6 +39,7 @@ private BaUserMapper userDao ; private SePaymentMethodMapper paymentMethodDao ; private BaSettingsMapper settingsDao ; private SeWaterTypeMapper waterTypeDao ; @Autowired public void setDistriDao(BaDistrictMapper distriDao){ @@ -56,6 +59,11 @@ @Autowired public void setSettingsDao(BaSettingsMapper settingsDao){ this.settingsDao = settingsDao ; } @Autowired public void setWaterTypeDao(SeWaterTypeMapper waterTypeDao){ this.waterTypeDao = waterTypeDao ; } @@ -153,6 +161,18 @@ } } } if(!this.existWaterTypes()){ if(configXml.existElement(doc, "config.orgs.org" + num + ".waterTypes")){ for(int i = 1 ; i < 10000; i++){ if(configXml.existElement(doc, "config.orgs.org" + num + ".waterTypes.item" + i)){ String typeName = configXml.getSetAttrTxt(doc, "config.orgs.org" + num + ".waterTypes.item" + i,"typeName", null, false, null) ; this.saveWaterType(orgTag, typeName); }else{ break ; } } } } }else{ break ; } @@ -193,6 +213,15 @@ */ private boolean existSettings(){ Long total = this.settingsDao.selectCount(null) ; return (total != null && total > 0) ; } /** * 数据库中是否存在用水类型数据 * @return 存在否 */ private boolean existWaterTypes(){ Long total = this.waterTypeDao.selectCount(null) ; return (total != null && total > 0) ; } @@ -278,4 +307,18 @@ } } /** * 保存用水类型 * @param orgTag 机构标签 * @param typeName 名称 */ private void saveWaterType(String orgTag, String typeName) throws Exception{ if(typeName != null && !typeName.trim().equals("")){ SeWaterType po = new SeWaterType() ; po.setTypename(typeName); this.waterTypeDao.insert(po) ; } } } pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java
@@ -1,5 +1,7 @@ package com.dy.pipIrrSell.cardOperate; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.dy.common.aop.SsoAop; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; @@ -9,8 +11,10 @@ import com.dy.pipIrrGlobal.pojoSe.SeCardOperate; import com.dy.pipIrrGlobal.pojoSe.SeClientCard; import com.dy.pipIrrGlobal.util.AmountToChinese; import com.dy.pipIrrGlobal.util.Constant; import com.dy.pipIrrGlobal.voSe.*; import com.dy.pipIrrGlobal.voSe.VoActiveCard; 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; @@ -34,7 +38,6 @@ import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; import java.time.format.DateTimeFormatter; import java.util.*; /** @@ -134,7 +137,9 @@ seClientCard.setClientid(clientId); seClientCard.setMoney(amount); seClientCard.setState(CardStateENUM.NORMAL.getCode()); seClientCard.setOriginalCardId(originalCardId); if(originalCardId != null) { seClientCard.setOriginalCardId(originalCardId); } seClientCard.setCreatedt(activeTime); seClientCard.setLastoper(LastOperateENUM.ACTIVE.getCode()); Long cardId = Optional.ofNullable(clientCardSv.add(seClientCard)).orElse(0L) ; @@ -194,15 +199,6 @@ * @param bindingResult * @return */ @Operation(summary = "补卡", description = "补卡") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "操作结果:true:成功,false:失败(BaseResponse.content)", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = Boolean.class))} ) }) @PostMapping(path = "reissue", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() @@ -218,6 +214,7 @@ * cardId 原水卡(挂失水卡)ID,转移余额后需要更新卡余额为0 * moeny 余额,挂失时使用 * cardCost 卡片费用 * reissueAmount 退还金额 * paymentId 支付方式编号 * remarks 备注 * operator 操作人编号 @@ -227,15 +224,32 @@ String clientNum = ""; Long cardNum = po.getCardNum(); Long cardId = 0L; Integer cardCost = po.getCardCost(); Integer cardCost = Optional.ofNullable(po.getCardCost()).orElse(0); Float reissueAmount = po.getReissueAmount(); Long paymentId = po.getPaymentId(); String remarks = po.getRemarks(); Long operator = po.getOperator(); String protocol = null; // 判断当前水卡是否为挂失状态且未补卡,仅已经挂失其未补卡的可以补卡 // 如果传入的是10位的水卡编号,升为17位水卡编号 String cardNumS = String.valueOf(cardNum).trim(); if(cardNumS.length() == 10) { cardNumS = "100000" + cardNumS.substring(0,6) + "0" + cardNumS.substring(6); protocol = "p206V1_0_1"; } cardNum = Long.valueOf(cardNumS); // 判断当前水卡是否为挂失状态且未补卡,仅已经挂失且未补卡的可以补卡 if(!cardOperateSv.isLostAndUnreplaced(cardNum)) { return BaseResponseUtils.buildFail(SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); } // 如果传入了退还金额,需要判断老卡(被挂失的水卡)挂失时是否已经退款,无论退款多少都提示用户挂失时已退款 if(reissueAmount != null) { Double tradeAmount = cardOperateSv.getTradeAmountByCardNo(cardNum); if(tradeAmount != null) { return BaseResponseUtils.buildErrorMsg(SellResultCode.THE_FEE_CANNOT_BE_REFUNDED.getMessage()); } } /** @@ -243,7 +257,7 @@ */ Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap()); if(map == null || map.size() <= 0) { return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); } clientNum = map.get("clientNum").toString(); cardId = Long.parseLong(map.get("cardId").toString()); @@ -251,18 +265,22 @@ /** * 如果是补卡调用的开卡且转移了退还金额,需修改挂失卡余额为0 */ SeClientCard seClientCard = new SeClientCard(); seClientCard.setId(cardId); seClientCard.setMoney(0f); cardOperateSv.updateClientCard(seClientCard); if(reissueAmount != null) { SeClientCard seClientCard = new SeClientCard(); seClientCard.setId(cardId); seClientCard.setMoney(0f); cardOperateSv.updateClientCard(seClientCard); } /** * 添加开卡记录,退还金额冲到新卡中 */ DtoActiveCard dtoActiveCard = new DtoActiveCard(); dtoActiveCard.setProtocol(protocol); dtoActiveCard.setCardAddr(cardAddr); dtoActiveCard.setClientNum(clientNum); dtoActiveCard.setOriginalCardId(cardNum); dtoActiveCard.setOriginalCardId(cardId); //dtoActiveCard.setOriginalCardId(cardNum); dtoActiveCard.setCardCost(cardCost); dtoActiveCard.setAmount(reissueAmount); dtoActiveCard.setPaymentId(paymentId); @@ -271,14 +289,17 @@ BaseResponse<java.lang.Boolean> baseResponse_addActive = add_active(dtoActiveCard, null); if(!baseResponse_addActive.getCode().equals("0001")) { return BaseResponseUtils.buildFail(SellResultCode.REPLACE_FAIL_WRITE_RECHARGE_ERROR.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.REPLACE_FAIL_WRITE_RECHARGE_ERROR.getMessage()); } String theContent = String.valueOf(baseResponse_addActive.getContent()); cardNum = Long.parseLong(theContent.substring(theContent.indexOf("=") + 1, theContent.indexOf(","))); JSONObject job_content = (JSONObject) JSON.toJSON( baseResponse_addActive.getContent()); cardNum = job_content.getLong("cardNum"); String orderNumber = job_content.getString("orderNumber"); String projectNo = job_content.getString("projectNo"); Map map_response = new HashMap(); map_response.put("projectCode", Constant.projectCode_ym); map_response.put("projectNo", projectNo); map_response.put("orderNumber", orderNumber); map_response.put("cardNum", cardNum); return BaseResponseUtils.buildSuccess(map_response) ; } @@ -289,15 +310,6 @@ * @param bindingResult * @return */ @Operation(summary = "充值", description = "充值") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "操作结果:true:成功,false:失败(BaseResponse.content)", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = Boolean.class))} ) }) @PostMapping(path = "recharge", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() @@ -314,20 +326,10 @@ * @param bindingResult * @return */ @Operation(summary = "添加注销记录", description = "添加注销记录") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "操作结果:true:成功,false:失败(BaseResponse.content)", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = Boolean.class))} ) }) @PostMapping(path = "cancel", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> add_cancel(@RequestBody @Valid DtoCancel po, BindingResult bindingResult){ DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } @@ -351,10 +353,17 @@ Long operator = po.getOperator(); Date cancelTime = new Date(); // 如果传入的是10位的水卡编号,升为17位水卡编号 String cardNumS = String.valueOf(cardNum).trim(); if(cardNumS.length() == 10) { cardNumS = "100000" + cardNumS.substring(0,6) + "0" + cardNumS.substring(6); } cardNum = Long.valueOf(cardNumS); // 验证水卡状态是否支持当前操作 String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(cardNum)).orElse(""); if(stateName.length() == 0 || !stateName.equals("正常")) { return BaseResponseUtils.buildFail(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); return BaseResponseUtils.buildErrorMsg(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); } /** @@ -362,7 +371,7 @@ */ Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap()); if(map == null || map.size() <= 0) { return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); } cardId = Long.parseLong(map.get("cardId").toString()); clientId = Long.parseLong(map.get("clientId").toString()); @@ -380,7 +389,7 @@ seClientCard.setLastoper(LastOperateENUM.CANCEL.getCode()); Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0); if(rec_updateClientCard == 0) { return BaseResponseUtils.buildFail(SellResultCode.CANCEL_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.CANCEL_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); } /** @@ -399,7 +408,7 @@ Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L); if(rec == 0) { return BaseResponseUtils.buildFail(SellResultCode.CANCEL_FAIL_WRITE_CANCELL_ERROR.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.CANCEL_FAIL_WRITE_CANCELL_ERROR.getMessage()); } return BaseResponseUtils.buildSuccess(true) ; @@ -411,15 +420,6 @@ * @param bindingResult * @return */ @Operation(summary = "添加挂失记录", description = "添加挂失记录") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "操作结果:true:成功,false:失败(BaseResponse.content)", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = Boolean.class))} ) }) @PostMapping(path = "loss", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() @@ -431,7 +431,7 @@ /** * cardId 水卡编号(非传入参数,由cardNum反查) * clientId 农户编号(非传入参数,由cardNum反查) * cardNum 水卡编号 * cardNum 要挂失的水卡编号 * money 余额 * refund 退款金额 * remarks 备注 @@ -441,16 +441,23 @@ Long cardId = 0L; Long clientId = 0L; Long cardNum = po.getCardNum(); Float money = po.getMoney(); Float refund = po.getRefund(); Float money = Optional.ofNullable(po.getMoney()).orElse(0f); Float refund = Optional.ofNullable(po.getRefund()).orElse(0f); String remarks = po.getRemarks(); Long operator = po.getOperator(); Date lossTime = new Date(); // 如果传入的是10位的水卡编号,升为17位水卡编号 String cardNumS = String.valueOf(cardNum).trim(); if(cardNumS.length() == 10) { cardNumS = "100000" + cardNumS.substring(0,6) + "0" + cardNumS.substring(6); } cardNum = Long.valueOf(cardNumS); // 验证水卡状态是否支持当前操作 String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(cardNum)).orElse(""); if(stateName.length() == 0 || !stateName.equals("正常")) { return BaseResponseUtils.buildFail(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); return BaseResponseUtils.buildErrorMsg(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); } /** @@ -458,15 +465,17 @@ */ Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap()); if(map == null || map.size() <= 0) { return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); } cardId = Long.parseLong(map.get("cardId").toString()); clientId = Long.parseLong(map.get("clientId").toString()); /** * 修改农户卡信息: * 挂失时间 * 最后操作类型-4 * 余额 * 挂失时间 * 状态 * 最后操作类型-6 */ SeClientCard seClientCard = new SeClientCard(); seClientCard.setId(cardId); @@ -476,11 +485,12 @@ seClientCard.setLastoper(LastOperateENUM.LOSS.getCode()); Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0); if(rec_updateClientCard == 0) { return BaseResponseUtils.buildFail(SellResultCode.LOSS_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.LOSS_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); } /** * 添加挂失记录 * 如果退款金额不为空,则传入负值 */ SeCardOperate seCardOperate = new SeCardOperate(); seCardOperate.setCardId(cardId); @@ -494,7 +504,7 @@ seCardOperate.setOperateDt(lossTime); Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L); if(rec == 0) { return BaseResponseUtils.buildFail(SellResultCode.LOSS_FAIL_WRITE_LOSS_ERROR.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.LOSS_FAIL_WRITE_LOSS_ERROR.getMessage()); } return BaseResponseUtils.buildSuccess(true) ; @@ -506,15 +516,6 @@ * @param bindingResult * @return */ @Operation(summary = "添加冲正记录", description = "添加冲正记录") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "操作结果:true:成功,false:失败(BaseResponse.content)", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = Boolean.class))} ) }) @PostMapping(path = "reversal", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() @@ -542,10 +543,17 @@ Long operator = po.getOperator(); Date reversalTime = new Date(); // 如果传入的是10位的水卡编号,升为17位水卡编号 String cardNumS = String.valueOf(cardNum).trim(); if(cardNumS.length() == 10) { cardNumS = "100000" + cardNumS.substring(0,6) + "0" + cardNumS.substring(6); } cardNum = Long.valueOf(cardNumS); // 验证水卡状态是否支持当前操作 String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(cardNum)).orElse(""); if(stateName.length() == 0 || !stateName.equals("正常")) { return BaseResponseUtils.buildFail(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); return BaseResponseUtils.buildErrorMsg(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); } /** @@ -553,7 +561,7 @@ */ Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap()); if(map == null || map.size() <= 0) { return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); } cardId = Long.parseLong(map.get("cardId").toString()); clientId = Long.parseLong(map.get("clientId").toString()); @@ -570,7 +578,7 @@ seClientCard.setLastoper(LastOperateENUM.REVERSAL.getCode()); Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0); if(rec_updateClientCard == 0) { return BaseResponseUtils.buildFail(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); } /** @@ -587,7 +595,7 @@ seCardOperate.setOperateDt(reversalTime); Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L); if(rec == 0) { return BaseResponseUtils.buildFail(SellResultCode.REVERSAL_FAIL_WRITE_REVERSAL_ERROR.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.REVERSAL_FAIL_WRITE_REVERSAL_ERROR.getMessage()); } return BaseResponseUtils.buildSuccess(true) ; @@ -599,15 +607,6 @@ * @param bindingResult * @return */ @Operation(summary = "补扣", description = "补扣") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "操作结果:true:成功,false:失败(BaseResponse.content)", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = Boolean.class))} ) }) @PostMapping(path = "refund", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() @@ -635,10 +634,17 @@ Long operator = po.getOperator(); Date refundTime = new Date(); // 如果传入的是10位的水卡编号,升为17位水卡编号 String cardNumS = String.valueOf(cardNum).trim(); if(cardNumS.length() == 10) { cardNumS = "100000" + cardNumS.substring(0,6) + "0" + cardNumS.substring(6); } cardNum = Long.valueOf(cardNumS); // 验证水卡状态是否支持当前操作 String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(cardNum)).orElse(""); if(stateName.length() == 0 || !stateName.equals("正常")) { return BaseResponseUtils.buildFail(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); return BaseResponseUtils.buildErrorMsg(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); } /** @@ -646,7 +652,7 @@ */ Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap()); if(map == null || map.size() <= 0) { return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); } cardId = Long.parseLong(map.get("cardId").toString()); clientId = Long.parseLong(map.get("clientId").toString()); @@ -663,7 +669,7 @@ seClientCard.setLastoper(LastOperateENUM.REFUND.getCode()); Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0); if(rec_updateClientCard == 0) { return BaseResponseUtils.buildFail(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); } /** @@ -681,7 +687,7 @@ seCardOperate.setOperateDt(refundTime); Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L); if(rec == 0) { return BaseResponseUtils.buildFail(SellResultCode.REFUND_FAIL_WRITE_REFUND_ERROR.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.REFUND_FAIL_WRITE_REFUND_ERROR.getMessage()); } return BaseResponseUtils.buildSuccess(true) ; @@ -693,20 +699,10 @@ * @param bindingResult * @return */ @Operation(summary = "添加解锁记录", description = "添加解锁记录") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "操作结果:true:成功,false:失败(BaseResponse.content)", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = Boolean.class))} ) }) @PostMapping(path = "unlock", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> add_unlock(@RequestBody @Valid DtoUnlock po, BindingResult bindingResult){ DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } @@ -728,9 +724,16 @@ Long operator = po.getOperator(); Date unlockTime = new Date(); // 如果传入的是10位的水卡编号,升为17位水卡编号 String cardNumS = String.valueOf(cardNum).trim(); if(cardNumS.length() == 10) { cardNumS = "100000" + cardNumS.substring(0,6) + "0" + cardNumS.substring(6); } cardNum = Long.valueOf(cardNumS); // 判断当前水卡是否为挂失状态且未补卡,仅已经挂失其未补卡的可以解锁 if(!cardOperateSv.isLostAndUnreplaced(cardNum)) { return BaseResponseUtils.buildFail(SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); } /** @@ -738,7 +741,7 @@ */ Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap()); if(map == null || map.size() <= 0) { return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); } cardId = Long.parseLong(map.get("cardId").toString()); clientId = Long.parseLong(map.get("clientId").toString()); @@ -756,7 +759,7 @@ seClientCard.setLastoper(LastOperateENUM.UNLOCK.getCode()); Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0); if(rec_updateClientCard == 0) { return BaseResponseUtils.buildFail(SellResultCode.UNLOCK_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.UNLOCK_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); } /** @@ -772,7 +775,7 @@ seCardOperate.setOperateDt(unlockTime); Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L); if(rec == 0) { return BaseResponseUtils.buildFail(SellResultCode.UNLOCK_FAIL_WRITE_UNLOCK_ERROR.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.UNLOCK_FAIL_WRITE_UNLOCK_ERROR.getMessage()); } return BaseResponseUtils.buildSuccess(true) ; pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java
@@ -150,11 +150,17 @@ Long operator = po.getOperator(); Date rechargeTime = new Date(); // 如果传入的是10位的水卡编号,升为17位水卡编号 String cardNumS = String.valueOf(cardNum).trim(); if(cardNumS.length() == 10) { cardNumS = "100000" + cardNumS.substring(0,6) + "0" + cardNumS.substring(6); } cardNum = Long.valueOf(cardNumS); // 验证水卡状态是否支持当前操作 String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(cardNum)).orElse(""); if(stateName.length() == 0 || !stateName.equals("正常")) { return BaseResponseUtils.buildFail(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); return BaseResponseUtils.buildErrorMsg(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); } /** @@ -162,7 +168,7 @@ */ Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap()); if(map == null || map.size() <= 0) { return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); } cardId = Long.parseLong(map.get("cardId").toString()); clientId = Long.parseLong(map.get("clientId").toString()); @@ -179,7 +185,7 @@ seClientCard.setLastoper(LastOperateENUM.RECHARGE.getCode ()); Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0); if(rec_updateClientCard == 0) { return BaseResponseUtils.buildFail(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); } /** @@ -201,7 +207,7 @@ seCardOperateMapper.insert(seCardOperate); Long rec = Optional.ofNullable(seCardOperate.getId()).orElse(0L); if(rec == 0) { return BaseResponseUtils.buildFail(SellResultCode.REPLACE_FAIL_WRITE_RECHARGE_ERROR.getMessage()); return BaseResponseUtils.buildErrorMsg(SellResultCode.REPLACE_FAIL_WRITE_RECHARGE_ERROR.getMessage()); } return BaseResponseUtils.buildSuccess(true) ; @@ -430,11 +436,12 @@ * @return 是否已挂失未补卡 */ public Boolean isLostAndUnreplaced(Long cardNum) { Integer rec = seClientCardMapper.isLostAndUnreplaced(cardNum); if(rec != null && rec > 0) { return false; Integer lostCount = seClientCardMapper.getLostCount(cardNum); Integer replacedCount = seClientCardMapper.getReplacedCount(cardNum); if(lostCount > 0 && replacedCount == 0) { return true; } return true; return false; } /** @@ -453,4 +460,13 @@ public String getProjectNo() { return baSettingsMapper.getItemValue("projectNo"); } /** * 根据水卡编号获取其挂失时退款金额(补卡时判断使用) * @param cardNum * @return */ public Double getTradeAmountByCardNo(Long cardNum) { return seCardOperateMapper.getTradeAmountByCardNo(cardNum); } } pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoLoss.java
@@ -1,9 +1,7 @@ package com.dy.pipIrrSell.cardOperate.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Positive; import lombok.*; /** @@ -23,7 +21,7 @@ public static final long serialVersionUID = 202401191033001L; /** * 水卡编号 * 要挂失的水卡编号 */ @Schema(description = "水卡编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @NotNull(message = "水卡编号不能为空") @@ -33,14 +31,12 @@ * 余额 */ @Schema(description = "余额", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @Min(value = 0, message="余额不能小于0") private Float money; /** * 退款金额 */ @Schema(description = "退款金额", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @Min(value = 0, message="退款金额不能小于0") private Float refund; /** @@ -53,6 +49,5 @@ * 操作人编号 */ @Schema(description = "操作人编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @Positive(message = "操作人编号必须为大于0的整数") private Long operator; } pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoReissue.java
@@ -1,9 +1,8 @@ package com.dy.pipIrrSell.cardOperate.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Positive; import jakarta.validation.constraints.NotNull; import lombok.*; /** @@ -32,6 +31,7 @@ * 水卡编号,不是开卡接口传入,由农户编号获得,充值需要 */ @Schema(description = "水卡编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @NotNull(message = "水卡编号不能为空") private Long cardNum; /** @@ -45,21 +45,19 @@ * 卡片费用 */ @Schema(description = "卡片费用", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @Positive(message = "卡片费用必须为大于0的整数") private Integer cardCost; /** * 退还金额,补开卡时充值用 */ @Schema(description = "退还金额", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @Min(value = 0, message="退还金额不能小于0") private Float reissueAmount; /** * 支付方式编号 */ @Schema(description = "支付方式编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @Positive(message = "支付方式编号必须为大于0的整数") @NotNull(message = "支付方式不能为空") private Long paymentId; /** @@ -72,6 +70,6 @@ * 操作人编号 */ @Schema(description = "操作人编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @Positive(message = "操作人编号必须为大于0的整数") @NotNull(message = "操作人不能为空") private Long operator; } pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/SeClientToVoClient.java
@@ -24,5 +24,6 @@ //@Mapping(target = "cardCount", source = "cardCount") @Mapping(target = "address", source = "address") @Mapping(target = "operateDt", source = "operatedt") @Mapping(target = "typeId", source = "typeid") VoClient po2vo(SeClient po); } pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardSv.java
@@ -110,8 +110,7 @@ * @return */ public String getCardStateByCardNum(Long cardNum) { String stateName = Optional.ofNullable(seClientCardMapper.getCardStateByCardNum(cardNum)).orElse(""); return stateName; return Optional.ofNullable(seClientCardMapper.getCardStateByCardNum(cardNum)).orElse(""); } /** @@ -170,4 +169,6 @@ return rsVo ; } } pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/result/SellResultCode.java
@@ -34,6 +34,8 @@ THE_CARD_NOT_EXIST(10012, "没有符合条件的水卡"), THE_CARD_NOT_SUPPORT_THIS_OPERATION(10013, "水卡状态不支持当前操作"), THE_FEE_CANNOT_BE_REFUNDED(10014, "原卡挂失时已退款,补卡时不能补费用"), /** * 充值 */