src/main/java/com/lunhan/water/entity/request/rechargerecords/Recharge.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lunhan/water/host/controller/api/UserController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lunhan/water/repository/po/HeartbeatDataPO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lunhan/water/service/PaymentRecordsService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lunhan/water/service/PaymentServices.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lunhan/water/service/RechargeRecordsService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/application-dev.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/application-test.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/lunhan/water/entity/request/rechargerecords/Recharge.java
对比新文件 @@ -0,0 +1,28 @@ package com.lunhan.water.entity.request.rechargerecords; import lombok.Data; import java.math.BigDecimal; @Data public class Recharge { /** * 订单金额 */ private BigDecimal orderAmount; /** * 折扣金额 */ private BigDecimal discountAmount; /** * 充值金额 */ private BigDecimal rechargeAmount; /** * *备注 */ private String remark; } src/main/java/com/lunhan/water/host/controller/api/UserController.java
@@ -6,7 +6,9 @@ import com.lunhan.water.common.util.ParameterUtil; import com.lunhan.water.common.validator.ParameterValidateResult; import com.lunhan.water.common.validator.ParameterValidator; import com.lunhan.water.entity.enums.EPayType; import com.lunhan.water.entity.request.paymentrecords.ReqBuyWater; import com.lunhan.water.entity.request.rechargerecords.Recharge; import com.lunhan.water.entity.request.userlogin.ReqModifyUserLogin; import com.lunhan.water.entity.search.SearchPaymentRecords; import com.lunhan.water.entity.search.SearchRechargeRecords; @@ -110,4 +112,25 @@ request.setUserId(user.getId()); return rechargeRecordsService.search(request); } /** * 用户充值 * * @author li。ling。yu * @date 2023/08/04 */ @PostMapping(value = "fees") public ExecutedResult<String> pay(@RequestBody Recharge request) { //#region 参数验证 ParameterValidator validator = new ParameterValidator() // 必须大于0 .addGreater(ParameterUtil.named("充值金额"), request.getRechargeAmount(), BigDecimal.ZERO) ; LoginUserDTO loginUser = super.getTokenUser(); ParameterValidateResult result = validator.validate(); if (result.getIsFiled()) { return failed(result.getErrorMsg()); } //#endregion return this.rechargeRecordsService.recharge(request,loginUser); } } src/main/java/com/lunhan/water/repository/po/HeartbeatDataPO.java
@@ -41,16 +41,21 @@ */ private Long id; /** * null * 设备code */ @TableField(value = "data_key") private String dataKey; /** * null * 收到的心跳 */ @TableField(value = "data_value") private Integer dataValue; /** * 发送心跳 */ @TableField(value = "send_value") private Integer sendValue; /** * null */ @TableLogic src/main/java/com/lunhan/water/service/PaymentRecordsService.java
@@ -235,8 +235,9 @@ data.addProperty(facilityPO.getFacilityCode() + "_amount", request.getAmount().multiply(BigDecimal.valueOf(100))); data.addProperty(facilityPO.getFacilityCode() + "_user", userLoginPO.getUserCode()); data.addProperty(facilityPO.getFacilityCode() + "_state", 1); boolean send=false; if (Objects.nonNull(mqttServer)) { mqttServer.send(topic, data.toString()); send = mqttServer.send(topic, data.toString()); } else { try { System.out.println("mqttServer bean尚未初始化..."); @@ -245,8 +246,11 @@ } catch (Exception ignored) { } if (Objects.nonNull(mqttServer)) { mqttServer.send(topic, data.toString()); send=mqttServer.send(topic, data.toString()); } } if(!send){ ExecutedResult.failed("通讯断开!"); } return ExecutedResult.success("请点击设备取水按钮取水"); } @@ -361,14 +365,37 @@ public void uploadState(String time,WaterFacilityPO facilityPO, List<CountVO> listVo){ CountVO heartbeatVO = listVo.stream().filter(x -> x.getName().equals(facilityPO.getFacilityCode() + "_heartbeat")).findFirst().orElse(null); HeartbeatDataPO heartbeatDataPO = heartbeatDataMapper.getByKey(facilityPO.getFacilityCode()); if(Objects.isNull(heartbeatDataPO)){ if(Objects.nonNull(heartbeatDataPO)){ heartbeatDataPO.setDataValue(Integer.valueOf(heartbeatVO.getValue())); heartbeatDataPO.setSendValue(heartbeatDataPO.getSendValue()==0?1:0); heartbeatDataMapper.updateById(heartbeatDataPO); }else { HeartbeatDataPO dataPO=new HeartbeatDataPO(); dataPO.setDataKey(facilityPO.getFacilityCode()); dataPO.setSendValue(0); dataPO.setDataValue(Integer.valueOf(heartbeatVO.getValue())); dataPO.setCreateTime(LocalDateTimeUtil.nowTimeStamp()); dataPO.setRemark(LocalDateTimeUtil.nowDateTimeStr()); heartbeatDataMapper.insert(dataPO); } //发送心跳数据 // 发送心跳 String topic = "zundong/"+facilityPO.getFacilityCode()+"/remotecontrol/"; JsonObject data = new JsonObject(); data.addProperty(facilityPO.getFacilityCode()+"_heartbeat", heartbeatDataPO.getSendValue()==0?1:0); if (Objects.nonNull(mqttServer)) { mqttServer.send(topic, data.toString()); } else { try { System.out.println("mqttServer bean尚未初始化..."); mqttServer = SpringUtil.getBean(MQTTServer.class); System.out.println("mqttServer 初始化bean成功!"); } catch (Exception ignored) { } if (Objects.nonNull(mqttServer)) { mqttServer.send(topic, data.toString()); } } } public ExecutedResult<List<PaymentRecordsVO>> getList(List<Long> listId) { List<PaymentRecordsVO> result = new ArrayList<>(); src/main/java/com/lunhan/water/service/PaymentServices.java
@@ -20,6 +20,7 @@ import com.lunhan.water.entity.request.pay.ReqPayRefund; import com.lunhan.water.repository.impl.*; import com.lunhan.water.repository.mapper.SysDictTypeMapper; import com.lunhan.water.repository.po.*; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; @@ -33,6 +34,7 @@ import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -58,6 +60,10 @@ private TradeRecordMapperImpl tradeRecordDao; @Autowired private RedisTemplate<String, Object> redisTemplate; @Autowired private SysDictTypeMapperImpl sysDictTypeMapper; @Autowired private SysDictDataMapperImpl sysDictDataMapper; /** @@ -111,7 +117,7 @@ item.setPaymentMethod(EPayType.WX_PAY.getDesc()); item.setRechargeStatus(EYesOrNo.NO.getValue()); item.setRechargeAmount(request.getTradeAmount()); item.setComment("水卡充值"); item.setComment("余额充值"); item.setCreateTime(LocalDateTimeUtil.nowTimeStamp()); item.setCreateUser(loginUser.getUserId()); item.setCreateUserName(loginUser.getNickName()); @@ -378,8 +384,17 @@ UserLoginPO user = userLoginMapper.getById(rechargeOrderPO.getUserId()); UserLoginPO userLoginPO = new UserLoginPO(); userLoginPO.setId(user.getId()); //余额加上交易金额=充值后的余额 userLoginPO.setBalance(userLoginPO.getBalance().add(trade.getTradeAmount())); //将充值金额转换为水量 List<SysDictDataPO> feesAmount = sysDictDataMapper.getListByType("fees_amount"); if(ListUtil.isNotNullOrEmpty(feesAmount)){ SysDictDataPO sysDictDataPO = feesAmount.get(0); BigDecimal bigDecimal = trade.getTradeAmount().multiply(new BigDecimal(sysDictDataPO.getDictValue())).setScale(2, BigDecimal.ROUND_DOWN); userLoginPO.setBalance(bigDecimal); }else { //默认单价 BigDecimal bigDecimal = trade.getTradeAmount().multiply(new BigDecimal(3)).setScale(2, BigDecimal.ROUND_DOWN); userLoginPO.setBalance(bigDecimal); } int modify = userLoginMapper.updateById(userLoginPO); //添加资金明细记录 UserCapitalChangePO changePO = new UserCapitalChangePO(); src/main/java/com/lunhan/water/service/RechargeRecordsService.java
@@ -24,12 +24,22 @@ import com.lunhan.water.common.*; import com.lunhan.water.common.enums.*; import com.lunhan.water.common.jwt.LoginUserDTO; import com.lunhan.water.common.model.Tuple; import com.lunhan.water.common.util.*; import com.lunhan.water.entity.enums.EPayState; import com.lunhan.water.entity.enums.EPayType; import com.lunhan.water.entity.request.rechargerecords.Recharge; import com.lunhan.water.repository.impl.RechargeOrderMapperImpl; import com.lunhan.water.repository.impl.UserLoginMapperImpl; import com.lunhan.water.repository.po.RechargeOrderPO; import com.lunhan.water.repository.po.UserLoginPO; import com.lunhan.water.repository.vo.PaymentRecordsVO; import org.apache.commons.lang3.BooleanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; import com.lunhan.water.repository.impl.RechargeRecordsMapperImpl; @@ -39,6 +49,7 @@ import com.lunhan.water.entity.search.SearchRechargeRecords; import com.lunhan.water.repository.vo.RechargeRecordsVO; import com.lunhan.water.service.convert.RechargeRecordsConvert; import org.springframework.transaction.annotation.Transactional; /** * 充值记录 @@ -48,6 +59,10 @@ public class RechargeRecordsService extends BaseService { @Autowired private RechargeRecordsMapperImpl mapper; @Autowired private UserLoginMapperImpl userLoginMapper; @Autowired private RechargeOrderMapperImpl rechargeOrderMapper; public ExecutedResult<Long> create(ReqCreateRechargeRecords request) { // 转换po @@ -194,7 +209,36 @@ } return ExecutedResult.success(result); } /** * 充值订单 * * @param request * @param loginUser * @return */ public ExecutedResult<String> recharge(Recharge request, LoginUserDTO loginUser) { Long now = LocalDateTimeUtil.nowTimeStamp(); // 修改用户余额 UserLoginPO userLoginPO = userLoginMapper.get4Openid(loginUser.getUserId()); if (Objects.isNull(userLoginPO)) { return ExecutedResult.failed("用户信息不存在!"); } RechargeOrderPO orderPO=new RechargeOrderPO(); orderPO.setUserId(userLoginPO.getId()); orderPO.setOrderNo("CZ"+SnowFlakeUtil.getId()); orderPO.setOrderAmount(request.getRechargeAmount()); orderPO.setDiscountAmount(BigDecimal.ZERO); orderPO.setPaymentAmount(request.getRechargeAmount()); orderPO.setPayType(EPayType.WX_PAY.getValue()); orderPO.setPayState(EPayState.WAITING.getValue()); orderPO.setCreateTime(now); orderPO.setRemark("后台充值"); int insert = rechargeOrderMapper.insert(orderPO); if(insert>0){ return ExecutedResult.success(orderPO.getOrderNo()); } return ExecutedResult.failed("提交充值订单失败!"); } public ExecutedResult<PagerResult<RechargeRecordsVO>> search(SearchRechargeRecords search) { // 处理创建时间范围-查询参数 if(search.getDateType()!=null&&search.getDateType()>0){ src/main/resources/application-dev.yml
@@ -48,7 +48,7 @@ enable: false mqtt: # 是否启用 enable: true enable: false host: 113.250.189.120 port: 1885 user: admin src/main/resources/application-test.yml
@@ -6,7 +6,7 @@ date-format: yyyy-MM-dd HH:mm:ss datasource: driver-class-name: org.postgresql.Driver url: jdbc:postgresql://113.250.189.120:57654/test_db1 url: jdbc:postgresql://113.250.189.120:57654/water_ration_system username: lunhan password: lunhan.20240330 druid: @@ -41,3 +41,32 @@ quartz: # 是否启用 enable: true mqtt: # 是否启用 enable: true host: 113.250.189.120 port: 1885 user: admin password: public # 订阅主题 topic: zundong/# # 订阅消息的客户端id clientId: water-ration-service-dev # 连接超时时间 connectionTimeout: 10 # 心跳 keepAliveInterval: 20 # 发送消息的客户端id serverClientId: water-ration-service-publish-dev pay: weiXin: merchantId: 1610112902 merchantKey: HWYTddj1235jdskDAS5353fgsdAD4S53 keyPath: d:/data/wxpay/apiclient_cert.p12 # 商户证书路径 xxx_cert.p12 privateKeyPath: d:/data/wxpay/apiclient_key.pem # 商户证书路径 xxx_key.pem certificateSn: 48FC0C8D96B147CE751AEEBC882C20676F900581 # 微信支付API证书序列号 appID: wx08c82dac406bee56 notifyBasicUrl: https://www.huiwuyuntong.com/water-qinghe-local # 本地调试回调,请用frpc代理天翼云服务器端口 11101,到本机的8929