jiangping
2023-12-20 13ac9c42bb22b980567313a9dff51d4a8d639bbc
服务商
已修改15个文件
352 ■■■■ 文件已修改
server/README.md 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/task/ScheduleTool.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/core/wx/WxMiniUtilService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/dao/business/web/response/HomeResponse.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/GoodsorderService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/RefundService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java 224 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/RefundServiceImpl.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/resources/application-dev.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/resources/application-pro.yml 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/resources/application-test.yml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/java/com/doumee/api/web/PaymentCallback.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/README.md
@@ -1,25 +1,18 @@
一、打包注意事项:
1、打包pro环境,开启ScheduleTool定时器任务,命名:tielangtou.jar
2、打包proTwo环境,关闭ScheduleTool定时器任务,命名:tielangtou12.jar
3、打包proThree环境,关闭ScheduleTool定时器任务,命名:tielangtou13.jar
1、打包服务端接口pro环境,命名:bike_admin_api.jar
3、打包客户端接口pro环境,命名:bike_h5_api.jar
二、启动命令:
1、查看当前运行进程,ps -ef | grep java
2、关闭三个java进程,kill -9 xxxx
3、jar存放目录 /usr/local/static_resources
3、jar存放目录 /usr/local/parks
4、启动命令:
nohup java -Xms3g -Xmx3g -Xmn3g -XX:MetaspaceSize=1536m -XX:MaxMetaspaceSize=1536m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=80 -jar /usr/local/static_resources/tielangtou.jar >/usr/local/static_resources/log.log 2>/usr/local/static_resources/err.log &
nohup java -Xms3g -Xmx3g -Xmn3g -XX:MetaspaceSize=1536m -XX:MaxMetaspaceSize=1536m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=80 -jar /usr/local/static_resources/tielangtou12.jar >/usr/local/static_resources/log12.log 2>/usr/local/static_resources/err12.log &
nohup java -Xms3g -Xmx3g -Xmn3g -XX:MetaspaceSize=1536m -XX:MaxMetaspaceSize=1536m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=80 -jar /usr/local/static_resources/tielangtou13.jar >/usr/local/static_resources/log13.log 2>/usr/local/static_resources/err13.log &
nohup java -Xms2g -Xmx2g -Xmn2g -XX:MetaspaceSize=1536m -XX:MaxMetaspaceSize=1536m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=80 -jar /usr/local/static_resources/tielangtou14.jar >/usr/local/static_resources/log14.log 2>/usr/local/static_resources/err14.log &
nohup java -Xms2g -Xmx2g -Xmn2g -XX:MetaspaceSize=1536m -XX:MaxMetaspaceSize=1536m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=80 -jar /usr/local/static_resources/tielangtou15.jar >/usr/local/static_resources/log15.log 2>/usr/local/static_resources/err15.log &
nohup java -Xms2g -Xmx2g -Xmn2g -XX:MetaspaceSize=1536m -XX:MaxMetaspaceSize=1536m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=80 -jar /usr/local/static_resources/tielangtou16.jar >/usr/local/static_resources/log16.log 2>/usr/local/static_resources/err16.log &
nohup java -Xms3g -Xmx3g -Xmn3g -XX:MetaspaceSize=1536m -XX:MaxMetaspaceSize=1536m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=80 -jar /usr/local/parks/bike_admin_api.jar >/usr/local/parks/log.log 2>/usr/local/parks/err.log &
nohup java -Xms3g -Xmx3g -Xmn3g -XX:MetaspaceSize=1536m -XX:MaxMetaspaceSize=1536m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=80 -jar /usr/local/parks/bike_h5_api.jar >/usr/local/parks/log.log 2>/usr/local/parks/err.log &
5、再次查看当前运行进程,ps -ef | grep java,三个进程是否正常
三、日志查看命令:
tail -f /usr/local/static_resources/log.log
tail -f /usr/local/static_resources/log12.log
tail -f /usr/local/static_resources/log13.log
tail -f /usr/local/parks/log.log
tail -f /usr/local/parks/error.log
server/platform/src/main/java/com/doumee/task/ScheduleTool.java
@@ -70,12 +70,11 @@
     * 測試
     * @throws Exception
     */
    @Scheduled(cron = "0 0 21 * * ? ")
    @Scheduled(cron = "0 30 13 * * ? ")
    public void getYesterdayBill() throws Exception {
        log.info("=====================开始每天自动结算=======================");
        goodsorderService.autoCloseOrder();
        log.info("=====================结束每天自动结算=======================");
    }
    /**
@@ -117,7 +116,7 @@
        String appSecret = wxPayProperties.getAppSecret();
        if(wxPayProperties.getExistsSub() ==1){
            //如果是服务商支付,取子商户信息
             appId = StringUtils.trimToNull(wxPayProperties.getSubMchId());
             appId = StringUtils.trimToNull(wxPayProperties.getSubAppId());
            appSecret =StringUtils.trimToNull(wxPayProperties.getSubAppSecret());
        }
        //生成微信token
@@ -137,7 +136,7 @@
    @Scheduled(fixedDelay = 1000L * 60L )
    public void autoCancelRefunOrder(){
        log.info("=====================开始 自動取消未推送退款状态的退款单状态=======================");
        refundService.autoCancelRefunOrder();;
        goodsorderService.autoCancelRefunOrder();;
        log.info("=====================结束 自動取消未推送退款状态的退款单状态=======================");
    }
server/platform/src/main/resources/application.yml
@@ -9,7 +9,7 @@
#  application:
#    name: parkbike
  profiles:
    active: test
    active: pro
  # JSON返回配置
  jackson:
    # 默认时区
server/services/src/main/java/com/doumee/core/wx/WxMiniUtilService.java
@@ -16,6 +16,7 @@
import com.doumee.dao.system.model.SystemDictData;
import com.wechat.pay.java.service.refund.model.AmountReq;
import com.wechat.pay.java.service.refund.model.CreateRequest;
import com.wechat.pay.java.service.refund.model.QueryByOutRefundNoRequest;
import lombok.extern.slf4j.Slf4j;
import okhttp3.OkHttpClient;
import okhttp3.Request;
@@ -82,7 +83,9 @@
        amountReq.setCurrency("CNY");
        request.setAmount(amountReq);
        try {
            log.error("=============="+JSONObject.toJSONString(request));
            com.wechat.pay.java.service.refund.model.Refund response = WxMiniConfig.refundService.create(request);
            log.error("=============="+JSONObject.toJSONString(response));
            if ("SUCCESS".equals(response.getStatus().name())
                    || "PROCESSING".equals(response.getStatus().name()) ) {
                return  true;
@@ -95,6 +98,27 @@
        }
    }
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public com.wechat.pay.java.service.refund.model.Refund isSuucessRefund(String outTradeNo) {
        // 发送退款请求
        QueryByOutRefundNoRequest request = new QueryByOutRefundNoRequest();
        request.setOutRefundNo(outTradeNo);
        request.setSubMchid(WxMiniConfig.wxProperties.getSubMchId());
        try {
            log.error("=============="+JSONObject.toJSONString(request));
            com.wechat.pay.java.service.refund.model.Refund response = WxMiniConfig.refundService.queryByOutRefundNo(request);
            log.error("=============="+JSONObject.toJSONString(response));
            if ("SUCCESS".equals(response.getStatus().name())
                    || "PROCESSING".equals(response.getStatus().name()) ) {
                return  response;
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return  null;
    }
    public Refund wxRefundOld(RefundDTO refundDTO) {
        // 发送退款请求
        String refNum = ID.nextGUID();
server/services/src/main/java/com/doumee/dao/business/web/response/HomeResponse.java
@@ -38,7 +38,7 @@
    private String leaseNotice;
    @ApiModelProperty(value = "押金状态:0=未支付押金;1=已支付押金;")
    @ApiModelProperty(value = "押金状态:0=未支付押金;1=已支付押金; 2=退款中")
    private Integer depositStatus = 0;
    @ApiModelProperty(value = "订单主键")
server/services/src/main/java/com/doumee/service/business/GoodsorderService.java
@@ -188,4 +188,6 @@
    void goodsOrderSettlement(String memberId);
    void autoCloseOrder();
    void autoCancelRefunOrder();
}
server/services/src/main/java/com/doumee/service/business/RefundService.java
@@ -102,5 +102,4 @@
    List<RefundPlatExportVO>  findPlatExportPage(  Refund pageWrap);
    void autoCancelRefunOrder();
}
server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -45,6 +45,7 @@
import com.wechat.pay.java.service.partnerpayments.jsapi.JsapiServiceExtension;
import com.wechat.pay.java.service.partnerpayments.jsapi.model.*;
import com.wechat.pay.java.service.refund.model.RefundNotification;
import com.wechat.pay.java.service.refund.model.Status;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
@@ -373,41 +374,55 @@
                .eq("member_id",memberId)
                .eq("status",Constants.goodsorderStatus.pay)
                .last(" limit 1 "));
        if(!Objects.isNull(goodsorder)&&goodsorder.getStatus().equals(Constants.goodsorderStatus.pay)){
            homeResponse.setDepositStatus(Constants.goodsorderStatus.pay);
            homeResponse.setGoodsOrderId(goodsorder.getId());
            //查询当前骑行状态
            MemberRides memberRides = memberRidesJoinMapper.selectOne(new QueryWrapper<MemberRides>().lambda()
                    .eq(MemberRides::getMemberId, memberId)
                    .eq(MemberRides::getOrdreId,goodsorder.getId())
                    .ne(MemberRides::getStatus,Constants.MEMBER_RIDES_STATUS.LOCKING_DEFEAT.getKey())
                    .orderByDesc(MemberRides::getCreateDate)
                    .last(" limit 1  "));
            if (!Objects.isNull(memberRides)) {
                homeResponse.setRideStatus(memberRides.getStatus());
                MemberRidesResponse memberRidesResponse = new MemberRidesResponse();
                BaseParam baseParam = baseParamMapper.selectById(memberRides.getParamId());
                if(!Objects.isNull(baseParam)){
                    memberRidesResponse.setBikeType(baseParam.getName());
        homeResponse.setDepositStatus(Constants.ZERO);
        if(goodsorder!=null){
            Refund r =  this.refundMapper.selectOne(new QueryWrapper<Refund>().lambda()
                    .eq(Refund::getObjId,goodsorder.getId())
                    .eq(Refund::getIsdeleted,Constants.ZERO)
                    .eq(Refund::getStatus,Constants.ZERO)
                    .last("limit 1" ));
            if(r!=null){
                homeResponse.setDepositStatus(Constants.TWO);
            }else{
                homeResponse.setDepositStatus(Constants.ONE);
            }
            if( goodsorder.getStatus().equals(Constants.goodsorderStatus.pay)){
                homeResponse.setGoodsOrderId(goodsorder.getId());
                //查询当前骑行状态
                MemberRides memberRides = memberRidesJoinMapper.selectOne(new QueryWrapper<MemberRides>().lambda()
                        .eq(MemberRides::getMemberId, memberId)
                        .eq(MemberRides::getOrdreId,goodsorder.getId())
                        .ne(MemberRides::getStatus,Constants.MEMBER_RIDES_STATUS.LOCKING_DEFEAT.getKey())
                        .orderByDesc(MemberRides::getCreateDate)
                        .last(" limit 1  "));
                if (!Objects.isNull(memberRides)) {
                    homeResponse.setRideStatus(memberRides.getStatus());
                    MemberRidesResponse memberRidesResponse = new MemberRidesResponse();
                    BaseParam baseParam = baseParamMapper.selectById(memberRides.getParamId());
                    if(!Objects.isNull(baseParam)){
                        memberRidesResponse.setBikeType(baseParam.getName());
                    }
                    memberRidesResponse.setRideId(memberRides.getId());
                    memberRidesResponse.setRideStartTime(memberRides.getRentDate());
                    memberRidesResponse.setRideStartTimeStr(DateUtil.DateToStr(memberRides.getRentDate(),"HH:mm"));
                    memberRidesResponse.setRideEndTime(memberRides.getBackDate());
                    memberRidesResponse.setRideEndTimeStr(DateUtil.DateToStr(memberRides.getBackDate(),"HH:mm"));
                    memberRidesResponse.setRideTime(DateUtil.betweenMin(memberRides.getRentDate(),memberRides.getBackDate()));
                    memberRidesResponse.setBikeCode(memberRides.getBikeCode());
                    memberRidesResponse.setBasePrice(memberRides.getBasePrice());
                    memberRidesResponse.setBaseTime(memberRides.getBaseTime());
                    memberRidesResponse.setUnitTime(memberRides.getUnitTime());
                    memberRidesResponse.setUnitPrice(memberRides.getUnitPrice());
                    memberRidesResponse.setPriceRole(PricingDetailServiceImpl.getRoleNameByParam(
                            memberRidesResponse.getBasePrice(),memberRidesResponse.getBaseTime(),
                            memberRidesResponse.getUnitPrice()
                            ,memberRidesResponse.getUnitTime()));
                    homeResponse.setMemberRidesResponse(memberRidesResponse);
                }
                memberRidesResponse.setRideId(memberRides.getId());
                memberRidesResponse.setRideStartTime(memberRides.getRentDate());
                memberRidesResponse.setRideStartTimeStr(DateUtil.DateToStr(memberRides.getRentDate(),"HH:mm"));
                memberRidesResponse.setRideEndTime(memberRides.getBackDate());
                memberRidesResponse.setRideEndTimeStr(DateUtil.DateToStr(memberRides.getBackDate(),"HH:mm"));
                memberRidesResponse.setRideTime(DateUtil.betweenMin(memberRides.getRentDate(),memberRides.getBackDate()));
                memberRidesResponse.setBikeCode(memberRides.getBikeCode());
                memberRidesResponse.setBasePrice(memberRides.getBasePrice());
                memberRidesResponse.setBaseTime(memberRides.getBaseTime());
                memberRidesResponse.setUnitTime(memberRides.getUnitTime());
                memberRidesResponse.setUnitPrice(memberRides.getUnitPrice());
                memberRidesResponse.setPriceRole(PricingDetailServiceImpl.getRoleNameByParam(
                        memberRidesResponse.getBasePrice(),memberRidesResponse.getBaseTime(),
                        memberRidesResponse.getUnitPrice()
                        ,memberRidesResponse.getUnitTime()));
                homeResponse.setMemberRidesResponse(memberRidesResponse);
            }
        }
        return homeResponse;
    }
@@ -504,18 +519,88 @@
            memberRides.get(0).setActualPrice(closeMoney);
        }
        int refundMoney =( Constants.formatDecimalNum(goodsorder.getMoney()).subtract(closeMoney)).intValue();//计算价格
        RefundDTO refundDTO = new RefundDTO();
        refundDTO.setOrderId(goodsorder.getId());
        refundDTO.setCanBalance(goodsorder.getMoney());
        refundDTO.setRefundAmount(new BigDecimal(refundMoney));
        refundDTO.setTotalAmount(goodsorder.getMoney());
        refundDTO.setMemberId(goodsorder.getMemberId());
        refundDTO.setReason(Constants.REFUND_TYPE.get(type).getName());
        refundDTO.setCreator(goodsorder.getEditor());
        refundDTO.setType(type);
        wxMiniUtilService.wxRefund(refundDTO);
        if(refundMoney>0){
            RefundDTO refundDTO = new RefundDTO();
            refundDTO.setOrderId(goodsorder.getId());
            refundDTO.setCanBalance(goodsorder.getMoney());
            refundDTO.setRefundAmount(new BigDecimal(refundMoney));
            refundDTO.setTotalAmount(goodsorder.getMoney());
            refundDTO.setMemberId(goodsorder.getMemberId());
            refundDTO.setReason(Constants.REFUND_TYPE.get(type).getName());
            refundDTO.setCreator(goodsorder.getEditor());
            refundDTO.setType(type);
            boolean res =  wxMiniUtilService.wxRefund(refundDTO);
        }else{
            //无退款结算
            closeGoodsorderDoneNoRefund(goodsorder,type,new BigDecimal(0),null);
        }
    }
    public void closeGoodsorderDoneNoRefund(Goodsorder goodsorder,int type,BigDecimal refundMoney,String closeId) {
        log.error("========================================"+JSONObject.toJSONString(goodsorder));
        if(goodsorder ==null || Constants.formatIntegerNum(goodsorder.getStatus()) != Constants.GOODSORDER_STATUS.HAVING_PAY.getKey()){
            return;
        }
        BigDecimal closeMoney =( Constants.formatDecimalNum(goodsorder.getMoney()).subtract(refundMoney));
        //进行订单结算业务处理
        List<MemberRides> memberRides = getMemberRidesForClose(goodsorder.getId());
        //默认结算为押金金额
        if (!CollectionUtils.isEmpty(memberRides)){
            //骑行总时长
            for(MemberRides model :memberRides){
                MemberRides up = new MemberRides();
                up.setId(model.getId());
                up.setActualPrice(model.getActualPrice());
                up.setCloseDate(goodsorder.getEditDate());
                up.setCloseStatus(Constants.ONE);
                up.setEditor(goodsorder.getEditor());
                up.setEditDate(goodsorder.getEditDate());
                //更新骑行记录的计算金额和状态
                memberRidesJoinMapper.updateById(up);
            }
        }
//        BigDecimal closeMoney =( Constants.formatDecimalNum(goodsorder.getMoney()).subtract(refund.getMoney()));
        //退款乐行
//        int type =Constants.formatIntegerNum(refund.getType());
        Goodsorder update = new Goodsorder();
        update.setId(goodsorder.getId());
        update.setStatus(Constants.GOODSORDER_STATUS.CLOSE.getKey());
        update.setCloseMoney(closeMoney);
        update.setCloseStatus(Constants.ONE);
        update.setCloseDate(new Date());
        update.setCloseInfo(Constants.REFUND_TYPE.get(type).getInfo());
        update.setCloseUserId(goodsorder.getEditor());
        if(Constants.REFUND_TYPE.PLAT_FORCE.getKey() == type){
            //如果是强制结算
            update.setCloseType(Constants.ONE);
//            LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
//            update.setEditor(principal.getId());
        }else  if(Constants.REFUND_TYPE.NORMAL.getKey() == type){
            //如果是自行結算
            update.setCloseType(Constants.ZERO);
        }else{
            //如果是平台自动结算
            update.setCloseType(Constants.TWO);
        }
        update.setCloseId(closeId);
        //存储 消费交易流水
        Transactions transactions = new Transactions();
        transactions.setId(Constants.getUUID());
        transactions.setMemberId(goodsorder.getMemberId());
        transactions.setCreateDate(new Date());
        transactions.setIsdeleted(Constants.ZERO);
        transactions.setOrderId(goodsorder.getId());
        transactions.setMoney(closeMoney);
        transactions.setType(Constants.TRANSACTIONS_TYPE.CONSUMPTION.getKey());
        transactions.setDoneDate(new Date());
        transactions.setTitle(Constants.TRANSACTIONS_TYPE.CONSUMPTION.getName());
        transactions.setContent(Constants.TRANSACTIONS_TYPE.CONSUMPTION.getInfo());
        transactions.setBalance(BigDecimal.ZERO);
        transactions.setObjId(goodsorder.getId());
        transactions.setObjType(Constants.ONE);
        transactionsMapper.insert(transactions);
        //修改订单信息
        goodsorderMapper.updateById(update);
    }
    /**
     * 退款成功回调
     */
