diff --git a/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/PaymentLogService.java b/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/PaymentLogService.java index 3efa0bb..4d80db5 100644 --- a/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/PaymentLogService.java +++ b/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/PaymentLogService.java @@ -32,4 +32,7 @@ public interface PaymentLogService extends IService { void saveOrUpdate(PaymentLogForm paymentLogForm,String id, boolean isSave) throws Exception; + String processQuery(String body); + + boolean updateStats(String orderNo,String status); } diff --git a/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/PaymentService.java b/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/PaymentService.java index aeeb21d..f16f174 100644 --- a/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/PaymentService.java +++ b/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/PaymentService.java @@ -36,4 +36,5 @@ public interface PaymentService extends IService { PaymentEntity getUsablePayment(String enterpriseId, BigDecimal amount); List getTimeoutPayment(String enterpriseId, BigDecimal amount); + PaymentEntity getByOrderNo(String orderNo); } diff --git a/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/impl/PaymentLogServiceImpl.java b/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/impl/PaymentLogServiceImpl.java index f21cd8a..3228ba5 100644 --- a/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/impl/PaymentLogServiceImpl.java +++ b/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/impl/PaymentLogServiceImpl.java @@ -1,23 +1,35 @@ package jnpf.service.impl; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import jnpf.entity.*; import jnpf.mapper.PaymentLogMapper; import jnpf.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jnpf.model.paymentlog.*; + import java.math.BigDecimal; + import cn.hutool.core.util.ObjectUtil; import jnpf.permission.model.authorize.AuthorizeConditionModel; import jnpf.util.GeneraterSwapUtil; import jnpf.database.model.superQuery.SuperQueryJsonModel; import jnpf.database.model.superQuery.ConditionJsonModel; import jnpf.database.model.superQuery.SuperQueryConditionModel; + import java.lang.reflect.Field; + import com.baomidou.mybatisplus.annotation.TableField; + import java.util.regex.Pattern; + import jnpf.model.QueryModel; + import java.util.stream.Collectors; + import jnpf.base.model.ColumnDataModel; +import org.aspectj.weaver.ast.Var; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.metadata.IPage; import jnpf.database.model.superQuery.SuperJsonModel; @@ -25,13 +37,19 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; + import java.text.SimpleDateFormat; + import jnpf.util.*; + import java.util.*; + import jnpf.base.UserInfo; import jnpf.permission.entity.UserEntity; + +import javax.annotation.Resource; + /** - * * 微信支付日志 * 版本: V3.5 * 版权: 引迈信息技术有限公司(https://www.jnpfsoft.com) @@ -39,7 +57,7 @@ import jnpf.permission.entity.UserEntity; * 日期: 2024-07-24 */ @Service -public class PaymentLogServiceImpl extends ServiceImpl implements PaymentLogService{ +public class PaymentLogServiceImpl extends ServiceImpl implements PaymentLogService { @Autowired private GeneraterSwapUtil generaterSwapUtil; @@ -47,255 +65,336 @@ public class PaymentLogServiceImpl extends ServiceImpl getList(PaymentLogPagination paymentLogPagination){ - return getTypeList(paymentLogPagination,paymentLogPagination.getDataType()); + public List getList(PaymentLogPagination paymentLogPagination) { + return getTypeList(paymentLogPagination, paymentLogPagination.getDataType()); } - /** 列表查询 */ + + /** + * 列表查询 + */ @Override - public List getTypeList(PaymentLogPagination paymentLogPagination,String dataType){ - String userId=userProvider.get().getUserId(); - List AllIdList =new ArrayList(); - List> intersectionList =new ArrayList<>(); + public List getTypeList(PaymentLogPagination paymentLogPagination, String dataType) { + String userId = userProvider.get().getUserId(); + List AllIdList = new ArrayList(); + List> intersectionList = new ArrayList<>(); boolean isPc = ServletUtil.getHeader("jnpf-origin").equals("pc"); String columnData = !isPc ? PaymentLogConstant.getAppColumnData() : PaymentLogConstant.getColumnData(); ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(columnData, ColumnDataModel.class); String ruleJson = !isPc ? JsonUtil.getObjectToString(columnDataModel.getRuleListApp()) : JsonUtil.getObjectToString(columnDataModel.getRuleList()); - int total=0; - int paymentLogNum =0; - QueryWrapper paymentLogQueryWrapper=new QueryWrapper<>(); + int total = 0; + int paymentLogNum = 0; + QueryWrapper paymentLogQueryWrapper = new QueryWrapper<>(); List allSuperIDlist = new ArrayList<>(); - String superOp =""; - if (ObjectUtil.isNotEmpty(paymentLogPagination.getSuperQueryJson())){ + String superOp = ""; + if (ObjectUtil.isNotEmpty(paymentLogPagination.getSuperQueryJson())) { List allSuperList = new ArrayList<>(); - List> intersectionSuperList = new ArrayList<>(); + List> intersectionSuperList = new ArrayList<>(); String queryJson = paymentLogPagination.getSuperQueryJson(); SuperJsonModel superJsonModel = JsonUtil.getJsonToBean(queryJson, SuperJsonModel.class); int superNum = 0; QueryWrapper paymentLogSuperWrapper = new QueryWrapper<>(); - paymentLogSuperWrapper = generaterSwapUtil.getCondition(new QueryModel(paymentLogSuperWrapper,PaymentLogEntity.class,queryJson,"0")); + paymentLogSuperWrapper = generaterSwapUtil.getCondition(new QueryModel(paymentLogSuperWrapper, PaymentLogEntity.class, queryJson, "0")); int paymentLogNum1 = paymentLogSuperWrapper.getExpression().getNormal().size(); - if (paymentLogNum1>0){ - List paymentLogList =this.list(paymentLogSuperWrapper).stream().map(PaymentLogEntity::getId).collect(Collectors.toList()); + if (paymentLogNum1 > 0) { + List paymentLogList = this.list(paymentLogSuperWrapper).stream().map(PaymentLogEntity::getId).collect(Collectors.toList()); allSuperList.addAll(paymentLogList); intersectionSuperList.add(paymentLogList); superNum++; } superOp = superNum > 0 ? superJsonModel.getMatchLogic() : ""; //and or - if(superOp.equalsIgnoreCase("and")){ + if (superOp.equalsIgnoreCase("and")) { allSuperIDlist = generaterSwapUtil.getIntersection(intersectionSuperList); - }else{ + } else { allSuperIDlist = allSuperList; } } List allRuleIDlist = new ArrayList<>(); - String ruleOp =""; - if (ObjectUtil.isNotEmpty(ruleJson)){ + String ruleOp = ""; + if (ObjectUtil.isNotEmpty(ruleJson)) { List allRuleList = new ArrayList<>(); - List> intersectionRuleList = new ArrayList<>(); + List> intersectionRuleList = new ArrayList<>(); SuperJsonModel ruleJsonModel = JsonUtil.getJsonToBean(ruleJson, SuperJsonModel.class); int ruleNum = 0; QueryWrapper paymentLogSuperWrapper = new QueryWrapper<>(); - paymentLogSuperWrapper = generaterSwapUtil.getCondition(new QueryModel(paymentLogSuperWrapper,PaymentLogEntity.class,ruleJson,"0")); + paymentLogSuperWrapper = generaterSwapUtil.getCondition(new QueryModel(paymentLogSuperWrapper, PaymentLogEntity.class, ruleJson, "0")); int paymentLogNum1 = paymentLogSuperWrapper.getExpression().getNormal().size(); - if (paymentLogNum1>0){ - List paymentLogList =this.list(paymentLogSuperWrapper).stream().map(PaymentLogEntity::getId).collect(Collectors.toList()); + if (paymentLogNum1 > 0) { + List paymentLogList = this.list(paymentLogSuperWrapper).stream().map(PaymentLogEntity::getId).collect(Collectors.toList()); allRuleList.addAll(paymentLogList); intersectionRuleList.add(paymentLogList); ruleNum++; } ruleOp = ruleNum > 0 ? ruleJsonModel.getMatchLogic() : ""; //and or - if(ruleOp.equalsIgnoreCase("and")){ + if (ruleOp.equalsIgnoreCase("and")) { allRuleIDlist = generaterSwapUtil.getIntersection(intersectionRuleList); - }else{ + } else { allRuleIDlist = allRuleList; } } - boolean pcPermission = false; - boolean appPermission = false; - if(isPc && pcPermission){ - if (!userProvider.get().getIsAdministrator()){ - Object paymentLogObj=generaterSwapUtil.getAuthorizeCondition(new QueryModel(paymentLogQueryWrapper,PaymentLogEntity.class,paymentLogPagination.getMenuId(),"0")); - if (ObjectUtil.isEmpty(paymentLogObj)){ - return new ArrayList<>(); - } else { - paymentLogQueryWrapper = (QueryWrapper)paymentLogObj; - if( paymentLogQueryWrapper.getExpression().getNormal().size()>0){ - paymentLogNum++; - } - } - } - } - if(!isPc && appPermission){ - if (!userProvider.get().getIsAdministrator()){ - Object paymentLogObj=generaterSwapUtil.getAuthorizeCondition(new QueryModel(paymentLogQueryWrapper,PaymentLogEntity.class,paymentLogPagination.getMenuId(),"0")); - if (ObjectUtil.isEmpty(paymentLogObj)){ - return new ArrayList<>(); - } else { - paymentLogQueryWrapper = (QueryWrapper)paymentLogObj; - if( paymentLogQueryWrapper.getExpression().getNormal().size()>0){ - paymentLogNum++; - } + boolean pcPermission = false; + boolean appPermission = false; + if (isPc && pcPermission) { + if (!userProvider.get().getIsAdministrator()) { + Object paymentLogObj = generaterSwapUtil.getAuthorizeCondition(new QueryModel(paymentLogQueryWrapper, PaymentLogEntity.class, paymentLogPagination.getMenuId(), "0")); + if (ObjectUtil.isEmpty(paymentLogObj)) { + return new ArrayList<>(); + } else { + paymentLogQueryWrapper = (QueryWrapper) paymentLogObj; + if (paymentLogQueryWrapper.getExpression().getNormal().size() > 0) { + paymentLogNum++; + } + } + } } + if (!isPc && appPermission) { + if (!userProvider.get().getIsAdministrator()) { + Object paymentLogObj = generaterSwapUtil.getAuthorizeCondition(new QueryModel(paymentLogQueryWrapper, PaymentLogEntity.class, paymentLogPagination.getMenuId(), "0")); + if (ObjectUtil.isEmpty(paymentLogObj)) { + return new ArrayList<>(); + } else { + paymentLogQueryWrapper = (QueryWrapper) paymentLogObj; + if (paymentLogQueryWrapper.getExpression().getNormal().size() > 0) { + paymentLogNum++; + } + } - } - } - if(isPc){ - if(ObjectUtil.isNotEmpty(paymentLogPagination.getOrderNo())){ - paymentLogNum++; + } + } + if (isPc) { + if (ObjectUtil.isNotEmpty(paymentLogPagination.getOrderNo())) { + paymentLogNum++; String value = paymentLogPagination.getOrderNo() instanceof List ? - JsonUtil.getObjectToString(paymentLogPagination.getOrderNo()) : - String.valueOf(paymentLogPagination.getOrderNo()); - paymentLogQueryWrapper.lambda().like(PaymentLogEntity::getOrderNo,value); + JsonUtil.getObjectToString(paymentLogPagination.getOrderNo()) : + String.valueOf(paymentLogPagination.getOrderNo()); + paymentLogQueryWrapper.lambda().like(PaymentLogEntity::getOrderNo, value); } - if(ObjectUtil.isNotEmpty(paymentLogPagination.getTradeState())){ - paymentLogNum++; + if (ObjectUtil.isNotEmpty(paymentLogPagination.getTradeState())) { + paymentLogNum++; - List idList = new ArrayList<>(); - try { - String[][] tradeState = JsonUtil.getJsonToBean(paymentLogPagination.getTradeState(),String[][].class); - for(int i=0;i0){ - idList.add(JsonUtil.getObjectToString(Arrays.asList(tradeState[i]))); - } - } - }catch (Exception e1){ - try { - List tradeState = JsonUtil.getJsonToList(paymentLogPagination.getTradeState(),String.class); - if(tradeState.size()>0){ - idList.addAll(tradeState); - } - }catch (Exception e2){ - idList.add(String.valueOf(paymentLogPagination.getTradeState())); - } - } - paymentLogQueryWrapper.lambda().and(t->{ - idList.forEach(tt->{ - t.like(PaymentLogEntity::getTradeState, tt).or(); - }); - }); + List idList = new ArrayList<>(); + try { + String[][] tradeState = JsonUtil.getJsonToBean(paymentLogPagination.getTradeState(), String[][].class); + for (int i = 0; i < tradeState.length; i++) { + if (tradeState[i].length > 0) { + idList.add(JsonUtil.getObjectToString(Arrays.asList(tradeState[i]))); + } + } + } catch (Exception e1) { + try { + List tradeState = JsonUtil.getJsonToList(paymentLogPagination.getTradeState(), String.class); + if (tradeState.size() > 0) { + idList.addAll(tradeState); + } + } catch (Exception e2) { + idList.add(String.valueOf(paymentLogPagination.getTradeState())); + } + } + paymentLogQueryWrapper.lambda().and(t -> { + idList.forEach(tt -> { + t.like(PaymentLogEntity::getTradeState, tt).or(); + }); + }); } } List intersection = generaterSwapUtil.getIntersection(intersectionList); - if (total>0){ - if (intersection.size()==0){ + if (total > 0) { + if (intersection.size() == 0) { intersection.add("jnpfNullList"); } paymentLogQueryWrapper.lambda().in(PaymentLogEntity::getId, intersection); } - //是否有高级查询 - if (StringUtil.isNotEmpty(superOp)){ - if (allSuperIDlist.size()==0){ + //是否有高级查询 + if (StringUtil.isNotEmpty(superOp)) { + if (allSuperIDlist.size() == 0) { allSuperIDlist.add("jnpfNullList"); } List finalAllSuperIDlist = allSuperIDlist; - paymentLogQueryWrapper.lambda().and(t->t.in(PaymentLogEntity::getId, finalAllSuperIDlist)); + paymentLogQueryWrapper.lambda().and(t -> t.in(PaymentLogEntity::getId, finalAllSuperIDlist)); } - //是否有数据过滤查询 - if (StringUtil.isNotEmpty(ruleOp)){ - if (allRuleIDlist.size()==0){ + //是否有数据过滤查询 + if (StringUtil.isNotEmpty(ruleOp)) { + if (allRuleIDlist.size() == 0) { allRuleIDlist.add("jnpfNullList"); } List finalAllRuleIDlist = allRuleIDlist; - paymentLogQueryWrapper.lambda().and(t->t.in(PaymentLogEntity::getId, finalAllRuleIDlist)); + paymentLogQueryWrapper.lambda().and(t -> t.in(PaymentLogEntity::getId, finalAllRuleIDlist)); } //排序 - if(StringUtil.isEmpty(paymentLogPagination.getSidx())){ + if (StringUtil.isEmpty(paymentLogPagination.getSidx())) { paymentLogQueryWrapper.lambda().orderByDesc(PaymentLogEntity::getId); - }else{ + } else { try { String sidx = paymentLogPagination.getSidx(); - String[] strs= sidx.split("_name"); + String[] strs = sidx.split("_name"); PaymentLogEntity paymentLogEntity = new PaymentLogEntity(); Field declaredField = paymentLogEntity.getClass().getDeclaredField(strs[0]); declaredField.setAccessible(true); String value = declaredField.getAnnotation(TableField.class).value(); - paymentLogQueryWrapper="asc".equals(paymentLogPagination.getSort().toLowerCase())?paymentLogQueryWrapper.orderByAsc(value):paymentLogQueryWrapper.orderByDesc(value); + paymentLogQueryWrapper = "asc".equals(paymentLogPagination.getSort().toLowerCase()) ? paymentLogQueryWrapper.orderByAsc(value) : paymentLogQueryWrapper.orderByDesc(value); } catch (NoSuchFieldException e) { e.printStackTrace(); } } - if("0".equals(dataType)){ - if((total>0 && AllIdList.size()>0) || total==0){ - Page page=new Page<>(paymentLogPagination.getCurrentPage(), paymentLogPagination.getPageSize()); - IPage userIPage=this.page(page, paymentLogQueryWrapper); - return paymentLogPagination.setData(userIPage.getRecords(),userIPage.getTotal()); - }else{ + if ("0".equals(dataType)) { + if ((total > 0 && AllIdList.size() > 0) || total == 0) { + Page page = new Page<>(paymentLogPagination.getCurrentPage(), paymentLogPagination.getPageSize()); + IPage userIPage = this.page(page, paymentLogQueryWrapper); + return paymentLogPagination.setData(userIPage.getRecords(), userIPage.getTotal()); + } else { List list = new ArrayList(); return paymentLogPagination.setData(list, list.size()); } - }else{ + } else { return this.list(paymentLogQueryWrapper); } } + @Override - public PaymentLogEntity getInfo(String id){ - QueryWrapper queryWrapper=new QueryWrapper<>(); - queryWrapper.lambda().eq(PaymentLogEntity::getId,id); + public PaymentLogEntity getInfo(String id) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(PaymentLogEntity::getId, id); return this.getOne(queryWrapper); } + @Override - public void create(PaymentLogEntity entity){ + public void create(PaymentLogEntity entity) { this.save(entity); } + @Override - public boolean update(String id, PaymentLogEntity entity){ + public boolean update(String id, PaymentLogEntity entity) { return this.updateById(entity); } + @Override - public void delete(PaymentLogEntity entity){ - if(entity!=null){ + public void delete(PaymentLogEntity entity) { + if (entity != null) { this.removeById(entity.getId()); } } - /** 验证表单唯一字段,正则,非空 i-0新增-1修改*/ + + /** + * 验证表单唯一字段,正则,非空 i-0新增-1修改 + */ @Override - public String checkForm(PaymentLogForm form,int i) { - boolean isUp =StringUtil.isNotEmpty(form.getId()) && !form.getId().equals("0"); - String id=""; + public String checkForm(PaymentLogForm form, int i) { + boolean isUp = StringUtil.isNotEmpty(form.getId()) && !form.getId().equals("0"); + String id = ""; String countRecover = ""; - if (isUp){ + if (isUp) { id = form.getId(); } //主表字段验证 - if(StringUtil.isNotEmpty(form.getPayerTotal())){ - if(!Pattern.compile("^([1-9][\\d]*|0)(\\.[\\d]+)?$").matcher(String.valueOf(form.getPayerTotal())).matches()){ - return "请输入正确的金额"; + if (StringUtil.isNotEmpty(form.getPayerTotal())) { + if (!Pattern.compile("^([1-9][\\d]*|0)(\\.[\\d]+)?$").matcher(String.valueOf(form.getPayerTotal())).matches()) { + return "请输入正确的金额"; + } } - } return countRecover; } + /** - * 新增修改数据(事务回滚) - * @param id - * @param paymentLogForm - * @return - */ + * 新增修改数据(事务回滚) + * + * @param id + * @param paymentLogForm + * @return + */ @Override @Transactional - public void saveOrUpdate(PaymentLogForm paymentLogForm,String id, boolean isSave) throws Exception{ - UserInfo userInfo=userProvider.get(); + public void saveOrUpdate(PaymentLogForm paymentLogForm, String id, boolean isSave) throws Exception { + UserInfo userInfo = userProvider.get(); UserEntity userEntity = generaterSwapUtil.getUser(userInfo.getUserId()); paymentLogForm = JsonUtil.getJsonToBean( - generaterSwapUtil.swapDatetime(PaymentLogConstant.getFormData(),paymentLogForm),PaymentLogForm.class); + generaterSwapUtil.swapDatetime(PaymentLogConstant.getFormData(), paymentLogForm), PaymentLogForm.class); PaymentLogEntity entity = JsonUtil.getJsonToBean(paymentLogForm, PaymentLogEntity.class); - if(isSave){ - String mainId = RandomUtil.uuId() ; + if (isSave) { + String mainId = RandomUtil.uuId(); entity.setId(mainId); - }else{ + entity.setCreatorTime(DateUtil.getNowDate()); + entity.setCreatorUserId(userInfo.getUserId()); + entity.setOrganizeJsonId(userEntity.getOrganizeId()); + } else { + entity.setLastModifyTime(DateUtil.getNowDate()); + entity.setLastModifyUserId(userInfo.getUserId()); } this.saveOrUpdate(entity); + } + + @Override + public String processQuery(String body) { + // 查询订单日志状态 + JSONObject jsonObject = JSONUtil.parseObj(body); + String outTradeNo = jsonObject.getStr("out_trade_no");// 商户系统内部订单号 + String transactionId = jsonObject.getStr("transaction_id");//微信支付系统生成的订单号。 + String tradeType = jsonObject.getStr("trade_type");//交易类型 + String tradeState = jsonObject.getStr("trade_state");// 交易状态 + String tradeStateDesc = jsonObject.getStr("trade_state_desc");//交易状态描述 + String successTime = jsonObject.getStr("success_time");//支付完成时间 + String attach = jsonObject.getStr("attach");//此字段是商户id + JSONObject payer = jsonObject.getJSONObject("payer"); + String openid = payer.getStr("openid");//用户标识 + JSONObject amount = jsonObject.getJSONObject("amount"); + Integer total = amount.getInt("total");// 订单总金额 + Integer payerTotal = amount.getInt("payer_total");//用户支付金额,单位为分 + + // 查询订单日志 + QueryWrapper query = new QueryWrapper<>(); + query.lambda() + .eq(PaymentLogEntity::getOrderNo, outTradeNo) + .eq(PaymentLogEntity::getTradeType, tradeType) + .isNull(PaymentLogEntity::getDeleteMark); + PaymentLogEntity entity = this.getOne(query); + UserInfo userInfo = userProvider.get(); + UserEntity userEntity = generaterSwapUtil.getUser(userInfo.getUserId()); + + // 没有日志记录 先记录 + if (null == entity) { + PaymentLogEntity log = new PaymentLogEntity(); + log.setId(RandomUtil.uuId()); + log.setTransactionId(transactionId); + log.setPaymentType("WXPAY"); + log.setTradeType(tradeType); + log.setTradeState(tradeState); + log.setOpenId(openid); + log.setTotal(total); + log.setPayerTotal(payerTotal); + log.setContent(body); + log.setCompanyId(attach); + log.setCreatorTime(DateUtil.getNowDate()); + log.setCreatorUserId(userInfo.getUserId()); + log.setOrganizeJsonId(userEntity.getOrganizeId()); + this.save(log); + // 状态不一致 + } else if (!tradeState.equals(entity.getTradeState())) { + entity.setTradeState(tradeState); + entity.setLastModifyTime(DateUtil.getNowDate()); + this.updateById(entity); + } + return tradeState; + } + + // 更新微信日志状态 + @Override + public boolean updateStats(String orderNo, String status) { + UpdateWrapper wrapper = new UpdateWrapper<>(); + wrapper.lambda().set(PaymentLogEntity::getTradeState, status) + .set(PaymentLogEntity::getLastModifyTime, DateUtil.getNowDate()) + .eq(PaymentLogEntity::getOrderNo, orderNo); + boolean update = this.update(wrapper); + return update; } } diff --git a/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/impl/PaymentServiceImpl.java b/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/impl/PaymentServiceImpl.java index cf314c6..b698c8a 100644 --- a/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/impl/PaymentServiceImpl.java +++ b/jnpf-java-boot/jnpf-scm/jnpf-scm-biz/src/main/java/jnpf/service/impl/PaymentServiceImpl.java @@ -43,6 +43,8 @@ import java.util.*; import jnpf.base.UserInfo; import jnpf.permission.entity.UserEntity; +import javax.annotation.Resource; + /** * 充值记录 * 版本: V3.5 @@ -58,6 +60,10 @@ public class PaymentServiceImpl extends ServiceImpl getList(PaymentPagination paymentPagination) { return getTypeList(paymentPagination, paymentPagination.getDataType()); @@ -420,4 +426,13 @@ public class PaymentServiceImpl extends ServiceImpl wrapper = new QueryWrapper<>(); + wrapper.lambda().eq(PaymentEntity::getOrderNo, orderNo) + .isNull(PaymentEntity::getDeleteMark); + PaymentEntity entity = this.getOne(wrapper); + return entity; + } } diff --git a/jnpf-java-boot/jnpf-scm/jnpf-scm-controller/src/main/java/jnpf/controller/PaymentController.java b/jnpf-java-boot/jnpf-scm/jnpf-scm-controller/src/main/java/jnpf/controller/PaymentController.java index c622abf..47ede97 100644 --- a/jnpf-java-boot/jnpf-scm/jnpf-scm-controller/src/main/java/jnpf/controller/PaymentController.java +++ b/jnpf-java-boot/jnpf-scm/jnpf-scm-controller/src/main/java/jnpf/controller/PaymentController.java @@ -21,10 +21,13 @@ import jnpf.base.vo.PageListVO; import jnpf.base.vo.PaginationVO; import jnpf.config.WxPayProperties; import jnpf.entity.PaymentEntity; +import jnpf.entity.PaymentLogEntity; import jnpf.model.payment.PaymentConstant; import jnpf.model.payment.PaymentForm; import jnpf.model.payment.PaymentPagination; import jnpf.model.paymentlog.PaymentVO; +import jnpf.model.recycleorder.OrderTypeEnum; +import jnpf.service.PaymentLogService; import jnpf.service.PaymentService; import jnpf.util.*; import lombok.extern.slf4j.Slf4j; @@ -55,6 +58,8 @@ public class PaymentController { @Autowired private PaymentService paymentService; + @Resource + private PaymentLogService paymentLogService; @Resource private WxPayProperties wxPayProperties; @@ -223,16 +228,16 @@ public class PaymentController { String id = RandomUtil.uuId(); pay.setId(id); pay.setEnterpriseId(paymentVO.getEnterpriseId()); - pay.setOrderNo(orderNo); - pay.setAmount(paymentVO.getAmount()); - pay.setOrderTypeId("585052745690520133");// - pay.setOrderStatus("NOTPAY"); + pay.setOrderNo(orderNo);// + pay.setAmount(paymentVO.getAmount());//金额 + pay.setOrderTypeId(OrderTypeEnum.CZ_ORDER.getCode());//订单类型 + pay.setOrderStatus("NOTPAY");//未支付 pay.setCreatorTime(DateUtil.getNowDate()); pay.setCreatorUserId(userInfo.getUserId()); pay.setVersion(1); pay.setCompanyId(paymentVO.getEnterpriseId()); pay.setOrganizeJsonId(userInfo.getOrganizeId()); - pay.setRemark("商户资金充值"); + pay.setRemark(""); BigDecimal money = paymentVO.getAmount(); Integer fen = money.multiply(new BigDecimal(100)).setScale(0).intValue(); @@ -244,7 +249,8 @@ public class PaymentController { .setDescription("商户资金充值") .setOut_trade_no(orderNo) .setNotify_url(wxPayProperties.getNotify()) - .setAmount(amount); + .setAmount(amount) + .setAttach(paymentVO.getEnterpriseId());//充值商户编码 // 单品列表信息 Detail detail = new Detail(); @@ -254,11 +260,11 @@ public class PaymentController { model.setDetail(detail); // 场景信息 SceneInfo sceneInfo = new SceneInfo(); - sceneInfo.setDevice_id("DE001");//设备编码 + sceneInfo.setDevice_id("DE0001");//设备编码 sceneInfo.setPayer_client_ip("222.71.165.187");//设备IP // 店铺信息 StoreInfo storeInfo = new StoreInfo(); - storeInfo.setId("123");//店铺id + storeInfo.setId("SP0001");//店铺id sceneInfo.setStore_info(storeInfo); model.setScene_info(sceneInfo); @@ -344,8 +350,17 @@ public class PaymentController { //查询订单(外部订单查询) @PostMapping("/query-order/{outTradeNo}") @Operation(description = "查询订单(外部订单查询") - public String queryOrder(@PathVariable String outTradeNo) { - log.info("查询订单(外部订单查询) outTradeNo:{},transactionId:{}", outTradeNo); + public ActionResult queryOrder(@PathVariable String outTradeNo) { + PaymentEntity payment = paymentService.getByOrderNo(outTradeNo); + //查询失败 + if (null == payment) { + return ActionResult.fail("订单不存在,或查询参数错误!"); + } + //查询订单的状态 + if (null != payment && "SUCCESS".equals(payment.getOrderStatus())) { + return ActionResult.success("查询成功!", payment); + } + log.info("查询订单(外部订单查询) outTradeNo:{}", outTradeNo); String url = String.format(BasePayApiEnum.ORDER_QUERY_BY_OUT_TRADE_NO.getUrl(), outTradeNo); Map params = new HashMap<>(); params.put("mchid", wxPayProperties.getMchId()); @@ -361,16 +376,40 @@ public class PaymentController { ); String body = response.getBody(); log.info("查询订单(外部订单查询) body:{}", body); + // 记录接口调用日志 + String status = paymentLogService.processQuery(body); + // 状态不一致 更新 支付状态 + if (!status.equals(payment.getOrderStatus())) { + payment.setOrderStatus(status); + payment.setLastModifyUserId(userProvider.get().getId()); + payment.setLastModifyTime(DateUtil.getNowDate()); + paymentService.updateById(payment); + } + PaymentEntity entity = paymentService.getByOrderNo(outTradeNo); + return ActionResult.success("查询成功!", entity); } catch (Exception e) { - throw new RuntimeException(e); + log.error("查询订单(外部订单查询) 失败:{}", e.getMessage()); + e.printStackTrace(); + return ActionResult.fail("查询失败!"); } - return null; } //关闭订单 @PostMapping("/cancel-order/{outTradeNo}") @Operation(description = "关闭订单(外部订单号)") public ActionResult cancelOrder(@PathVariable String outTradeNo) { + // 查询订单 + PaymentEntity payment = paymentService.getByOrderNo(outTradeNo); + if (null == payment) { + return ActionResult.fail("订单不存在,或查询参数错误!"); + } else if ("SUCCESS".equals(payment.getOrderStatus())) { + return ActionResult.fail("订单已支付成功,不能关闭"); + } else if ("CLOSE".equals(payment.getOrderStatus())) { + return ActionResult.success("订单已关闭"); + } + + UserInfo userInfo = userProvider.get(); + // 关闭订单 String url = String.format(BasePayApiEnum.CLOSE_ORDER_BY_OUT_TRADE_NO.getUrl(), outTradeNo); try { Map param = new HashMap<>(); @@ -385,6 +424,17 @@ public class PaymentController { JSONUtil.toJsonStr(param) ); int status = response.getStatus(); + if (200 == status || 204 == status) { + // 关闭订单 + payment.setOrderStatus("CLOSE"); + payment.setLastModifyTime(DateUtil.getNowDate()); + payment.setLastModifyUserId(null == userInfo ? "" : userInfo.getId()); + payment.setRemark("订单已关闭!"); + paymentService.updateById(payment); + + // 更新日志 + paymentLogService.updateStats(outTradeNo, "CLOSE"); + } log.info("关闭订单 response:{} , status:{}", response, status); return ActionResult.success("关闭订单成功"); } catch (Exception e) { diff --git a/jnpf-java-boot/jnpf-scm/jnpf-scm-entity/src/main/java/jnpf/entity/PaymentLogEntity.java b/jnpf-java-boot/jnpf-scm/jnpf-scm-entity/src/main/java/jnpf/entity/PaymentLogEntity.java index 8d26aad..79d72a5 100644 --- a/jnpf-java-boot/jnpf-scm/jnpf-scm-entity/src/main/java/jnpf/entity/PaymentLogEntity.java +++ b/jnpf-java-boot/jnpf-scm/jnpf-scm-entity/src/main/java/jnpf/entity/PaymentLogEntity.java @@ -2,10 +2,10 @@ package jnpf.entity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; + import java.util.Date; + /** - * - * * @版本: V3.5 * @版权: 引迈信息技术有限公司(https://www.jnpfsoft.com) * @作者: JNPF开发平台组 @@ -13,30 +13,32 @@ import java.util.Date; */ @Data @TableName("nx_payment_log") -public class PaymentLogEntity { - @TableId(value ="ID" ) +public class PaymentLogEntity { + @TableId(value = "ID") private String id; - @TableField(value = "ORDER_NO" , updateStrategy = FieldStrategy.IGNORED) + @TableField(value = "ORDER_NO", updateStrategy = FieldStrategy.IGNORED) private String orderNo; - @TableField(value = "TRANSACTION_ID" , updateStrategy = FieldStrategy.IGNORED) + @TableField(value = "TRANSACTION_ID", updateStrategy = FieldStrategy.IGNORED) private String transactionId; - @TableField(value = "PAYMENT_TYPE" , updateStrategy = FieldStrategy.IGNORED) + @TableField(value = "PAYMENT_TYPE", updateStrategy = FieldStrategy.IGNORED) private String paymentType; - @TableField(value = "TRADE_TYPE" , updateStrategy = FieldStrategy.IGNORED) + @TableField(value = "TRADE_TYPE", updateStrategy = FieldStrategy.IGNORED) private String tradeType; - @TableField(value = "OPEN_ID" , updateStrategy = FieldStrategy.IGNORED) + @TableField(value = "OPEN_ID", updateStrategy = FieldStrategy.IGNORED) private String openId; - @TableField(value = "TRADE_STATE" , updateStrategy = FieldStrategy.IGNORED) + @TableField(value = "TRADE_STATE", updateStrategy = FieldStrategy.IGNORED) private String tradeState; - @TableField(value = "PAYER_TOTAL" , updateStrategy = FieldStrategy.IGNORED) + @TableField(value = "TOTAL", updateStrategy = FieldStrategy.IGNORED) + private Integer total; + @TableField(value = "PAYER_TOTAL", updateStrategy = FieldStrategy.IGNORED) private Integer payerTotal; - @TableField(value = "CONTENT" , updateStrategy = FieldStrategy.IGNORED) + @TableField(value = "CONTENT", updateStrategy = FieldStrategy.IGNORED) private String content; @TableField("F_FLOW_ID") private String flowId; - @TableField(value = "F_CREATOR_TIME" , updateStrategy = FieldStrategy.IGNORED) + @TableField(value = "F_CREATOR_TIME", updateStrategy = FieldStrategy.IGNORED) private Date creatorTime; - @TableField(value = "F_CREATOR_USER_ID" , updateStrategy = FieldStrategy.IGNORED) + @TableField(value = "F_CREATOR_USER_ID", updateStrategy = FieldStrategy.IGNORED) private String creatorUserId; @TableField("F_LAST_MODIFY_TIME") private Date lastModifyTime; diff --git a/jnpf-java-boot/jnpf-scm/jnpf-scm-entity/src/main/java/jnpf/model/recycleorder/OrderTypeEnum.java b/jnpf-java-boot/jnpf-scm/jnpf-scm-entity/src/main/java/jnpf/model/recycleorder/OrderTypeEnum.java index 845e86f..b87b8f5 100644 --- a/jnpf-java-boot/jnpf-scm/jnpf-scm-entity/src/main/java/jnpf/model/recycleorder/OrderTypeEnum.java +++ b/jnpf-java-boot/jnpf-scm/jnpf-scm-entity/src/main/java/jnpf/model/recycleorder/OrderTypeEnum.java @@ -17,7 +17,9 @@ public enum OrderTypeEnum { DZ_RECOVERY("520193532170867013", "到站回收"), - ADM_ORDER("521999177572425477", "人工下单"); + ADM_ORDER("521999177572425477", "人工下单"), + CZ_ORDER("585052745690520133", "商户充值"), + TD_ORDER("585052836950186565", "投递订单"); @EnumValue private final String code;