wjj 3 недель назад
Родитель
Сommit
854602a882

+ 108 - 6
fs-admin/src/main/java/com/fs/his/task/Task.java

@@ -1,20 +1,23 @@
 package com.fs.his.task;
 
 import cn.hutool.core.date.DateTime;
-import cn.hutool.core.date.DateUnit;
-import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
+import com.fs.common.exception.CustomException;
+import com.fs.core.utils.OrderCodeUtils;
 import com.fs.fastGpt.domain.FastgptChatVoiceHomo;
 import com.fs.fastGpt.mapper.FastgptChatVoiceHomoMapper;
 import com.fs.fastgptApi.util.AudioUtils;
 import com.fs.fastgptApi.vo.AudioVO;
 import com.fs.hisStore.param.FsStoreOrderExpressEditParam;
 import com.fs.hisStore.service.IFsStoreOrderScrmService;
+import com.fs.huifuPay.domain.HuifuOrderConfirm;
+import com.fs.huifuPay.domain.HuifuOrderConfirmResult;
+import com.fs.huifuPay.sdk.opps.core.utils.DateTools;
+import com.fs.huifuPay.service.HuiFuService;
 import com.fs.sop.domain.QwSopTempVoice;
 import com.alibaba.fastjson.JSONObject;
-import com.baidu.dev2.api.sdk.payment.api.PaymentService;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.service.impl.SmsServiceImpl;
@@ -33,9 +36,7 @@ import com.fs.course.mapper.FsCourseRedPacketLogMapper;
 import com.fs.course.service.IFsCourseWatchLogService;
 import com.fs.course.service.ITencentCloudCosService;
 import com.fs.erp.domain.ErpDeliverys;
-import com.fs.erp.domain.ErpOrder;
 import com.fs.erp.domain.ErpOrderQuery;
-import com.fs.erp.domain.FsErpFinishPush;
 import com.fs.erp.dto.ErpOrderQueryRequert;
 import com.fs.erp.dto.ErpOrderQueryResponse;
 import com.fs.erp.dto.OrderQueryResponseDTO;