@@ -541,9 +626,12 @@
        }
        refund.setOnlineOrderid(param.getTransactionId());
        doRefundTransactions(refund);
        //退款乐行
        int type =Constants.formatIntegerNum(refund.getType());
        Goodsorder goodsorder = goodsorderMapper.selectById(refund.getObjId());
        if(goodsorder ==null || Constants.formatIntegerNum(goodsorder.getCloseStatus()) != Constants.ZERO){
        closeGoodsorderDoneNoRefund(goodsorder,refund.getType(),refund.getMoney(),refund.getId());
       /* log.error("========================================"+JSONObject.toJSONString(goodsorder));
        if(goodsorder ==null || Constants.formatIntegerNum(goodsorder.getStatus()) != Constants.GOODSORDER_STATUS.HAVING_PAY.getKey()){
            return;
        }
        //进行订单结算业务处理
@@ -563,21 +651,20 @@
                memberRidesJoinMapper.updateById(up);
            }
        }
        BigDecimal closeMoney =( Constants.formatDecimalNum(goodsorder.getMoney()).subtract(refund.getMoney()));
        //退款乐行
        int type =Constants.formatIntegerNum(refund.getType());
        Goodsorder update = new Goodsorder();
        update.setId(goodsorder.getId());
        update.setStatus(Constants.GOODSORDER_STATUS.CLOSE.getKey());
        update.setCloseMoney(closeMoney);
        update.setCloseStatus(Constants.ONE);
        update.setCloseDate(new Date());
        update.setCloseInfo(Constants.REFUND_TYPE.get(refund.getType()).getInfo());
        update.setCloseUserId(goodsorder.getEditor());
        if(Constants.REFUND_TYPE.PLAT_FORCE.getKey() == type){
            //如果是强制结算
            update.setCloseType(Constants.ONE);
            LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
            update.setEditor(principal.getId());
//            LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
//            update.setEditor(principal.getId());
        }else  if(Constants.REFUND_TYPE.NORMAL.getKey() == type){
            //如果是自行結算
            update.setCloseType(Constants.ZERO);
@@ -603,7 +690,7 @@
        transactions.setObjType(Constants.ONE);
        transactionsMapper.insert(transactions);
        //修改订单信息
        goodsorderMapper.updateById(update);
        goodsorderMapper.updateById(update);*/
    }
    private void doRefundTransactions(Refund refund ) {
@@ -999,10 +1086,43 @@
    }
    @Override
    public void autoCancelRefunOrder(){
        Date date = new Date(System.currentTimeMillis()-5*60L*1000L);
        List<Refund> list = refundMapper.selectList(new QueryWrapper<Refund>().lambda()
                .eq(Refund::getStatus,Constants.ZERO)
                .lt(Refund::getCreateDate,date));
        if(list !=null && list.size()>0){
            List<String> cancelIds = new ArrayList<>();
            for(Refund r:list){
                com.wechat.pay.java.service.refund.model.Refund res  =wxMiniUtilService.isSuucessRefund(r.getId());
                if(res !=null){
                    //如果退款成功
                    RefundNotification param = new RefundNotification();
                    param.setRefundStatus(Status.SUCCESS);
                    param.setOutRefundNo(r.getId());
                    param.setTransactionId(res.getTransactionId());
                    //执行关闭订单业务
                    closeGoodsorderDone(param);
                }else{
                    //放入取消集合中
                    cancelIds.add(r.getId());
                }
            }
            if(cancelIds.size()>0){
                refundMapper.update(null, new UpdateWrapper<Refund>().lambda()
                        .in(Refund::getId,cancelIds)
                        .set(Refund::getStatus,Constants.ONE)
                        .set(Refund::getEditDate,new Date())
                        .set(Refund::getInfo,"超时未回调,自动取消")
                );
            }
        }
    }
    @Override
    public void autoCloseOrder( ) {
        Goodsorder goodsorder = new Goodsorder();
         Goodsorder goodsorder = new Goodsorder();
        goodsorder.setIsdeleted(Constants.ZERO);
        goodsorder.setStatus(Constants.goodsorderStatus.pay);
        List<Goodsorder> list = findList(goodsorder);
server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -2,6 +2,7 @@
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -25,6 +26,7 @@
import com.doumee.dao.business.web.response.HomeResponse;
import com.doumee.dao.business.web.response.UserResponse;
import com.doumee.service.business.MemberService;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
@@ -46,6 +48,7 @@
 * @date 2023/09/27 18:06
 */
@Service
@Slf4j
public class MemberServiceImpl implements MemberService {
    @Autowired
@@ -57,6 +60,7 @@
        memberMapper.insert(member);
        return member.getId();
    }
    @Override
    public String createManageMember(Member member) {
@@ -315,9 +319,11 @@
     */
    @Override
    public AccountResponse wxLogin(String code) {
        log.error("================================"+code+ JSONObject.toJSONString( WxMiniConfig.wxMaService.getWxMaConfig()));
        try {
            //获取微信敏感数据
            WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code);
            log.error("================================"+ JSONObject.toJSONString(session));
            String openId = session.getOpenid();
            String unionId = session.getUnionid();
            if (StringUtils.isBlank(openId)) {
@@ -349,6 +355,7 @@
            accountResponse.setUserResponse(userResponse);
            return accountResponse;
        } catch (WxErrorException e) {
            log.error(e.getMessage());
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "微信登录异常!请联系管理员");
        }
    }
server/services/src/main/java/com/doumee/service/business/impl/RefundServiceImpl.java
@@ -4,6 +4,7 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Utils;
import com.doumee.core.wx.WxMiniUtilService;
import com.doumee.dao.business.RefundMapper;
import com.doumee.dao.business.TransactionsMapper;
import com.doumee.dao.business.join.RefundJoinMapper;
@@ -18,6 +19,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.wechat.pay.java.service.refund.model.RefundNotification;
import io.swagger.models.auth.In;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -44,6 +46,7 @@
    private RefundJoinMapper refundJoinMapper;
    @Autowired
    private TransactionsMapper transactionsMapper;
    @Override
    public String create(Refund refund) {
@@ -123,17 +126,7 @@
        }
        return PageData.from(refundIPage);
    }
    @Override
    public void autoCancelRefunOrder(){
        Date date = new Date(System.currentTimeMillis()-5*60L*1000L);
        refundMapper.update(null, new UpdateWrapper<Refund>().lambda()
                    .eq(Refund::getStatus,Constants.ZERO)
                    .lt(Refund::getCreateDate,date)
                            .set(Refund::getStatus,Constants.ONE)
                            .set(Refund::getEditDate,new Date())
                            .set(Refund::getInfo,"超时未回调,自动取消")
                    );
    }
    @Override
    public List<RefundPlatExportVO>  findPlatExportPage( Refund pageWrap) {
        pageWrap.setTypeList(new ArrayList<>());
server/services/src/main/resources/application-dev.yml
@@ -43,6 +43,7 @@
########################微信支付相关配置########################
wx:
  pay:
    #服务商---------start-------
    appId: wx48fd8faa35cc8277
    mchId: 1661770902
    apiV3Key: iF3kC8pL8dZ9iU3hN5fX9zI6eF4xQ6fT
@@ -53,12 +54,15 @@
    keyPath: D://apiclient_cert.p12
    privateCertPath: D://apiclient_cert.pem
    privateKeyPath: D://apiclient_key.pem
    #服务商-------------end---
    existsSub: 1
    appSecret: 1ceb7c9dff3c4330d653adc3ca55ea24
    #子商户------------start----
    subAppId: wxcd2b89fd2ff065f8
    subAppSecret: 49c4a52f9ad87ba98307972664fe33b3
    subAppSecret: 3336812504c830b1c3c5243f9ece407a
    subMchId: 1661772003
    subMchKey: EVM8E15TKXE0OEMJFC0V6UFVIOZ5CSQS
    #子商户------------end----
    #      mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
    typeId: gybike
########################mqtt相关配置########################
server/services/src/main/resources/application-pro.yml
@@ -1,6 +1,3 @@
# WEB服务器配置
server:
  port: 10012
spring:
  # 数据源配置
@@ -42,16 +39,32 @@
  # 禁用swagger时的重定向地址
  redirect-uri: /
########################微信支付相关配置########################
wx:
  pay:
    appId: wxcd2b89fd2ff065f8
    #服务商---------start-------
    appId: wx48fd8faa35cc8277
    mchId: 1661770902
    apiV3Key: iF3kC8pL8dZ9iU3hN5fX9zI6eF4xQ6fT
    serialNumer: 368B835A194384FD583B83B77977B84127D2F655
    notifyUrl: https://bikes.yxbhlt.cn/bike_h5_api/wxPayNotify
    refundNotifyUrl: https://bikes.yxbhlt.cn/bike_h5_api/wxRefundNotify
    #    notifyUrl: https://dmtest.ahapp.net/bike_h5_api/api/wxPayNotify
    keyPath: /usr/local/parks/cert/apiclient_cert.p12
    privateCertPath: /usr/local/parks/cert/apiclient_cert.pem
    privateKeyPath: /usr/local/parks/cert/apiclient_key.pem
    #服务商-------------end---
    existsSub: 1
    appSecret: 1ceb7c9dff3c4330d653adc3ca55ea24
    mchId: 1229817002
    mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
    notifyUrl: https://bikes.yxbhlt.cn/bike_h5_api/api/wxPayNotify
    keyPath: /usr/local/apiclient_cert.p12
    #子商户------------start----
    subAppId: wxf493d72d7e5ffe76
    subAppSecret: a347bce54fd2f77a5272cc32b51264b0
    subMchId: 1662894737
    subMchKey: twTtOZJ28eqEvyMkv0WTJmhpgqaM9mmT
    #子商户------------end----
    #      mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
    typeId: gybike
########################mqtt相关配置########################
mqtt:
  host: tcp://39.100.125.239:1883
server/services/src/main/resources/application-test.yml
@@ -49,13 +49,14 @@
    serialNumer: 368B835A194384FD583B83B77977B84127D2F655
    notifyUrl: https://dmtest.ahapp.net/bike_h5_api/api/wxPayNotify
    refundNotifyUrl: https://dmtest.ahapp.net/bike_h5_api/api/wxRefundNotify
#    refundNotifyUrl: http://xiaopiqiu2.natapp1.cc/api/wxRefundNotify
    keyPath: /usr/local/apiclient_cert.p12
    privateCertPath: /usr/local/apiclient_cert.pem
    privateKeyPath: /usr/local/apiclient_key.pem
    existsSub: 1
    appSecret: 1ceb7c9dff3c4330d653adc3ca55ea24
    subAppId: wxcd2b89fd2ff065f8
    subAppSecret: 49c4a52f9ad87ba98307972664fe33b3
    subAppSecret: 3336812504c830b1c3c5243f9ece407a
    subMchId: 1661772003
    subMchKey: EVM8E15TKXE0OEMJFC0V6UFVIOZ5CSQS
    typeId: gybike
server/web/src/main/java/com/doumee/api/web/PaymentCallback.java
@@ -13,6 +13,8 @@
import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction;
import com.wechat.pay.java.service.refund.model.RefundNotification;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
@@ -109,7 +111,10 @@
    }
    @PostMapping("/api/wxRefundNotify")
    public ApiResponse wxRefundNotify(HttpServletRequest request) {
        log.error("微信退款回调结果开始===========" );
        try {
            DefaultSecurityManager securityManager = new DefaultSecurityManager();
            SecurityUtils.setSecurityManager(securityManager);
            ServletInputStream inputStream = request.getInputStream();
            StringBuffer stringBuffer = new StringBuffer();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
server/web/src/main/resources/application.yml
@@ -9,7 +9,7 @@
#  application:
#    name: parkbike
  profiles:
    active: test
    active: pro
  # JSON返回配置
  jackson:
    # 默认时区