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-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-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()); } return BaseResponseUtils.buildSuccess(res); } 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-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; }