@@ -87,11 +88,11 @@ import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.OffsetDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -236,6 +237,18 @@ public class Task {
     @Autowired
     private IQwGroupMsgService groupMsgService;
 
+    @Autowired
+    private FsStorePaymentMapper storePaymentMapper;
+
+    @Autowired
+    private HuiFuService huiFuService;
+
+    @Autowired
+    private IFsShareAmountDetailService amountDetailService;
+
+    @Autowired
+    private IFsAmountsShareMerchantService amountShareMerchantService;
+
     public static final String SOP_TEMP_VOICE_KEY = "sop:tempVoice";
     public void syncExpressToWx() {
         List<FsWxExpressTask> fsWxExpressTasks = fsWxExpressTaskMapper.selectPendingData();
@@ -2064,4 +2077,93 @@ public class Task {
         }
 
     }
+
+    public void shareAmount(){
+        List<FsStorePayment> payments = storePaymentMapper.selectSharePaymentList();
+        if (CollectionUtils.isNotEmpty(payments)) {
+            for (FsStorePayment storePayment : payments) {
+                try {
+                    logger.info("分账订单号:{}",storePayment.getBusinessCode());
+                    FsStoreOrder order = fsStoreOrderService.selectFsStoreOrderByOrderCode(storePayment.getBusinessCode());
+                    BigDecimal divAmount = null;
+                    //默认全部进入中医院
+                    BigDecimal ysyAmount = storePayment.getPayMoney();
+                    HuifuOrderConfirm confirm = new HuifuOrderConfirm();
+
+                    if (order != null) {
+                        //获取聚水潭分账商户
+                        FsAmountsShareMerchant queryMerchant = new FsAmountsShareMerchant();
+                        queryMerchant.setType(order.getErpType());
+                        List<FsAmountsShareMerchant> merchants = amountShareMerchantService.selectFsAmountsShareMerchantList(queryMerchant);
+                        //支付金额大于等于0.1的进行分账 最低分账金额为0.1
+                        if (storePayment.getPayMoney().compareTo(new BigDecimal("0.1")) > -1) {
+                            if (order.getErpType() != null && order.getErpType() == 1) {
+                                if (merchants != null && !merchants.isEmpty()) {
+                                    int i = (int) (Math.random() * merchants.size());
+                                    FsAmountsShareMerchant merchant = merchants.get(i);
+                                    //分账商户号
+                                    confirm.setDivHfId(merchant.getMerchantAccount());
+                                    //益寿缘分账金额
+                                    ysyAmount = storePayment.getPayMoney().multiply(new BigDecimal("0.2"));
+                                    //其它商户分账金额
+                                    divAmount = storePayment.getPayMoney().subtract(ysyAmount);
+                                    //分账明细数据
+                                    FsShareAmountDetail shareAmountDetail = new FsShareAmountDetail();
+                                    shareAmountDetail.setShareAmount(divAmount);
+                                    shareAmountDetail.setMerchantId(merchant.getId());
+                                    shareAmountDetail.setOrderCode(order.getOrderCode());
+                                    shareAmountDetail.setOrderId(order.getOrderId());
+                                    //添加分账明细
+                                    amountDetailService.insertFsShareAmountDetail(shareAmountDetail);
+                                }
+                            }
+                        }
+                    } else {
+                        throw new CustomException("订单不存在");
+                    }
+                    logger.info("开始确认订单分账..........");
+                    confirm.setYsyDivAmt(ysyAmount);
+                    confirm.setDivAmt(divAmount);
+                    confirm.setOrgReqSeqId(storePayment.getShareCode()+"-"+storePayment.getPayCode());
+                    confirm.setOrgReqDate(DateTools.getCurrentDateYYYYMMDD());
+                    String orderCode = OrderCodeUtils.getOrderSn();
+                    if (StringUtils.isEmpty(orderCode)) {
+                        throw new CustomException("订单生成失败,请重试");
+                    }
+                    //中医院商户号
+                    confirm.setMainHfId("6666000175632107");
+                    confirm.setReqSeqId(orderCode);
+                    confirm.setTotalAmount(storePayment.getPayMoney());
+                    HuifuOrderConfirmResult result = huiFuService.confirmOrder(confirm);
+                    logger.info("确认订单分账结束..........");
+                    if (result != null && result.getResp_code().equals("00000000") && (result.getTrans_stat().equals("S") || result.getTrans_stat().equals("P"))) {
+                        FsStorePayment paymentMap = new FsStorePayment();
+                        //分账标识
+                        paymentMap.setPaymentId(storePayment.getPaymentId());
+                        paymentMap.setShareStatus(1);
+                        paymentMap.setShareDate(result.getReq_date());
+                        paymentMap.setShareCode(result.getReq_seq_id());
+                        logger.info("更新支付记录");
+                        storePaymentMapper.updateFsStorePayment(paymentMap);
+
+                        FsStoreOrder orderMap = new FsStoreOrder();
+                        orderMap.setOrderId(order.getOrderId());
+                        orderMap.setZyyDivAmount(result.getYsyAmount());
+                        orderMap.setZyyHuifuId(result.getZyzHuifuId());
+                        if (result.getOtherAmount() != null && result.getOtherHuifuId() != null) {
+                            orderMap.setDivHuifuId(result.getOtherHuifuId());
+                            orderMap.setDivAmount(result.getOtherAmount());
+                        }
+                        //更新订单
+                        fsStoreOrderService.updateFsStoreOrder(orderMap);
+                    } else {
+                        throw new CustomException("交易确认订单失败");
+                    }
+                } catch (Exception e) {
+                    logger.info("分账失败,订单号:{},原因:{}", storePayment.getBusinessCode(),e.getMessage());
+                    continue;
+                }
+            }
+        }
+    }
 }

+ 4 - 0
fs-service/src/main/java/com/fs/his/mapper/FsStorePaymentMapper.java

