查询订单 关闭订单

master
guochaojie 3 months ago
parent cc836a7cd5
commit 678615ea0d

@ -32,4 +32,7 @@ public interface PaymentLogService extends IService<PaymentLogEntity> {
void saveOrUpdate(PaymentLogForm paymentLogForm,String id, boolean isSave) throws Exception;
String processQuery(String body);
boolean updateStats(String orderNo,String status);
}

@ -36,4 +36,5 @@ public interface PaymentService extends IService<PaymentEntity> {
PaymentEntity getUsablePayment(String enterpriseId, BigDecimal amount);
List<PaymentEntity> getTimeoutPayment(String enterpriseId, BigDecimal amount);
PaymentEntity getByOrderNo(String orderNo);
}

@ -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<PaymentLogMapper, PaymentLogEntity> implements PaymentLogService{
public class PaymentLogServiceImpl extends ServiceImpl<PaymentLogMapper, PaymentLogEntity> implements PaymentLogService {
@Autowired
private GeneraterSwapUtil generaterSwapUtil;
@ -47,255 +65,336 @@ public class PaymentLogServiceImpl extends ServiceImpl<PaymentLogMapper, Payment
private UserProvider userProvider;
@Override
public List<PaymentLogEntity> getList(PaymentLogPagination paymentLogPagination){
return getTypeList(paymentLogPagination,paymentLogPagination.getDataType());
public List<PaymentLogEntity> getList(PaymentLogPagination paymentLogPagination) {
return getTypeList(paymentLogPagination, paymentLogPagination.getDataType());
}
/** 列表查询 */
/**
*
*/
@Override
public List<PaymentLogEntity> getTypeList(PaymentLogPagination paymentLogPagination,String dataType){
String userId=userProvider.get().getUserId();
List<String> AllIdList =new ArrayList();
List<List<String>> intersectionList =new ArrayList<>();
public List<PaymentLogEntity> getTypeList(PaymentLogPagination paymentLogPagination, String dataType) {
String userId = userProvider.get().getUserId();
List<String> AllIdList = new ArrayList();
List<List<String>> 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<PaymentLogEntity> paymentLogQueryWrapper=new QueryWrapper<>();
int total = 0;
int paymentLogNum = 0;
QueryWrapper<PaymentLogEntity> paymentLogQueryWrapper = new QueryWrapper<>();
List<String> allSuperIDlist = new ArrayList<>();
String superOp ="";
if (ObjectUtil.isNotEmpty(paymentLogPagination.getSuperQueryJson())){
String superOp = "";
if (ObjectUtil.isNotEmpty(paymentLogPagination.getSuperQueryJson())) {
List<String> allSuperList = new ArrayList<>();
List<List<String>> intersectionSuperList = new ArrayList<>();
List<List<String>> intersectionSuperList = new ArrayList<>();
String queryJson = paymentLogPagination.getSuperQueryJson();
SuperJsonModel superJsonModel = JsonUtil.getJsonToBean(queryJson, SuperJsonModel.class);
int superNum = 0;
QueryWrapper<PaymentLogEntity> 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<String> paymentLogList =this.list(paymentLogSuperWrapper).stream().map(PaymentLogEntity::getId).collect(Collectors.toList());
if (paymentLogNum1 > 0) {
List<String> 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<String> allRuleIDlist = new ArrayList<>();
String ruleOp ="";
if (ObjectUtil.isNotEmpty(ruleJson)){
String ruleOp = "";
if (ObjectUtil.isNotEmpty(ruleJson)) {
List<String> allRuleList = new ArrayList<>();
List<List<String>> intersectionRuleList = new ArrayList<>();
List<List<String>> intersectionRuleList = new ArrayList<>();
SuperJsonModel ruleJsonModel = JsonUtil.getJsonToBean(ruleJson, SuperJsonModel.class);
int ruleNum = 0;
QueryWrapper<PaymentLogEntity> 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<String> paymentLogList =this.list(paymentLogSuperWrapper).stream().map(PaymentLogEntity::getId).collect(Collectors.toList());
if (paymentLogNum1 > 0) {
List<String> 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<PaymentLogEntity>)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<PaymentLogEntity>)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<PaymentLogEntity>) 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<PaymentLogEntity>) 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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<PaymentLogEntity> page=new Page<>(paymentLogPagination.getCurrentPage(), paymentLogPagination.getPageSize());
IPage<PaymentLogEntity> 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<PaymentLogEntity> page = new Page<>(paymentLogPagination.getCurrentPage(), paymentLogPagination.getPageSize());
IPage<PaymentLogEntity> userIPage = this.page(page, paymentLogQueryWrapper);
return paymentLogPagination.setData(userIPage.getRecords(), userIPage.getTotal());
} else {
List<PaymentLogEntity> list = new ArrayList();
return paymentLogPagination.setData(list, list.size());
}
}else{
} else {
return this.list(paymentLogQueryWrapper);
}
}
@Override
public PaymentLogEntity getInfo(String id){
QueryWrapper<PaymentLogEntity> queryWrapper=new QueryWrapper<>();
queryWrapper.lambda().eq(PaymentLogEntity::getId,id);
public PaymentLogEntity getInfo(String id) {
QueryWrapper<PaymentLogEntity> 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<PaymentLogEntity> 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<PaymentLogEntity> 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;
}
}

@ -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<PaymentMapper, PaymentEntity
@Autowired
private UserProvider userProvider;
@Resource
private PaymentMapper paymentMapper;
@Override
public List<PaymentEntity> getList(PaymentPagination paymentPagination) {
return getTypeList(paymentPagination, paymentPagination.getDataType());
@ -420,4 +426,13 @@ public class PaymentServiceImpl extends ServiceImpl<PaymentMapper, PaymentEntity
return this.list(wrapper);
}
@Override
public PaymentEntity getByOrderNo(String orderNo) {
QueryWrapper<PaymentEntity> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(PaymentEntity::getOrderNo, orderNo)
.isNull(PaymentEntity::getDeleteMark);
PaymentEntity entity = this.getOne(wrapper);
return entity;
}
}

@ -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<String, String> 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<String, String> 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) {

@ -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;

@ -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;

Loading…
Cancel
Save