@@ -320,4 +320,8 @@ public interface FsStorePaymentMapper
 
     @Select("select * from fs_store_payment_scrm where business_type=2 and order_id=#{orderId} and bank_transaction_id is not null ")
     List<FsStorePaymentScrm> selectFsStorePaymentByOrderScrmStatus1(Long id);
+
+    //获取需要分账的支付明细
+    @Select("SELECT * FROM fs_store_payment WHERE is_share = 1 AND share_status = 0 AND `status` = 1")
+    List<FsStorePayment> selectSharePaymentList();
 }

+ 9 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsPackageOrderServiceImpl.java

@@ -1481,6 +1481,7 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
                         return R.ok().put("isPay", 0).put("data", result).put("type", "tz");
                     }else if (payConfigDTO.getType().equals("hf")) {
                         logger.info("创建汇付订单");
+                        boolean isShare = storePayment.getPayMoney().compareTo(new BigDecimal("0.1")) > -1;
                         HuiFuCreateOrder o = new HuiFuCreateOrder();
                         o.setTradeType("T_MINIAPP");
                         o.setOpenid(openId);
@@ -1488,6 +1489,10 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
                         o.setTransAmt(storePayment.getPayMoney().toString());
                         o.setGoodsDesc("套餐包订单支付");
                         o.setAppId(appId);
+                        //开启延迟分账
+                        if (isShare){
+                            o.setIsDelay(1);
+                        }
                         HuifuCreateOrderResult result = huiFuService.createOrder(o);
                         logger.info("创建汇付支付:"+result);
                         FsStorePayment mt=new FsStorePayment();
@@ -1495,6 +1500,10 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
                         mt.setTradeNo(result.getHf_seq_id());
                         //多小程序支付 更新小程序appid
                         mt.setAppId(appId);
+                        if (isShare) {
+                            mt.setIsShare(1);
+                            mt.setShareCode("package");
+                        }
                         storePaymentService.updateFsStorePayment(mt);
                         return R.ok().put("isPay", 0).put("data", result).put("type", "hf");
                     }

+ 16 - 3
fs-service/src/main/java/com/fs/his/service/impl/FsStoreOrderServiceImpl.java

@@ -2120,9 +2120,6 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
         } else {
             order.setErpType(fsPackage.getErpType());
         }
-        //获取用户档期标签
-        List<String> names = qwExternalContactService.selectTagNameByFsUserId(packageOrder.getUserId());
-        order.setTagNames(JSON.toJSONString(names));
         Long prescribeId =null;
         if (productType==1 || packageSubType==2 || productType==2 || productType == 3){
             if (packageOrder.getDoctorId() == null) {
@@ -2325,6 +2322,14 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
             order.setFollowStatus(0);
         }
         if (fsStoreOrderMapper.insertFsStoreOrder(order) > 0) {
+            //插入生成订单档期日志
+            FsOrderSopLog fsOrderSopLog = new FsOrderSopLog();
+            fsOrderSopLog.setOrderId(order.getOrderId());
+            fsOrderSopLog.setStatus(0);
+            fsOrderSopLog.setFsUserId(packageOrder.getUserId());
+            fsOrderSopLog.setType(1);
+            fsOrderSopLog.setCreateTime(DateUtils.getNowDate());
+            fsOrderSopLogService.insertFsOrderSopLog(fsOrderSopLog);
 
             if (order.getOrderId() == null) {
                 throw new CustomException("订单id为空" + order);
@@ -3653,6 +3658,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
                         fsStorePaymentMapper.updateFsStorePayment(mt);
                         return R.ok().put("isPay", 0).put("data", result).put("type", "tz");
                     } else if (payConfigDTO.getType().equals("hf")) {
+                        boolean isShare = storePayment.getPayMoney().compareTo(new BigDecimal("0.1")) > -1;
                         HuiFuCreateOrder o = new HuiFuCreateOrder();
                         o.setTradeType("T_MINIAPP");
                         o.setOpenid(openId);
@@ -3660,11 +3666,18 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
                         o.setTransAmt(storePayment.getPayMoney().toString());
                         o.setGoodsDesc("药品订单支付");
                         o.setAppId(param.getAppId());
+                        if (isShare) {
+                            o.setIsDelay(1);
+                        }
                         HuifuCreateOrderResult result = huiFuService.createOrder(o);
                         FsStorePayment mt = new FsStorePayment();
                         mt.setPaymentId(storePayment.getPaymentId());
                         mt.setTradeNo(result.getHf_seq_id());
                         mt.setAppId(appId);
+                        if (isShare) {
+                            mt.setIsShare(1);
+                            mt.setShareCode("store");
+                        }
                         storePaymentService.updateFsStorePayment(mt);
                         return R.ok().put("isPay", 0).put("data", result).put("type", "hf");
                     }

+ 2 - 0
fs-service/src/main/java/com/fs/his/vo/FsShareAmountDetailVO.java

@@ -32,4 +32,6 @@ public class FsShareAmountDetailVO {
     @Excel(name = "分账时间",dateFormat = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
+
+    private Integer status;
 }

+ 1 - 0
fs-service/src/main/java/com/fs/huifuPay/domain/HuiFuCreateOrder.java

@@ -20,4 +20,5 @@ public class HuiFuCreateOrder {
     String goodsDesc;
     String openid;
     String appId; //多小程序支付
+    Integer isDelay = 0;//是否延迟支付(默认不开启) 0不开启 1开启
 }

+ 6 - 6
fs-service/src/main/java/com/fs/huifuPay/service/impl/HuiFuServiceImpl.java

@@ -77,12 +77,12 @@ public class HuiFuServiceImpl implements HuiFuService {
             // 禁用信用卡标记
             extendInfoMap.put("limit_pay_type", "NO_CREDIT");
             // 是否延迟交易 Y 为延迟 N为不延迟,不传默认N
-//            if (order.getAppId() != null) {
-//                extendInfoMap.put("delay_acct_flag", "Y");
-//            } else {
-//                extendInfoMap.put("delay_acct_flag", "N");
-//            }
-            extendInfoMap.put("delay_acct_flag", "N");
+            if (order.getIsDelay() == 1) {
+                extendInfoMap.put("delay_acct_flag", "Y");
+            } else {
+                extendInfoMap.put("delay_acct_flag", "N");
+            }
+            //extendInfoMap.put("delay_acct_flag", "N");
             extendInfoMap.put("pay_scene", "02");
             // 传入分帐遇到优惠的处理规则 1: 按比例分,2: 按分账明细顺序保障,3: 只给交易商户(默认)
             extendInfoMap.put("term_div_coupon_type", "0");

+ 5 - 1
fs-service/src/main/resources/mapper/his/FsShareAmountDetailMapper.xml

@@ -19,7 +19,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </sql>
 
     <select id="selectFsShareAmountDetailList"  resultType="com.fs.his.vo.FsShareAmountDetailVO">
-        select d.order_code, d.share_amount, d.create_time, m.merchant_name,m.merchant_account,m.type from fs_share_amount_detail d LEFT JOIN fs_amounts_share_merchant m ON d.merchant_id = m.id
+        select d.order_code, d.share_amount, d.create_time, m.merchant_name,m.merchant_account,m.type , o.`status`
+        from fs_share_amount_detail d
+        LEFT JOIN fs_amounts_share_merchant m ON d.merchant_id = m.id
+        LEFT JOIN fs_store_order o ON o.order_code = d.order_code
         <where>
             <if test="maps.orderCode != null  and maps.orderCode != ''"> and d.order_code = #{maps.orderCode}</if>
             <if test="maps.merchantAccount != null  and maps.merchantAccount != ''"> and m.merchant_account = #{maps.merchantAccount}</if>
@@ -32,6 +35,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 and DATE(d.create_time) &lt;= DATE(#{maps.endTime})
             </if>
         </where>
+         order by d.create_time desc
     </select>
     
     <select id="selectFsShareAmountDetailById" parameterType="Long" resultMap="FsShareAmountDetailResult">