Ver código fonte

1.分账业务 2.用户信息采集 3.问答 4.聚水潭合并订单获取

wjj 1 semana atrás
pai
commit
7958d801be
47 arquivos alterados com 1499 adições e 73 exclusões
  1. 112 0
      fs-admin/src/main/java/com/fs/his/task/Task.java
  2. 10 0
      fs-company/src/main/java/com/fs/company/controller/store/FsPackageController.java
  3. 61 0
      fs-company/src/main/java/com/fs/company/controller/store/FsStoreAfterSalesController.java
  4. 50 0
      fs-company/src/main/java/com/fs/hisStore/controller/FsQuestionAndAnswerController.java
  5. 50 0
      fs-company/src/main/java/com/fs/hisStore/controller/FsStoreAfterSalesScrmController.java
  6. 109 0
      fs-company/src/main/java/com/fs/hisStore/controller/FsUserInformationCollectionController.java
  7. 7 0
      fs-service/src/main/java/com/fs/erp/dto/ErpOrderQueryMergeResponse.java
  8. 1 0
      fs-service/src/main/java/com/fs/erp/dto/ErpOrderQueryRequert.java
  9. 4 0
      fs-service/src/main/java/com/fs/erp/service/IErpOrderService.java
  10. 5 0
      fs-service/src/main/java/com/fs/erp/service/impl/DfOrderServiceImpl.java
  11. 5 0
      fs-service/src/main/java/com/fs/erp/service/impl/ErpOrderServiceImpl.java
  12. 5 0
      fs-service/src/main/java/com/fs/erp/service/impl/HzOMSErpOrderServiceImpl.java
  13. 15 2
      fs-service/src/main/java/com/fs/erp/service/impl/JSTErpOrderServiceImpl.java
  14. 5 0
      fs-service/src/main/java/com/fs/erp/service/impl/K9OrderScrmServiceImpl.java
  15. 5 0
      fs-service/src/main/java/com/fs/erp/service/impl/WdtErpOrderServiceImpl.java
  16. 2 0
      fs-service/src/main/java/com/fs/his/domain/FsStoreOrder.java
  17. 6 0
      fs-service/src/main/java/com/fs/his/mapper/FsHfpayConfigMapper.java
  18. 2 0
      fs-service/src/main/java/com/fs/his/mapper/FsPackageMapper.java
  19. 6 0
      fs-service/src/main/java/com/fs/his/mapper/FsStoreOrderMapper.java
  20. 5 0
      fs-service/src/main/java/com/fs/his/service/IFsPackageService.java
  21. 12 12
      fs-service/src/main/java/com/fs/his/service/impl/FsPackageOrderServiceImpl.java
  22. 5 0
      fs-service/src/main/java/com/fs/his/service/impl/FsPackageServiceImpl.java
  23. 28 24
      fs-service/src/main/java/com/fs/his/service/impl/FsStoreAfterSalesServiceImpl.java
  24. 16 1
      fs-service/src/main/java/com/fs/his/vo/AnswerVO.java
  25. 1 0
      fs-service/src/main/java/com/fs/hisStore/domain/FsStoreOrderScrm.java
  26. 60 0
      fs-service/src/main/java/com/fs/hisStore/domain/FsUserInformationCollection.java
  27. 63 0
      fs-service/src/main/java/com/fs/hisStore/mapper/FsUserInformationCollectionMapper.java
  28. 32 0
      fs-service/src/main/java/com/fs/hisStore/param/FsUserInformationCollectionParam.java
  29. 67 0
      fs-service/src/main/java/com/fs/hisStore/service/IFsUserInformationCollectionService.java
  30. 9 8
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java
  31. 243 0
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsUserInformationCollectionServiceImpl.java
  32. 27 0
      fs-service/src/main/java/com/fs/hisStore/vo/FsUserInformationCollectionVO.java
  33. 13 0
      fs-service/src/main/java/com/fs/huifuPay/domain/HuifuBusiOpen.java
  34. 15 0
      fs-service/src/main/java/com/fs/huifuPay/domain/HuifuBusiOpenResult.java
  35. 33 0
      fs-service/src/main/java/com/fs/huifuPay/domain/HuifuOrderConfirm.java
  36. 24 0
      fs-service/src/main/java/com/fs/huifuPay/domain/HuifuOrderConfirmResult.java
  37. 12 1
      fs-service/src/main/java/com/fs/huifuPay/sdk/opps/core/request/V2MerchantBusiOpenRequest.java
  38. 31 1
      fs-service/src/main/java/com/fs/huifuPay/sdk/opps/core/request/V2TradePaymentDelaytransConfirmRequest.java
  39. 5 0
      fs-service/src/main/java/com/fs/huifuPay/service/HuiFuService.java
  40. 111 10
      fs-service/src/main/java/com/fs/huifuPay/service/impl/HuiFuServiceImpl.java
  41. 35 9
      fs-service/src/main/java/com/fs/huifuPay/service/test.java
  42. 3 1
      fs-service/src/main/java/com/fs/qw/service/impl/QwExternalContactServiceImpl.java
  43. 4 0
      fs-service/src/main/resources/mapper/his/FsStoreOrderMapper.xml
  44. 1 0
      fs-service/src/main/resources/mapper/hisStore/FsStoreOrderScrmMapper.xml
  45. 109 0
      fs-service/src/main/resources/mapper/hisStore/FsUserInformationCollectionMapper.xml
  46. 74 3
      fs-user-app/src/main/java/com/fs/app/controller/HuifuPayController.java
  47. 1 1
      fs-user-app/src/main/java/com/fs/app/controller/PackageOrderController.java

Diferenças do arquivo suprimidas por serem muito extensas
+ 112 - 0
fs-admin/src/main/java/com/fs/his/task/Task.java


+ 10 - 0
fs-company/src/main/java/com/fs/company/controller/store/FsPackageController.java

@@ -122,4 +122,14 @@ public class FsPackageController extends BaseController
         List<FsPackageListVO> list = fsPackageService.selectFsPackageListVByName(packageName);
         return AjaxResult.success(list);
     }
+
+    /**
+     * 查询私有套餐包列表
+     */
+    @GetMapping("/privatePackageList")
+    public TableDataInfo selectAllPrivatePackageList()
+    {
+        List<OptionsVO> list = fsPackageService.selectAllPrivatePackageList();
+        return getDataTable(list);
+    }
 }

+ 61 - 0
fs-company/src/main/java/com/fs/company/controller/store/FsStoreAfterSalesController.java

@@ -1,17 +1,22 @@
 package com.fs.company.controller.store;
 
+import cn.hutool.core.date.DateTime;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.framework.security.LoginUser;
 import com.fs.framework.security.SecurityUtils;
 import com.fs.his.domain.FsExportTask;
 import com.fs.his.domain.FsStoreAfterSales;
+import com.fs.his.domain.FsStoreAfterSalesLogs;
+import com.fs.his.enums.FsStoreAfterSalesStatusEnum;
 import com.fs.his.param.FsStoreAfterSalesParam;
 import com.fs.his.service.IFsExportTaskService;
+import com.fs.his.service.IFsStoreAfterSalesLogsService;
 import com.fs.his.service.IFsStoreAfterSalesService;
 import com.fs.his.vo.FsStoreAfterSalesListVO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,6 +40,8 @@ public class FsStoreAfterSalesController extends BaseController
     private IFsStoreAfterSalesService fsStoreAfterSalesService;
     @Autowired
     private IFsExportTaskService exportTaskService;
+    @Autowired
+    private IFsStoreAfterSalesLogsService fsStoreAfterSalesLogsService;
     /**
      * 查询售后记录列表
      */
@@ -182,6 +189,15 @@ public class FsStoreAfterSalesController extends BaseController
     public AjaxResult edit(@RequestBody FsStoreAfterSales fsStoreAfterSales)
     {
         fsStoreAfterSales.setStatus(2);
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        //操作记录
+        FsStoreAfterSalesLogs logs = new FsStoreAfterSalesLogs();
+        logs.setChangeTime(new DateTime());
+        logs.setChangeType(2);
+        logs.setOperator(loginUser.getUser().getNickName());
+        logs.setStoreAfterSalesId(fsStoreAfterSales.getId());
+        logs.setChangeMessage(FsStoreAfterSalesStatusEnum.STATUS_2.getDesc());
+        fsStoreAfterSalesLogsService.insertFsStoreAfterSalesLogs(logs);
         return toAjax(fsStoreAfterSalesService.updateFsStoreAfterSales(fsStoreAfterSales));
     }
 
@@ -231,5 +247,50 @@ public class FsStoreAfterSalesController extends BaseController
         return AjaxResult.success(s);
     }
 
+    @PreAuthorize("@ss.hasPermi('store:storeAfterSales:audit')")
+    @PutMapping("/auditing")
+    @Log(title = "销售端平台审核", businessType = BusinessType.UPDATE)
+    public AjaxResult auditing(@RequestBody FsStoreAfterSales fsStoreAfterSales)
+    {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsStoreAfterSales.setOperator(loginUser.getUser().getNickName());
+        return toAjax(fsStoreAfterSalesService.auditing(fsStoreAfterSales));
+    }
+
+    @PreAuthorize("@ss.hasPermi('store:storeAfterSales:depot')")
+    @Log(title = "销售端仓库审核", businessType = BusinessType.UPDATE)
+    @PutMapping("/depotAuditing")
+    public AjaxResult depotAuditing(@RequestBody FsStoreAfterSales fsStoreAfterSales)
+    {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsStoreAfterSales.setOperator(loginUser.getUser().getNickName());
+        return toAjax(fsStoreAfterSalesService.depotAuditing(fsStoreAfterSales));
+    }
+    /**
+     * 审核
+     */
+    @Log(title = "销售端撤销审核", businessType = BusinessType.UPDATE)
+    @PreAuthorize("@ss.hasPermi('store:storeAfterSales:revoke')")
+    @PutMapping("/noAuditing")
+    public AjaxResult noAuditing(@RequestBody FsStoreAfterSales fsStoreAfterSales)
+    {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsStoreAfterSales.setOperator(loginUser.getUser().getNickName());
+        return toAjax(fsStoreAfterSalesService.noAuditing(fsStoreAfterSales));
+    }
+
+    /**
+     * 财务审核并退款
+     */
+    @Log(title = "销售端财务审核", businessType = BusinessType.UPDATE)
+    @PreAuthorize("@ss.hasPermi('store:storeAfterSales:finance')")
+    @PutMapping("/tuiMoney")
+    public AjaxResult tuiMoney(@RequestBody FsStoreAfterSales fsStoreAfterSales)
+    {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsStoreAfterSales.setOperator(loginUser.getUser().getNickName());
+        return toAjax(fsStoreAfterSalesService.refundMoney(fsStoreAfterSales));
+    }
+
 
 }

+ 50 - 0
fs-company/src/main/java/com/fs/hisStore/controller/FsQuestionAndAnswerController.java

@@ -0,0 +1,50 @@
+package com.fs.hisStore.controller;
+
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.his.domain.FsQuestionAndAnswer;
+import com.fs.his.service.IFsQuestionAndAnswerService;
+import com.fs.his.vo.OptionsVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 问答Controller
+ * 
+ * @author fs
+ * @date 2025-09-29
+ */
+@RestController
+@RequestMapping("/store/answer")
+public class FsQuestionAndAnswerController extends BaseController
+{
+    @Autowired
+    private IFsQuestionAndAnswerService fsQuestionAndAnswerService;
+
+
+    /**
+     * 获取问答详细信息
+     */
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(fsQuestionAndAnswerService.selectFsQuestionAndAnswerById(id));
+    }
+
+    /**
+     * 查询问答列表
+     */
+    @GetMapping("/allList")
+    public TableDataInfo getHospital()
+    {
+        List<OptionsVO> list = fsQuestionAndAnswerService.selectAllQuestionOptions();
+        return getDataTable(list);
+    }
+}

+ 50 - 0
fs-company/src/main/java/com/fs/hisStore/controller/FsStoreAfterSalesScrmController.java

@@ -12,6 +12,7 @@ import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.service.ICompanyUserService;
 import com.fs.framework.security.LoginUser;
+import com.fs.framework.security.SecurityUtils;
 import com.fs.framework.service.TokenService;
 import com.fs.his.domain.FsUser;
 import com.fs.his.service.IFsUserService;
@@ -19,6 +20,10 @@ import com.fs.hisStore.domain.FsStoreAfterSalesItemScrm;
 import com.fs.hisStore.domain.FsStoreAfterSalesScrm;
 import com.fs.hisStore.domain.FsStoreAfterSalesStatusScrm;
 import com.fs.hisStore.domain.FsStoreOrderScrm;
+import com.fs.hisStore.param.FsStoreAfterSalesAudit1Param;
+import com.fs.hisStore.param.FsStoreAfterSalesAudit2Param;
+import com.fs.hisStore.param.FsStoreAfterSalesCancelParam;
+import com.fs.hisStore.param.FsStoreAfterSalesRefundParam;
 import com.fs.hisStore.service.IFsStoreAfterSalesItemScrmService;
 import com.fs.hisStore.service.IFsStoreAfterSalesScrmService;
 import com.fs.hisStore.service.IFsStoreAfterSalesStatusScrmService;
@@ -28,6 +33,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import java.text.ParseException;
 import java.util.List;
 
 /**
@@ -149,6 +155,50 @@ public class FsStoreAfterSalesScrmController extends BaseController
         return toAjax(fsStoreAfterSalesService.updateFsStoreAfterSales(fsStoreAfterSales));
     }
 
+    @PreAuthorize("@ss.hasPermi('store:storeAfterSales:audit1')")
+    @PostMapping("/audit1")
+    //平台审核
+    public R audit1(@RequestBody FsStoreAfterSalesAudit1Param param)
+    {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        param.setOperator(loginUser.getUser().getNickName());
+        return fsStoreAfterSalesService.audit1(param);
+    }
+
+    @PreAuthorize("@ss.hasPermi('store:storeAfterSales:audit2')")
+    @PostMapping("/audit2")
+    //仓库审核
+    public R audit2(@RequestBody FsStoreAfterSalesAudit2Param param)
+    {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        param.setOperator(loginUser.getUser().getNickName());
+        return fsStoreAfterSalesService.audit2(param);
+    }
+    //财务审核
+    @PreAuthorize("@ss.hasPermi('store:storeAfterSales:refund')")
+    @PostMapping("/refund")
+    public R refund(@RequestBody FsStoreAfterSalesRefundParam param)
+    {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        param.setOperator(loginUser.getUser().getNickName());
+        return fsStoreAfterSalesService.refundMoney(param);
+    }
+    //平台撤销
+    @PreAuthorize("@ss.hasPermi('store:storeAfterSales:cancel')")
+    @PostMapping("/cancel")
+    public R cancel(@RequestBody FsStoreAfterSalesCancelParam param) throws ParseException {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        param.setOperator(loginUser.getUser().getNickName());
+        return fsStoreAfterSalesService.cancel(param);
+    }
+
+    @GetMapping("/getStoreAfterSales")
+    public R getStoreAfterSales(@RequestParam("orderCode") String orderCode)
+    {
+        List<FsStoreAfterSalesVO> vo = fsStoreAfterSalesService.selectFsStoreAfterSalesVOByOrderCode(orderCode);
+        return R.ok().put("data",vo);
+    }
+
 
 
 

+ 109 - 0
fs-company/src/main/java/com/fs/hisStore/controller/FsUserInformationCollectionController.java

@@ -0,0 +1,109 @@
+package com.fs.hisStore.controller;
+
+import java.util.List;
+
+import com.fs.framework.security.LoginUser;
+import com.fs.framework.security.SecurityUtils;
+import com.fs.hisStore.param.FsUserInformationCollectionParam;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.enums.BusinessType;
+import com.fs.hisStore.domain.FsUserInformationCollection;
+import com.fs.hisStore.service.IFsUserInformationCollectionService;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.common.core.page.TableDataInfo;
+
+/**
+ * 用户信息采集Controller
+ * 
+ * @author fs
+ * @date 2025-10-14
+ */
+@RestController
+@RequestMapping("/hisStore/collection")
+public class FsUserInformationCollectionController extends BaseController
+{
+    @Autowired
+    private IFsUserInformationCollectionService fsUserInformationCollectionService;
+
+    /**
+     * 查询用户信息采集列表
+     */
+    @PreAuthorize("@ss.hasPermi('hisStore:collection:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FsUserInformationCollection fsUserInformationCollection)
+    {
+        startPage();
+        List<FsUserInformationCollection> list = fsUserInformationCollectionService.selectFsUserInformationCollectionList(fsUserInformationCollection);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出用户信息采集列表
+     */
+    @PreAuthorize("@ss.hasPermi('hisStore:collection:export')")
+    @Log(title = "用户信息采集", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(FsUserInformationCollection fsUserInformationCollection)
+    {
+        List<FsUserInformationCollection> list = fsUserInformationCollectionService.selectFsUserInformationCollectionList(fsUserInformationCollection);
+        ExcelUtil<FsUserInformationCollection> util = new ExcelUtil<FsUserInformationCollection>(FsUserInformationCollection.class);
+        return util.exportExcel(list, "用户信息采集数据");
+    }
+
+    /**
+     * 获取用户信息采集详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('hisStore:collection:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(fsUserInformationCollectionService.selectFsUserInformationCollectionById(id));
+    }
+
+    /**
+     * 新增用户信息采集
+     */
+    @PreAuthorize("@ss.hasPermi('hisStore:collection:add')")
+    @Log(title = "用户信息采集", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FsUserInformationCollectionParam fsUserInformationCollection)
+    {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsUserInformationCollection.setCompanyUserId(loginUser.getUser().getUserId());
+        return toAjax(fsUserInformationCollectionService.insertFsUserInformationCollection(fsUserInformationCollection));
+    }
+
+    /**
+     * 修改用户信息采集
+     */
+    @PreAuthorize("@ss.hasPermi('hisStore:collection:edit')")
+    @Log(title = "用户信息采集", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsUserInformationCollectionParam fsUserInformationCollection)
+    {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsUserInformationCollection.setCompanyUserId(loginUser.getUser().getUserId());
+        return toAjax(fsUserInformationCollectionService.updateFsUserInformationCollection(fsUserInformationCollection));
+    }
+
+    /**
+     * 删除用户信息采集
+     */
+    @PreAuthorize("@ss.hasPermi('hisStore:collection:remove')")
+    @Log(title = "用户信息采集", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(fsUserInformationCollectionService.deleteFsUserInformationCollectionByIds(ids));
+    }
+
+    @GetMapping("/getInfo")
+    public AjaxResult getInfo(FsUserInformationCollection fsUserInformationCollection){
+        return AjaxResult.success(fsUserInformationCollectionService.getInfo(fsUserInformationCollection));
+    }
+}

+ 7 - 0
fs-service/src/main/java/com/fs/erp/dto/ErpOrderQueryMergeResponse.java

@@ -0,0 +1,7 @@
+package com.fs.erp.dto;
+
+import lombok.Data;
+
+@Data
+public class ErpOrderQueryMergeResponse extends BaseResponse{
+}

+ 1 - 0
fs-service/src/main/java/com/fs/erp/dto/ErpOrderQueryRequert.java

@@ -10,4 +10,5 @@ public class ErpOrderQueryRequert implements Serializable {
     Integer page_no;
     Integer page_size;
     String platform_code;
+    String so_id;
 }

+ 4 - 0
fs-service/src/main/java/com/fs/erp/service/IErpOrderService.java

@@ -16,7 +16,11 @@ public interface IErpOrderService
     ErpOrderResponse refundOrder(ErpRefundOrder order);
     ErpDeliverysResponse getDeliver(ErpDeliverysRequest param);
     ErpOrderQueryResponse getOrder(ErpOrderQueryRequert param);
+
     ErpOrderQueryResponse getScrmOrder(ErpOrderQueryRequert param);
+
+    OrderQueryResponseDTO getMergeOrder(ErpOrderQueryRequert param);
+    //OrderQueryResponseDTO getMergeOrderScrm(ErpOrderQueryRequert param);
     BaseResponse refundUpdate(ErpRefundUpdateRequest param);
     BaseResponse refundUpdateScrm(ErpRefundUpdateRequest param);
 

+ 5 - 0
fs-service/src/main/java/com/fs/erp/service/impl/DfOrderServiceImpl.java

@@ -245,6 +245,11 @@ public class DfOrderServiceImpl implements IErpOrderService
         return null;
     }
 
+    @Override
+    public OrderQueryResponseDTO getMergeOrder(ErpOrderQueryRequert param) {
+        return null;
+    }
+
     @Override
     public BaseResponse refundUpdate(ErpRefundUpdateRequest request) {
         ErpRefundOrder erpRefundOrder = new ErpRefundOrder();

+ 5 - 0
fs-service/src/main/java/com/fs/erp/service/impl/ErpOrderServiceImpl.java

@@ -123,6 +123,11 @@ public class ErpOrderServiceImpl implements IErpOrderService
         return null;
     }
 
+    @Override
+    public OrderQueryResponseDTO getMergeOrder(ErpOrderQueryRequert param) {
+        return null;
+    }
+
     @Override
     public BaseResponse refundUpdate(ErpRefundUpdateRequest request) {
         FsSysConfig sysConfig = configUtil.getSysConfig();

+ 5 - 0
fs-service/src/main/java/com/fs/erp/service/impl/HzOMSErpOrderServiceImpl.java

@@ -92,6 +92,11 @@ public class HzOMSErpOrderServiceImpl implements IErpOrderService {
         return null;
     }
 
+    @Override
+    public OrderQueryResponseDTO getMergeOrder(ErpOrderQueryRequert param) {
+        return null;
+    }
+
     @Override
     public BaseResponse refundUpdate(ErpRefundUpdateRequest param) {
 

+ 15 - 2
fs-service/src/main/java/com/fs/erp/service/impl/JSTErpOrderServiceImpl.java

@@ -345,10 +345,8 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
         OrderQueryRequestDTO requestDTO = new OrderQueryRequestDTO();
         requestDTO.setOIds(Collections.singletonList(Long.valueOf(param.getCode())));
 
-
         // 2. 调用ERP服务查询订单
         OrderQueryResponseDTO query = jstErpHttpService.query(requestDTO);
-
         // 3. 构建响应对象
         ErpOrderQueryResponse response = new ErpOrderQueryResponse();
 
@@ -397,6 +395,21 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
 
         return response;
     }
+
+    @Override
+    public OrderQueryResponseDTO getMergeOrder(ErpOrderQueryRequert param) {
+        // 1. 构建查询请求DTO
+        OrderQueryRequestDTO requestDTO = new OrderQueryRequestDTO();
+        requestDTO.setSoIds(Collections.singletonList(param.getSo_id()));
+        // 2. 调用ERP服务查询订单
+        return jstErpHttpService.query(requestDTO);
+    }
+
+//    @Override
+//    public OrderQueryResponseDTO getMergeOrderScrm(ErpOrderQueryRequert param) {
+//        return null;
+//    }
+
     /**
      * 将OrderQueryResponseDTO.Order转换为ErpOrderQuery
      *

+ 5 - 0
fs-service/src/main/java/com/fs/erp/service/impl/K9OrderScrmServiceImpl.java

@@ -133,6 +133,11 @@ public class K9OrderScrmServiceImpl implements IErpOrderService {
         return null;
     }
 
+    @Override
+    public OrderQueryResponseDTO getMergeOrder(ErpOrderQueryRequert param) {
+        return null;
+    }
+
     @Override
     public BaseResponse refundUpdate(ErpRefundUpdateRequest param) {
         return null;

+ 5 - 0
fs-service/src/main/java/com/fs/erp/service/impl/WdtErpOrderServiceImpl.java

@@ -832,6 +832,11 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
         return null;
     }
 
+    @Override
+    public OrderQueryResponseDTO getMergeOrder(ErpOrderQueryRequert param) {
+        return null;
+    }
+
     @Override
     public BaseResponse refundUpdate(ErpRefundUpdateRequest param) {
         FsSysConfig sysConfig = configUtil.getSysConfig();

+ 2 - 0
fs-service/src/main/java/com/fs/his/domain/FsStoreOrder.java

@@ -266,5 +266,7 @@ public class FsStoreOrder extends BaseEntity
     private BigDecimal billPrice;
     private String erpPhone;
     private String orderKey;
+    //0未合并 1已合并
+    private Integer isMerge;
 
 }

+ 6 - 0
fs-service/src/main/java/com/fs/his/mapper/FsHfpayConfigMapper.java

@@ -62,4 +62,10 @@ public interface FsHfpayConfigMapper extends BaseMapper<FsHfpayConfig>{
 
     @Select("select * from fs_hfpay_config where app_id = #{appId} limit 1")
     FsHfpayConfig selectByAppId(String appId);
+
+    @Select("select huifu_id from fs_hfpay_config where huifu_id != #{huifuId}")
+    List<String> selectByHuifuId(String huifuId);
+
+    @Select("select huifu_id from fs_hfpay_config ")
+    List<String> selectHuifuId();
 }

+ 2 - 0
fs-service/src/main/java/com/fs/his/mapper/FsPackageMapper.java

@@ -68,6 +68,8 @@ public interface FsPackageMapper
 
     @Select("select package_id dictValue,package_name dictLabel from fs_package where package_sub_type != 3 order by sort")
     List<OptionsVO> selectAllPackageList();
+    @Select("select package_id dictValue,package_name dictLabel from fs_package where is_show = 0  order by sort")
+    List<OptionsVO> selectAllPrivatePackageList();
     @Select({"<script> " +
             "select * from fs_package "+
             "where 1=1 "+

+ 6 - 0
fs-service/src/main/java/com/fs/his/mapper/FsStoreOrderMapper.java

@@ -1158,6 +1158,12 @@ public interface FsStoreOrderMapper
     @Select("select * from fs_store_order_scrm where  `status`=1 and extend_order_id is not null and extend_order_id != '' ")
     List<FsStoreOrderScrm> selectWdtOmsOrderdeliveryOpScrm();
 
+    @Select("select * from fs_store_order where  `status`=2 and extend_order_id is not null and `is_merge` = 0 and extend_order_id != '' ")
+    List<FsStoreOrder> selectNoMergeOrder();
+
+    @Select("select * from fs_store_order_scrm where  `status`=1 and extend_order_id is not null and `is_merge` = 0 and extend_order_id != '' ")
+    List<FsStoreOrderScrm> selectNoMergeOrderScrm();
+
     int batchUpdateErpByOrderIds(@Param("maps") List<Map<String, String>> maps);
 
     @Select(" select * from fs_store_order where order_code=#{orderCode} and store_id=#{storeId}")

+ 5 - 0
fs-service/src/main/java/com/fs/his/service/IFsPackageService.java

@@ -90,4 +90,9 @@ public interface IFsPackageService
     List<FsPackage> selectFsPackageListByIds(Long[] packageIds);
 
     int bulkCopyFsPackageByPackage(Long[] packageIds);
+
+    /**
+     * 查询私有套餐包列表
+     */
+    List<OptionsVO> selectAllPrivatePackageList();
 }

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

@@ -1924,16 +1924,16 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
 
         String uuid = IdUtil.randomUUID();
         redisCache.setCacheObject("createPackageOrderKey:" + uuid, companyUser.getCompanyId() + "-" + companyUser.getUserId(), 24, TimeUnit.HOURS);
-        redisCache.setCacheObject("package:" + uuid, fsPackage, 24, TimeUnit.HOURS);
-        redisCache.setCacheObject("json:" + uuid, json, 24, TimeUnit.HOURS);
-        redisCache.setCacheObject("patient:" + uuid, patient, 24, TimeUnit.HOURS);
-        redisCache.setCacheObject("userStatus:" + uuid, false, 24, TimeUnit.HOURS);
-        redisCache.setCacheObject("storeOrder:" + uuid, null, 24, TimeUnit.HOURS);
+        redisCache.setCacheObject("package:" + uuid, fsPackage, 120, TimeUnit.DAYS);
+        redisCache.setCacheObject("json:" + uuid, json, 120, TimeUnit.DAYS);
+        redisCache.setCacheObject("patient:" + uuid, patient, 120, TimeUnit.DAYS);
+        redisCache.setCacheObject("userStatus:" + uuid, false, 120, TimeUnit.DAYS);
+        redisCache.setCacheObject("storeOrder:" + uuid, null, 120, TimeUnit.DAYS);
         BigDecimal price = fsPackage.getTotalPrice();
         if (price == null){
             price = BigDecimal.ZERO;
         }
-        redisCache.setCacheObject("createPackageOrderMoney:" + uuid,price,24,TimeUnit.HOURS);
+        redisCache.setCacheObject("createPackageOrderMoney:" + uuid,price,120, TimeUnit.DAYS);
         return R.ok().put("packageOrderKey", uuid).put("price", price);
     }
 
@@ -1946,9 +1946,9 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
             if (payAmount == null) {
                 return R.error("请输入代收金额");
             }
-            if (payAmount.compareTo(new BigDecimal(100)) < 0) {
-                throw new CustomException("物流代收金额应大于等于100");
-            }
+//            if (payAmount.compareTo(new BigDecimal(100)) < 0) {
+//                throw new CustomException("物流代收金额应大于等于100");
+//            }
         }
         String key = redisCache.getCacheObject("createPackageOrderKey:" + createPackageOrderKey);
         if (StringUtils.isEmpty(key)) {
@@ -1963,9 +1963,9 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
         if (money.compareTo(totalMoney) == 1) {
             throw new CustomException("价格不能大于套餐包总价", 501);
         }
-        redisCache.setCacheObject("createPackageOrderMoney:" + createPackageOrderKey, money, 24, TimeUnit.HOURS);
-        redisCache.setCacheObject("createPackageOrderAmount:" + createPackageOrderKey, payAmount, 24, TimeUnit.HOURS);//物流代收自定义金额
-        redisCache.setCacheObject("createPackageOrderPayType:" + createPackageOrderKey, payType, 24, TimeUnit.HOURS);//支付类型 1-全付款 2-物流代收(货到付款)
+        redisCache.setCacheObject("createPackageOrderMoney:" + createPackageOrderKey, money, 120, TimeUnit.DAYS);
+        redisCache.setCacheObject("createPackageOrderAmount:" + createPackageOrderKey, payAmount, 120, TimeUnit.DAYS);//物流代收自定义金额
+        redisCache.setCacheObject("createPackageOrderPayType:" + createPackageOrderKey, payType, 120, TimeUnit.DAYS);//支付类型 1-全付款 2-物流代收(货到付款)
         return R.ok();
     }
 

+ 5 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsPackageServiceImpl.java

@@ -344,5 +344,10 @@ public class FsPackageServiceImpl implements IFsPackageService {
         }
         return 1;
     }
+
+    @Override
+    public List<OptionsVO> selectAllPrivatePackageList() {
+        return fsPackageMapper.selectAllPrivatePackageList();
+    }
 }
 

+ 28 - 24
fs-service/src/main/java/com/fs/his/service/impl/FsStoreAfterSalesServiceImpl.java

@@ -552,32 +552,36 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
                     throw new CustomException("退款请求失败" + refund.getResp_desc());
                 }
             }
-            //管易作废
-            if (StringUtils.isNotEmpty(fsStoreOrder.getExtendOrderId())) {
-                if (!fsStoreOrder.getExtendOrderId().equals("HIS")) {
-                    ErpRefundUpdateRequest request = new ErpRefundUpdateRequest();
-                    request.setTid(fsStoreOrder.getOrderCode());
-                    request.setOid(fsStoreOrder.getOrderCode());
-                    request.setRefund_state(1);
-                    request.setStoreAfterSalesId(fsStoreAfterSales.getId());
-                    FsSysConfig sysConfig = configUtil.getSysConfig();
-                    Integer erpType = sysConfig.getErpType();
-                    if (erpType == 1) {
-                        erpOrderService.refundUpdate(request);
-                    }else if (erpType == 2) {
-                        //旺店通
-                        wdtErpOrderService.refundUpdate(request);
-                    } else if (erpType == 3) {
-                        //瀚智
-                        hzOMSerpOrderService.refundUpdate(request);
-                    }  else if (erpType == 4) {
-                        dfOrderService.refundUpdate(request);
-                    }else if(erpType == 5){
-                        jSTOrderService.refundUpdate(request);
-                    }else if(erpType == 6){
-                        k9OrderService.refundUpdate(request);
+            try {
+                //管易作废
+                if (StringUtils.isNotEmpty(fsStoreOrder.getExtendOrderId())) {
+                    if (!fsStoreOrder.getExtendOrderId().equals("HIS")) {
+                        ErpRefundUpdateRequest request = new ErpRefundUpdateRequest();
+                        request.setTid(fsStoreOrder.getOrderCode());
+                        request.setOid(fsStoreOrder.getOrderCode());
+                        request.setRefund_state(1);
+                        request.setStoreAfterSalesId(fsStoreAfterSales.getId());
+                        FsSysConfig sysConfig = configUtil.getSysConfig();
+                        Integer erpType = sysConfig.getErpType();
+                        if (erpType == 1) {
+                            erpOrderService.refundUpdate(request);
+                        }else if (erpType == 2) {
+                            //旺店通
+                            wdtErpOrderService.refundUpdate(request);
+                        } else if (erpType == 3) {
+                            //瀚智
+                            hzOMSerpOrderService.refundUpdate(request);
+                        }  else if (erpType == 4) {
+                            dfOrderService.refundUpdate(request);
+                        }else if(erpType == 5){
+                            jSTOrderService.refundUpdate(request);
+                        }else if(erpType == 6){
+                            k9OrderService.refundUpdate(request);
+                        }
                     }
                 }
+            } catch (Exception e) {
+                throw new RuntimeException(e);
             }
         } else {
             if (order.getRefundAmount().compareTo(BigDecimal.ZERO) == 0) {

+ 16 - 1
fs-service/src/main/java/com/fs/his/vo/AnswerVO.java

@@ -1,6 +1,8 @@
 package com.fs.his.vo;
 
 import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.util.List;
 
@@ -9,5 +11,18 @@ public class AnswerVO {
 
     private String title;
 
-    private List<String> options;
+    private List<options> options;
+
+    //已选择数据
+    private Integer value;
+
+    //是否医生已确认
+    private Boolean flag;
+
+    @Getter
+    @Setter
+    public static class options{
+        private String name;
+        private Integer value;
+    }
 }

+ 1 - 0
fs-service/src/main/java/com/fs/hisStore/domain/FsStoreOrderScrm.java

@@ -350,5 +350,6 @@ public class FsStoreOrderScrm extends BaseEntity
     private Integer source;
     private BigDecimal billPrice;
     private String erpPhone;
+    private Integer isMerge;
 
 }

+ 60 - 0
fs-service/src/main/java/com/fs/hisStore/domain/FsUserInformationCollection.java

@@ -0,0 +1,60 @@
+package com.fs.hisStore.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+
+/**
+ * 用户信息采集对象 fs_user_information_collection
+ *
+ * @author fs
+ * @date 2025-10-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class FsUserInformationCollection extends BaseEntity{
+
+    /** $column.columnComment */
+    private Long id;
+
+    /** 问答id */
+    @Excel(name = "问答id")
+    private Long questionId;
+
+    /** 用户id */
+    @Excel(name = "用户id")
+    private Long userId;
+
+    /** 信息采集json数据 */
+    @Excel(name = "信息采集json数据")
+    private String jsonInfo;
+
+    /** 用户确认状态 0-未确认 1-已确认 */
+    @Excel(name = "用户确认状态 0-未确认 1-已确认")
+    private Integer userConfirm;
+
+    /** 医生确认状态 0-未确认 2-已确认 */
+    @Excel(name = "医生确认状态 0-未确认 2-已确认")
+    private Integer doctorConfirm;
+
+    // 医生id
+    private Long doctorId;
+
+    //销售id
+    private Long companyUserId;
+
+    //套餐包id
+    private Long packageId;
+
+    //支付类型 0-全款 1-物流代收
+    private Integer payType;
+
+    //代收金额
+    private BigDecimal amount;
+
+
+}

+ 63 - 0
fs-service/src/main/java/com/fs/hisStore/mapper/FsUserInformationCollectionMapper.java

@@ -0,0 +1,63 @@
+package com.fs.hisStore.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.hisStore.domain.FsUserInformationCollection;
+
+/**
+ * 用户信息采集Mapper接口
+ * 
+ * @author fs
+ * @date 2025-10-14
+ */
+public interface FsUserInformationCollectionMapper extends BaseMapper<FsUserInformationCollection>{
+    /**
+     * 查询用户信息采集
+     * 
+     * @param id 用户信息采集主键
+     * @return 用户信息采集
+     */
+    FsUserInformationCollection selectFsUserInformationCollectionById(Long id);
+
+    /**
+     * 查询用户信息采集列表
+     * 
+     * @param fsUserInformationCollection 用户信息采集
+     * @return 用户信息采集集合
+     */
+    List<FsUserInformationCollection> selectFsUserInformationCollectionList(FsUserInformationCollection fsUserInformationCollection);
+
+    /**
+     * 新增用户信息采集
+     * 
+     * @param fsUserInformationCollection 用户信息采集
+     * @return 结果
+     */
+    int insertFsUserInformationCollection(FsUserInformationCollection fsUserInformationCollection);
+
+    /**
+     * 修改用户信息采集
+     * 
+     * @param fsUserInformationCollection 用户信息采集
+     * @return 结果
+     */
+    int updateFsUserInformationCollection(FsUserInformationCollection fsUserInformationCollection);
+
+    /**
+     * 删除用户信息采集
+     * 
+     * @param id 用户信息采集主键
+     * @return 结果
+     */
+    int deleteFsUserInformationCollectionById(Long id);
+
+    /**
+     * 批量删除用户信息采集
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteFsUserInformationCollectionByIds(Long[] ids);
+
+    FsUserInformationCollection selectByUserId(Long userId);
+}

+ 32 - 0
fs-service/src/main/java/com/fs/hisStore/param/FsUserInformationCollectionParam.java

@@ -0,0 +1,32 @@
+package com.fs.hisStore.param;
+
+import com.fs.his.vo.AnswerVO;
+import com.fs.his.vo.FsQuestionAndAnswerVO;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class FsUserInformationCollectionParam {
+
+    private Long id;
+
+    private Long questionId;
+
+    private List<AnswerVO> answers;
+
+    private Long userId;
+
+    //销售id
+    private Long companyUserId;
+
+    //套餐包id
+    private Long packageId;
+
+    //支付类型 0-全款 1-物流代收
+    private Integer payType;
+
+    //代收金额
+    private BigDecimal amount;
+}

+ 67 - 0
fs-service/src/main/java/com/fs/hisStore/service/IFsUserInformationCollectionService.java

@@ -0,0 +1,67 @@
+package com.fs.hisStore.service;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.hisStore.domain.FsUserInformationCollection;
+import com.fs.hisStore.param.FsUserInformationCollectionParam;
+import com.fs.hisStore.vo.FsUserInformationCollectionVO;
+
+/**
+ * 用户信息采集Service接口
+ * 
+ * @author fs
+ * @date 2025-10-14
+ */
+public interface IFsUserInformationCollectionService extends IService<FsUserInformationCollection>{
+    /**
+     * 查询用户信息采集
+     * 
+     * @param id 用户信息采集主键
+     * @return 用户信息采集
+     */
+    FsUserInformationCollection selectFsUserInformationCollectionById(Long id);
+
+    /**
+     * 查询用户信息采集列表
+     * 
+     * @param fsUserInformationCollection 用户信息采集
+     * @return 用户信息采集集合
+     */
+    List<FsUserInformationCollection> selectFsUserInformationCollectionList(FsUserInformationCollection fsUserInformationCollection);
+
+    /**
+     * 新增用户信息采集
+     * 
+     * @param fsUserInformationCollection 用户信息采集
+     * @return 结果
+     */
+    int insertFsUserInformationCollection(FsUserInformationCollectionParam fsUserInformationCollection);
+
+    /**
+     * 修改用户信息采集
+     * 
+     * @param fsUserInformationCollection 用户信息采集
+     * @return 结果
+     */
+    int updateFsUserInformationCollection(FsUserInformationCollectionParam fsUserInformationCollection);
+
+    /**
+     * 批量删除用户信息采集
+     * 
+     * @param ids 需要删除的用户信息采集主键集合
+     * @return 结果
+     */
+    int deleteFsUserInformationCollectionByIds(Long[] ids);
+
+    /**
+     * 删除用户信息采集信息
+     * 
+     * @param id 用户信息采集主键
+     * @return 结果
+     */
+    int deleteFsUserInformationCollectionById(Long id);
+
+
+    FsUserInformationCollectionVO getInfo(FsUserInformationCollection fsUserInformationCollection);
+
+}

+ 9 - 8
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -952,7 +952,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                 //货到付款自定义金额 key改为id存储
                 BigDecimal amount = redisCache.getCacheObject("createOrderAmount:" + createOrderKey);
                 //redisCache.deleteObject("createOrderAmount:" + createOrderKey);
-                redisCache.setCacheObject("orderAmount:" + storeOrder.getId(), amount, 24, TimeUnit.HOURS);//物流代收自定义金额
+                redisCache.setCacheObject("orderAmount:" + storeOrder.getId(), amount, 120, TimeUnit.DAYS);//物流代收自定义金额
             } else {
                 if (StringUtils.isNotEmpty(createOrderKey)) {
                     if (config.getIsBrushOrders() == null || !(config.getIsBrushOrders() && param.getCompanyUserId() != null)) {//未开启刷单
@@ -1969,6 +1969,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         List<ErpOrderItem> details = new ArrayList<>();
         for (FsStoreOrderItemScrm orderItem : orderItems) {
             FsStoreCartDTO cartDTO = JSONUtil.toBean(orderItem.getJsonInfo(), FsStoreCartDTO.class);
+            logger.info("cartDTO=======================>:{}", cartDTO);
             //如果是组合码,查询出真实的商品数据 然后写入
             if (StringUtils.isNotEmpty(cartDTO.getGroupBarCode())) {
                 FsStoreProductGroupScrm group = storeProductGroupService.selectFsStoreProductGroupByBarCode(cartDTO.getGroupBarCode().trim());
@@ -2398,15 +2399,15 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
     public R createSalesOrder(CompanyUser companyUser, String cateIds, Integer orderType, Integer orderMedium) {
         List<FsStoreCartQueryVO> carts = cartMapper.selectFsStoreCartListByIds(cateIds);
         String uuid = IdUtil.randomUUID();
-        redisCache.setCacheObject("createOrderKey:" + uuid, companyUser.getCompanyId() + "-" + companyUser.getUserId(), 24, TimeUnit.HOURS);
-        redisCache.setCacheObject("orderCarts:" + uuid, carts, 24, TimeUnit.HOURS);
+        redisCache.setCacheObject("createOrderKey:" + uuid, companyUser.getCompanyId() + "-" + companyUser.getUserId(), 120, TimeUnit.DAYS);
+        redisCache.setCacheObject("orderCarts:" + uuid, carts, 120, TimeUnit.DAYS);
 
         //2025.7.23 倍力优需求 制单添加订单类型,媒体来源(非必填)
         if (orderType != null || orderMedium != null) {
             FsStoreOrderScrm fsStoreOrder = new FsStoreOrderScrm();
             fsStoreOrder.setOrderMedium(orderMedium);
             fsStoreOrder.setOrderType(orderType);
-            redisCache.setCacheObject("orderInfo:" + uuid, fsStoreOrder, 24, TimeUnit.HOURS);
+            redisCache.setCacheObject("orderInfo:" + uuid, fsStoreOrder, 120, TimeUnit.DAYS);
         }
 
         //计算总价
@@ -2414,7 +2415,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         for (FsStoreCartQueryVO vo : carts) {
             totalMoney = totalMoney.add(vo.getPrice().multiply(new BigDecimal(vo.getCartNum().toString())));
         }
-        redisCache.setCacheObject("createOrderMoney:" + uuid, totalMoney, 24, TimeUnit.HOURS);
+        redisCache.setCacheObject("createOrderMoney:" + uuid, totalMoney, 120, TimeUnit.DAYS);
         return R.ok().put("orderKey", uuid).put("carts", carts);
     }
 
@@ -2505,9 +2506,9 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                 throw new CustomException("价格必须大于商品总价" + config.getCreateMoneyRate() + "%", 501);
             }
         }
-        redisCache.setCacheObject("createOrderMoney:" + createOrderKey, money, 24, TimeUnit.HOURS);
-        redisCache.setCacheObject("createOrderAmount:" + createOrderKey, payAmount, 24, TimeUnit.HOURS);//物流代收自定义金额
-        redisCache.setCacheObject("createOrderPayType:" + createOrderKey, payType, 24, TimeUnit.HOURS);//支付类型 1-全付款 3-物流代收(货到付款)
+        redisCache.setCacheObject("createOrderMoney:" + createOrderKey, money, 120, TimeUnit.DAYS);
+        redisCache.setCacheObject("createOrderAmount:" + createOrderKey, payAmount, 120, TimeUnit.DAYS);//物流代收自定义金额
+        redisCache.setCacheObject("createOrderPayType:" + createOrderKey, payType, 120, TimeUnit.DAYS);//支付类型 1-全付款 3-物流代收(货到付款)
         return R.ok();
     }
 

+ 243 - 0
fs-service/src/main/java/com/fs/hisStore/service/impl/FsUserInformationCollectionServiceImpl.java

@@ -0,0 +1,243 @@
+package com.fs.hisStore.service.impl;
+
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.fs.common.BeanCopyUtils;
+import com.fs.common.exception.CustomException;
+import com.fs.common.utils.DateUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.company.domain.CompanyUser;
+import com.fs.company.mapper.CompanyUserMapper;
+import com.fs.his.domain.FsDoctor;
+import com.fs.his.mapper.FsDoctorMapper;
+import com.fs.his.service.IFsDoctorService;
+import com.fs.his.service.IFsQuestionAndAnswerService;
+import com.fs.his.vo.AnswerVO;
+import com.fs.his.vo.FsQuestionAndAnswerVO;
+import com.fs.hisStore.param.FsUserInformationCollectionParam;
+import com.fs.hisStore.vo.FsUserInformationCollectionVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.fs.hisStore.mapper.FsUserInformationCollectionMapper;
+import com.fs.hisStore.domain.FsUserInformationCollection;
+import com.fs.hisStore.service.IFsUserInformationCollectionService;
+import org.springframework.util.CollectionUtils;
+
+/**
+ * 用户信息采集Service业务层处理
+ * 
+ * @author fs
+ * @date 2025-10-14
+ */
+@Service
+public class FsUserInformationCollectionServiceImpl extends ServiceImpl<FsUserInformationCollectionMapper, FsUserInformationCollection> implements IFsUserInformationCollectionService {
+
+    @Autowired
+    private CompanyUserMapper companyUserMapper;
+
+    @Autowired
+    private FsDoctorMapper doctorMapper;
+
+    @Autowired
+    private IFsDoctorService iFsDoctorService;
+
+    @Autowired
+    private IFsQuestionAndAnswerService questionAndAnswerService;
+
+    /**
+     * 查询用户信息采集
+     * 
+     * @param id 用户信息采集主键
+     * @return 用户信息采集
+     */
+    @Override
+    public FsUserInformationCollection selectFsUserInformationCollectionById(Long id)
+    {
+        return baseMapper.selectFsUserInformationCollectionById(id);
+    }
+
+    /**
+     * 查询用户信息采集列表
+     * 
+     * @param fsUserInformationCollection 用户信息采集
+     * @return 用户信息采集
+     */
+    @Override
+    public List<FsUserInformationCollection> selectFsUserInformationCollectionList(FsUserInformationCollection fsUserInformationCollection)
+    {
+        return baseMapper.selectFsUserInformationCollectionList(fsUserInformationCollection);
+    }
+
+    /**
+     * 新增用户信息采集
+     * 
+     * @param param 用户信息采集
+     * @return 结果
+     */
+    @Override
+    public int insertFsUserInformationCollection(FsUserInformationCollectionParam param)
+    {
+
+        FsUserInformationCollection fsUserInformationCollection = getFsUserInformationCollection(param);
+        fsUserInformationCollection.setCreateTime(DateUtils.getNowDate());
+        return baseMapper.insertFsUserInformationCollection(fsUserInformationCollection);
+    }
+
+    /**
+     * 修改用户信息采集
+     * 
+     * @param param 用户信息采集
+     * @return 结果
+     */
+    @Override
+    public int updateFsUserInformationCollection(FsUserInformationCollectionParam param)
+    {
+        FsUserInformationCollection fsUserInformationCollection = getFsUserInformationCollection(param);
+        fsUserInformationCollection.setUpdateTime(DateUtils.getNowDate());
+        return baseMapper.updateFsUserInformationCollection(fsUserInformationCollection);
+    }
+
+    /**
+     * 批量删除用户信息采集
+     * 
+     * @param ids 需要删除的用户信息采集主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsUserInformationCollectionByIds(Long[] ids)
+    {
+        return baseMapper.deleteFsUserInformationCollectionByIds(ids);
+    }
+
+    /**
+     * 删除用户信息采集信息
+     * 
+     * @param id 用户信息采集主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsUserInformationCollectionById(Long id)
+    {
+        return baseMapper.deleteFsUserInformationCollectionById(id);
+    }
+
+    @Override
+    public FsUserInformationCollectionVO getInfo(FsUserInformationCollection map) {
+        FsUserInformationCollectionVO vo = new FsUserInformationCollectionVO();
+        Long userId = map.getUserId();
+        Long questionId = map.getQuestionId();
+        FsUserInformationCollection fsUserInformationCollection = baseMapper.selectByUserId(userId);
+        if (fsUserInformationCollection != null) {
+            vo.setQuestionId(fsUserInformationCollection.getQuestionId());
+            vo.setId(fsUserInformationCollection.getId());
+            vo.setAmount(fsUserInformationCollection.getAmount());
+            vo.setPackageId(fsUserInformationCollection.getPackageId());
+            vo.setPayType(fsUserInformationCollection.getPayType());
+            if (map.getQuestionId() == null) {
+                FsQuestionAndAnswerVO questionAndAnswerVO = questionAndAnswerService.selectFsQuestionAndAnswerById(fsUserInformationCollection.getQuestionId());
+                List<AnswerVO> answerVOS = JSON.parseArray(fsUserInformationCollection.getJsonInfo(), AnswerVO.class);
+                List<AnswerVO> collect = getAnswerVOs(answerVOS, questionAndAnswerVO.getAnswers());
+                vo.setAnswers(collect);
+            } else {
+                vo.setAnswers(JSON.parseArray(fsUserInformationCollection.getJsonInfo(), AnswerVO.class));
+            }
+        }
+        if (questionId != null) {
+            vo.setQuestionId(questionId);
+            //问答数据
+            FsQuestionAndAnswerVO questionAndAnswerVO = questionAndAnswerService.selectFsQuestionAndAnswerById(questionId);
+            if (questionAndAnswerVO != null) {
+                questionAndAnswerVO.getAnswers().forEach(answerVO -> {
+                    answerVO.setFlag(false);
+                });
+                if (fsUserInformationCollection != null) {
+                    vo.getAnswers().addAll(questionAndAnswerVO.getAnswers());
+                    vo.setAnswers(getAnswerVOs(vo.getAnswers(),questionAndAnswerVO.getAnswers()));
+                } else {
+                    //返回问答
+                    vo.setAnswers(questionAndAnswerVO.getAnswers());
+                }
+            }
+        }
+        if (ObjectUtil.isNotEmpty(vo.getAnswers())){
+            //有值且为true排前面
+            List<AnswerVO> collect = vo.getAnswers().stream()
+                    .sorted(Comparator.comparing(AnswerVO::getValue, Comparator.nullsFirst(Integer::compareTo)).reversed()).collect(Collectors.toList())
+                    .stream()
+                    .sorted((a,b)-> Boolean.compare(b.getFlag(),a.getFlag())).collect(Collectors.toList());
+            vo.setAnswers(collect);
+        }
+        return vo;
+    }
+
+    private List<AnswerVO> getAnswerVOs(List<AnswerVO> target,List<AnswerVO> source) {
+        target.addAll(source);
+        return target.stream()
+                .collect(Collectors.groupingBy(AnswerVO::getTitle))
+                .values().stream()
+                .map(group -> group.stream().reduce((a, b) -> a).orElse(null))
+                .collect(Collectors.toList());
+    }
+
+    private FsUserInformationCollection getFsUserInformationCollection(FsUserInformationCollectionParam param) {
+        FsUserInformationCollection fsUserInformationCollection = new FsUserInformationCollection();
+        if (!CollectionUtils.isEmpty(param.getAnswers())) {
+            param.getAnswers().forEach(answer -> {
+                if (answer.getFlag() == null) {
+                    answer.setFlag(false);
+                }
+            });
+        }
+        fsUserInformationCollection.setJsonInfo(JSON.toJSONString(param.getAnswers()));
+        fsUserInformationCollection.setUserId(param.getUserId());
+        fsUserInformationCollection.setCompanyUserId(param.getCompanyUserId());
+        fsUserInformationCollection.setQuestionId(param.getQuestionId());
+        fsUserInformationCollection.setId(param.getId());
+        fsUserInformationCollection.setPackageId(param.getPackageId());
+        fsUserInformationCollection.setPayType(param.getPayType());
+        fsUserInformationCollection.setAmount(param.getAmount());
+        //获取医生信息
+        CompanyUser companyUser = companyUserMapper.selectCompanyUserById(param.getCompanyUserId());
+        if (companyUser == null) {
+            throw new CustomException("销售不存在");
+        }
+        Long doctorId = null;
+        if (companyUser.getDoctorId() != null) {
+            FsDoctor doctor = doctorMapper.selectFsDoctorByDoctorId(companyUser.getDoctorId());
+            if (doctor != null) {
+                doctorId = doctor.getDoctorId();
+            }
+        } else {
+            //随机获取医生id
+            doctorId = iFsDoctorService.selectFsDoctorDoctorByPackage();
+        }
+        fsUserInformationCollection.setDoctorId(doctorId);
+
+        return fsUserInformationCollection;
+    }
+
+    public static void main(String[] args) {
+        String str1 = "[{\"options\":[{\"flag\":false,\"name\":\"通天\",\"value\":0},{\"flag\":false,\"name\":\"哈哈\",\"value\":1}],\"title\":\"测试标题1\",\"value\":1},{\"options\":[{\"flag\":false,\"name\":\"呼呼\",\"value\":0},{\"flag\":false,\"name\":\"嘻嘻\",\"value\":1}],\"title\":\"测试标题2\",\"value\":1},{\"options\":[{\"flag\":false,\"name\":\"胸痛\",\"value\":0},{\"flag\":false,\"name\":\"胸闷\",\"value\":1},{\"flag\":false,\"name\":\"头晕\",\"value\":2},{\"flag\":false,\"name\":\"肢体麻木\",\"value\":3},{\"flag\":false,\"name\":\"无\",\"value\":4}],\"title\":\"您目前是否有心脑血管相关症状,如胸痛、胸闷、头晕、肢体麻木等?\",\"value\":1}]";
+        String str2 = "[{\"options\":[{\"flag\":true,\"name\":\"胸痛\",\"value\":0},{\"flag\":true,\"name\":\"胸闷\",\"value\":1},{\"flag\":true,\"name\":\"头晕\",\"value\":2},{\"flag\":true,\"name\":\"肢体麻木\",\"value\":3},{\"flag\":true,\"name\":\"无\",\"value\":4}],\"title\":\"您目前是否有心脑血管相关症状,如胸痛、胸闷、头晕、肢体麻木等?\",\"value\":1},{\"options\":[{\"flag\":false,\"name\":\"胃疼\",\"value\":0},{\"flag\":false,\"name\":\"反酸\",\"value\":1},{\"flag\":false,\"name\":\"恶心\",\"value\":2},{\"flag\":false,\"name\":\"呕吐\",\"value\":3},{\"flag\":false,\"name\":\"黑便\",\"value\":4},{\"flag\":false,\"name\":\"无\",\"value\":5}],\"title\":\"您近期是否出现胃部不适症状,如胃痛、反酸、恶心、呕吐或黑便?\",\"value\":1}]";
+        List<AnswerVO> vo1 = null;
+        List<AnswerVO> vo2 = JSON.parseArray(str2, AnswerVO.class);
+        System.out.println(vo1);
+        System.out.println(vo2);
+        vo2.addAll(vo1);
+        Map<String, List<AnswerVO>> collect = vo2.stream()
+                .collect(Collectors.groupingBy(AnswerVO::getTitle));
+        List<AnswerVO> collect1 = vo2.stream()
+                .collect(Collectors.groupingBy(AnswerVO::getTitle))
+                .values().stream()
+                .map(group -> group.stream().reduce((a, b) -> a).orElse(null)).collect(Collectors.toList());
+        System.out.println(JSON.toJSONString(collect));
+        System.out.println(JSON.toJSONString(collect1));
+    }
+}

+ 27 - 0
fs-service/src/main/java/com/fs/hisStore/vo/FsUserInformationCollectionVO.java

@@ -0,0 +1,27 @@
+package com.fs.hisStore.vo;
+
+import com.fs.his.vo.AnswerVO;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class FsUserInformationCollectionVO {
+
+    private Long id;
+
+    private Long questionId;
+
+    //套餐包id
+    private Long packageId;
+
+    //支付类型 0-全款 1-物流代收
+    private Integer payType;
+
+    //代收金额
+    private BigDecimal amount;
+
+    private List<AnswerVO> answers;
+
+}

+ 13 - 0
fs-service/src/main/java/com/fs/huifuPay/domain/HuifuBusiOpen.java

@@ -0,0 +1,13 @@
+package com.fs.huifuPay.domain;
+
+import lombok.Data;
+
+@Data
+public class HuifuBusiOpen {
+
+    String reqSeqId;
+    String appId; //多小程序支付
+    //直属渠道商户号(云联融智)
+    String upperHuifuId = "6666000149540204";
+    String shortName;
+}

+ 15 - 0
fs-service/src/main/java/com/fs/huifuPay/domain/HuifuBusiOpenResult.java

@@ -0,0 +1,15 @@
+package com.fs.huifuPay.domain;
+
+import lombok.Data;
+
+@Data
+public class HuifuBusiOpenResult {
+
+    private String resp_code;
+
+    // 业务返回信息;示例值:查询成功
+    private String resp_desc;
+
+    // 汇付分配的商户号,示例值:6666000109812123
+    private String huifu_id;
+}

+ 33 - 0
fs-service/src/main/java/com/fs/huifuPay/domain/HuifuOrderConfirm.java

@@ -0,0 +1,33 @@
+package com.fs.huifuPay.domain;
+
+import lombok.Data;
+
+@Data
+public class HuifuOrderConfirm {
+    String reqSeqId;
+    //原交易流水号
+    String orgReqSeqId;
+    /**
+     * 交易类型:
+     * 原交易为快捷支付必填:QUICK_PAY;
+     * 原交易为余额支付必填:ACCT_PAYMENT;
+     * 原交易为全域资金必填:REMITTANCE_PAY;
+     */
+    String payType;
+
+    //其它分账金额
+    String divAmt;
+
+    //益寿缘分账金额
+    String ysyDivAmt;
+
+    //其它三个分账商户id
+    String divHuifuId;
+
+    //益寿缘分账商户id
+    String ysyHuifuId;
+
+    String orgReqDate;
+
+    String appId;
+}

+ 24 - 0
fs-service/src/main/java/com/fs/huifuPay/domain/HuifuOrderConfirmResult.java

@@ -0,0 +1,24 @@
+package com.fs.huifuPay.domain;
+
+import lombok.Data;
+
+@Data
+public class HuifuOrderConfirmResult {
+    // 响应码
+    private String resp_code;
+    // 响应描述
+    private String resp_desc;
+    // 交易状态
+    private String trans_stat;
+    // 汇付流水号
+    private String hf_seq_id;
+    //已确认总金额
+    private String confirmed_amt;
+    //待确认总金额
+    private String unconfirm_amt;
+
+    private String org_req_date;
+
+    private String org_req_seq_id;
+
+}

+ 12 - 1
fs-service/src/main/java/com/fs/huifuPay/sdk/opps/core/request/V2MerchantBusiOpenRequest.java

@@ -32,6 +32,12 @@ public class V2MerchantBusiOpenRequest extends BaseRequest {
     @JSONField(name = "upper_huifu_id")
     private String upperHuifuId;
 
+    /**
+     * 商户简称
+     */
+    @JSONField(name = "short_name")
+    private String shortName;
+
     @Override
     public FunctionCodeEnum getFunctionCode() {
         return FunctionCodeEnum.V2_MERCHANT_BUSI_OPEN;
@@ -40,11 +46,12 @@ public class V2MerchantBusiOpenRequest extends BaseRequest {
     public V2MerchantBusiOpenRequest() {
     }
 
-    public V2MerchantBusiOpenRequest(String reqSeqId, String reqDate, String huifuId, String upperHuifuId) {
+    public V2MerchantBusiOpenRequest(String reqSeqId, String reqDate, String huifuId, String upperHuifuId,String shortName) {
         this.reqSeqId = reqSeqId;
         this.reqDate = reqDate;
         this.huifuId = huifuId;
         this.upperHuifuId = upperHuifuId;
+        this.shortName = shortName;
     }
 
     public String getReqSeqId() {
@@ -79,4 +86,8 @@ public class V2MerchantBusiOpenRequest extends BaseRequest {
         this.upperHuifuId = upperHuifuId;
     }
 
+    public String getShortName() { return shortName; }
+
+    public void setShortName(String shortName) { this.shortName = shortName; }
+
 }

+ 31 - 1
fs-service/src/main/java/com/fs/huifuPay/sdk/opps/core/request/V2TradePaymentDelaytransConfirmRequest.java

@@ -27,6 +27,18 @@ public class V2TradePaymentDelaytransConfirmRequest extends BaseRequest {
     @JSONField(name = "huifu_id")
     private String huifuId;
 
+    /**
+     * 原交易请求流水号
+     */
+    @JSONField(name = "org_req_date")
+    private String orgReqDate;
+
+    /**
+     * 原交易商户订单号
+     */
+    @JSONField(name = "org_req_seq_id")
+    private String orgReqSeqId;
+
     @Override
     public FunctionCodeEnum getFunctionCode() {
         return FunctionCodeEnum.V2_TRADE_PAYMENT_DELAYTRANS_CONFIRM;
@@ -35,10 +47,12 @@ public class V2TradePaymentDelaytransConfirmRequest extends BaseRequest {
     public V2TradePaymentDelaytransConfirmRequest() {
     }
 
-    public V2TradePaymentDelaytransConfirmRequest(String reqDate, String reqSeqId, String huifuId) {
+    public V2TradePaymentDelaytransConfirmRequest(String reqDate, String reqSeqId, String huifuId,String orgReqDate,String orgReqSeqId) {
         this.reqDate = reqDate;
         this.reqSeqId = reqSeqId;
         this.huifuId = huifuId;
+        this.orgReqSeqId = orgReqSeqId;
+        this.orgReqDate = orgReqDate;
     }
 
     public String getReqDate() {
@@ -65,4 +79,20 @@ public class V2TradePaymentDelaytransConfirmRequest extends BaseRequest {
         this.huifuId = huifuId;
     }
 
+    public String getOrgReqDate() {
+        return orgReqDate;
+    }
+
+    public void setOrgReqDate(String orgReqDate) {
+        this.orgReqDate = orgReqDate;
+    }
+
+    public String getOrgReqSeqId() {
+        return orgReqSeqId;
+    }
+
+    public void setOrgReqSeqId(String orgReqSeqId) {
+        this.orgReqSeqId = orgReqSeqId;
+    }
+
 }

+ 5 - 0
fs-service/src/main/java/com/fs/huifuPay/service/HuiFuService.java

@@ -36,4 +36,9 @@ public interface HuiFuService {
     /**余额支付退款查询**/
     acctPayRefundQueryResult acctPayRefundQuery(V2TradeAcctpaymentRefundQueryRequest request)throws Exception;
 
+    /**商户业务开通**/
+    HuifuBusiOpenResult busiOpen(HuifuBusiOpen request);
+
+    /**交易确认**/
+    HuifuOrderConfirmResult confirmOrder(HuifuOrderConfirm request);
 }

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

@@ -1,6 +1,7 @@
 package com.fs.huifuPay.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.fs.common.exception.CustomException;
 import com.fs.common.utils.StringUtils;
@@ -71,10 +72,10 @@ public class HuiFuServiceImpl implements HuiFuService {
             extendInfoMap.put("time_expire", formattedTime);
             // 禁用信用卡标记
             extendInfoMap.put("limit_pay_type", "NO_CREDIT");
-            // 是否延迟交易
+            // 是否延迟交易 Y 为延迟 N为不延迟,不传默认N
             extendInfoMap.put("delay_acct_flag", "N");
             extendInfoMap.put("pay_scene", "02");
-            // 传入分帐遇到优惠的处理规则
+            // 传入分帐遇到优惠的处理规则 1: 按比例分,2: 按分账明细顺序保障,3: 只给交易商户(默认)
             extendInfoMap.put("term_div_coupon_type", "0");
             String appId = order.getAppId();
             if (StringUtils.isBlank(appId)){
@@ -270,21 +271,121 @@ public class HuiFuServiceImpl implements HuiFuService {
         return result;
     }
 
+    @Override
+    public HuifuBusiOpenResult busiOpen(HuifuBusiOpen open) {
+        logger.info("商户业务开通============>{}",open);
+        HuifuBusiOpenResult huifuBusiOpenResult = null;
+        try {
+
+            doInit(getMerConfig());
+
+            V2MerchantBusiOpenRequest request = new V2MerchantBusiOpenRequest();
+            request.setReqDate(DateTools.getCurrentDateYYYYMMDD());
+            request.setUpperHuifuId(open.getUpperHuifuId());
+            request.setReqSeqId(open.getReqSeqId());
+            request.setShortName(open.getShortName());
+            Map<String, Object> extendInfoMap = new HashMap<>();
+            extendInfoMap.put("delay_flag","Y");
+            //协议
+            JSONObject agreement_info = new JSONObject();
+            agreement_info.put("agreement_type","0");
+            extendInfoMap.put("agreement_info",agreement_info);
+            //签约人信息
+            JSONObject sign_user_info = new JSONObject();
+            sign_user_info.put("type","CONTACT");
+            sign_user_info.put("name","赵华宇");
+            sign_user_info.put("cert_no","130105198904252415");
+            sign_user_info.put("mobile_no","13147820150");
+            extendInfoMap.put("sign_user_info",sign_user_info);
+            request.setExtendInfo(extendInfoMap);
+            logger.info("商户开通业务传参:"+request);
+            Map<String, Object> response = doExecute(request);
+            logger.info("商户开通业务返回:"+response);
+            String jsonString = JSONObject.toJSONString(response);
+            logger.info("商户开通业务返回:"+jsonString);
+            huifuBusiOpenResult = JSON.parseObject(jsonString, HuifuBusiOpenResult.class);
+        } catch (Exception e) {
+            logger.info("商户开通业务失败 :"+e);
+            e.printStackTrace();
+            throw  new CustomException("商户开通业务失败");
+        }
+        return huifuBusiOpenResult;
+    }
+
+    @Override
+    public HuifuOrderConfirmResult confirmOrder(HuifuOrderConfirm confirm) {
+        logger.info("交易确认传参============>{}",confirm);
+        HuifuOrderConfirmResult huifuOrderConfirmResult = null;
+        try {
+            if (confirm.getAppId() != null) {
+                FsHfpayConfigMapper fsHfpayConfigMapper = SpringUtils.getBean(FsHfpayConfigMapper.class);
+                FsHfpayConfig fsHfpayConfig = fsHfpayConfigMapper.selectByAppId(confirm.getAppId());
+                if (fsHfpayConfig != null) {
+                    //多汇付支付获取配置
+                    doInit(getMerConfig(fsHfpayConfig));
+                } else {
+                    //多小程序
+                    doInit(getMerConfig());
+                }
+            } else {
+                doInit(getMerConfig());
+            }
+            V2TradePaymentDelaytransConfirmRequest request = new V2TradePaymentDelaytransConfirmRequest();
+            request.setReqDate(DateTools.getCurrentDateYYYYMMDD());
+            request.setReqSeqId(confirm.getReqSeqId());
+            request.setOrgReqSeqId(confirm.getOrgReqSeqId());
+            request.setOrgReqDate(confirm.getOrgReqDate());
+            Map<String, Object> extendInfoMap = new HashMap<>();
+            //分账对象
+
+            JSONObject acct_split_bunch = new JSONObject();
+            //其它三个分账信息(随机获取一个)
+            JSONArray acct_infos = new JSONArray();
+            JSONObject acct_other = new JSONObject();
+            acct_other.put("huifu_id",confirm.getDivHuifuId());
+            acct_other.put("div_amt",confirm.getDivAmt());
+
+            JSONObject acct_ysy = new JSONObject();
+            acct_ysy.put("huifu_id",confirm.getYsyHuifuId());
+            acct_ysy.put("div_amt",confirm.getYsyDivAmt());
+            acct_infos.add(acct_other);
+            acct_infos.add(acct_ysy);
+            acct_split_bunch.put("acct_infos",acct_infos);
+
+            extendInfoMap.put("acct_split_bunch",acct_split_bunch);
+            logger.info("交易确认传参:"+request);
+            request.setExtendInfo(extendInfoMap);
+            Map<String, Object> response = doExecute(request);
+            logger.info("交易确认返回:"+response);
+            String jsonString = JSONObject.toJSONString(response);
+            logger.info("交易确认返回:"+jsonString);
+            huifuOrderConfirmResult = JSON.parseObject(jsonString, HuifuOrderConfirmResult.class);
+        }catch (Exception e){
+            logger.info("交易确认失败 :"+e);
+            throw  new CustomException("交易确认失败");
+        }
+        return huifuOrderConfirmResult;
+    }
+
 
     public MerConfig getMerConfig(){
         SysConfigMapper sysConfigMapper= SpringUtils.getBean(SysConfigMapper.class);
         SysConfig sysConfig = sysConfigMapper.selectConfigByConfigKey("his.pay");
         FsPayConfig fsPayConfig = new Gson().fromJson(sysConfig.getConfigValue(), FsPayConfig.class);
+
 //        FsPayConfig fsPayConfig = new FsPayConfig();
-//        fsPayConfig.setAppId("wxc3f0a952b7bc2b94");
+//        fsPayConfig.setAppId("wx646836bf3f7d4227");
 //        fsPayConfig.setHfProductId("KAZX");
-//        fsPayConfig.setHfSysId("6666000149635112");
-//        fsPayConfig.setHuifuId("6666000149635112");
-//        fsPayConfig.setHfRsaPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCijLcYLMJEe16TS6BtEG9hUezZyYvp2qgpPVGWaaBbb6lud89ILMUC7jyTWufCo2fUQ0nJzYhVlNeMzmGFtg/zFwhkjJIkuCOW+/Koy1ow66Rom8/sNQLb82szHoeklbv17AnD7WJis7cGyy1+3E6jzfaPOB7PTzidK6KyfCWDByOt0JcGe3+6+9+loQFbFRXJ2RpWPQeN72n9FVtSKSvgkGtJNUzh/qBwMPN6ol6xcU/Z2o1sYrRfKC4tcMqccRi/DvvZFJPVlN+YqkJ6lhgAmJg7eZ2fhIgrmzqc96UKp2YUNm+1v8XHCflD9Wv94E6D2JgL4VbF4Zyf+fKYuR7pAgMBAAECggEAfy5UL6ENmuFgHSVF7y+1xdKA2+IbC60ed63XgTVB12jli15Im3MT7ngSg0TUIvERUv4W5MNgkX10rWHo4eKSViPGWE24JuzAQ+j7cuAwwCgPKh4HMAxGIWwyivuvK7JQL1kwRtEccpekc7dS8HhVO0rySBqj2JZmeGrk0HvcKciSWuMjhjT4dJUwSntD07REV6rVjrpQXuvmY40vH88uvHLdH1IcjmJs2yJRNawUNtd+8FvpOCjami7zpB+er+AQ6S2fvpljNqfE5Kadm3MvzBngDdMS3xRvMHfjCifVwFpLP0rLDP6cSn6PJWbkNYQVZi12w8+wb5f7AVlaKXnfdQKBgQDh7VC5+MOqfcUr9h/n2vhFFhQOaGAZCOBc65n8VBj9aRht8ViXFvRrIRmM+QvUbV9/7taFbtAnZXIzu+12T4vnlZv9DTsy6kKloV5923xZ4CpzIVG8crlwJz1wdALeO6M485RtRLjz6nlNKn2m2VJ1d5XFBDhIz5rWUzagPwwpwwKBgQC4L8Eyu6Yn/zQmv8l6rfAsEfUJzfYtojf1PerPYilARtgFuD20cppcOP5oAk2TTX3qaz0Y9atCfL2z2qxtrgKtw2etfhDBmT6l6+pg04SLuyTrVeZ5dxXHt+LRLJnvBbGgnvAM6rSRKdHXT0gfqiRIMw2qIUtndgRr4RK5hqcd4wKBgBYBFh620t/VFhIdC6h6VDnuV4+7rLhje+6w57OCwVhVFxMGMZmtm6qfc6yeSP+sk2OTcINYcp+TqtbNE+i1AKxSjvnLgxuHY2xcViat7OOYCKpj8WEIT3VT7RD5y5m3d0NBvhASZG0lRiE05T4N5pEYT5b7vTuiNLNxMV3UJiwfAoGBAIb2/1QEqwmN+RIX4TSTNnWkpvELSkRAJU8Akwpp/J5MC0mNqzGJ9NB1Nv7SCTRSSV04PaoHgvoSXBPpvgYUx4O6t0MrKG4ktAJzL+jJtcuKU9Bavqrs9znE5mCulRHQE0wGixJ7/dqNUWW7g7coPrPlLTMoeI+UrEK8x7LJF7ZPAoGALHvtu6zzWVeCdELIPUTersVQrH1R3yZuf6rgubg4XFw3meFcd4W8BvXm4EKGRZxdiyZvCtKlkV9u110Rx3RNSbZCOb3MClmkcow8vPIhmyGWIGymAIxr9JcD0p6HogzPvbjRsLh1nFg/+95OL2E353Bp4/oPIgYIfnYNUfD+0gA=");
-//        fsPayConfig.setHfRsaPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjbkiiy2ewzuPsM5uZbAFMJOBWCRRQ2RtH7Dbr9Evbow6IEyvGoen8XKpiuXzapeps3b2eogETHVFQtLooqRHpVRppFKtU1AHZXA7C6wPocfMldJbTykDCowyJwOSYEaFPBjr9cw6dQcBJMIEHj0YWjBPR1dPVzf+y4sUohbrkS/FANBpp24j+Mu0qEqh8TuVuKlvig7jbmXJiJkAmUJ+Tb3Caj20fFTen6juPd3zR/KM3twki06wZZbb4KyCiM/NwozEqJ9PkWSs6rG7aW+BEfzlo3m1a7MlL0vpKNR3f0lbywq09rFAwtA7R2lssWwLMma4LOqtMMqo3yZdv4vObQIDAQAB");
-//        fsPayConfig.setHfRsaPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCijLcYLMJEe16TS6BtEG9hUezZyYvp2qgpPVGWaaBbb6lud89ILMUC7jyTWufCo2fUQ0nJzYhVlNeMzmGFtg/zFwhkjJIkuCOW+/Koy1ow66Rom8/sNQLb82szHoeklbv17AnD7WJis7cGyy1+3E6jzfaPOB7PTzidK6KyfCWDByOt0JcGe3+6+9+loQFbFRXJ2RpWPQeN72n9FVtSKSvgkGtJNUzh/qBwMPN6ol6xcU/Z2o1sYrRfKC4tcMqccRi/DvvZFJPVlN+YqkJ6lhgAmJg7eZ2fhIgrmzqc96UKp2YUNm+1v8XHCflD9Wv94E6D2JgL4VbF4Zyf+fKYuR7pAgMBAAECggEAfy5UL6ENmuFgHSVF7y+1xdKA2+IbC60ed63XgTVB12jli15Im3MT7ngSg0TUIvERUv4W5MNgkX10rWHo4eKSViPGWE24JuzAQ+j7cuAwwCgPKh4HMAxGIWwyivuvK7JQL1kwRtEccpekc7dS8HhVO0rySBqj2JZmeGrk0HvcKciSWuMjhjT4dJUwSntD07REV6rVjrpQXuvmY40vH88uvHLdH1IcjmJs2yJRNawUNtd+8FvpOCjami7zpB+er+AQ6S2fvpljNqfE5Kadm3MvzBngDdMS3xRvMHfjCifVwFpLP0rLDP6cSn6PJWbkNYQVZi12w8+wb5f7AVlaKXnfdQKBgQDh7VC5+MOqfcUr9h/n2vhFFhQOaGAZCOBc65n8VBj9aRht8ViXFvRrIRmM+QvUbV9/7taFbtAnZXIzu+12T4vnlZv9DTsy6kKloV5923xZ4CpzIVG8crlwJz1wdALeO6M485RtRLjz6nlNKn2m2VJ1d5XFBDhIz5rWUzagPwwpwwKBgQC4L8Eyu6Yn/zQmv8l6rfAsEfUJzfYtojf1PerPYilARtgFuD20cppcOP5oAk2TTX3qaz0Y9atCfL2z2qxtrgKtw2etfhDBmT6l6+pg04SLuyTrVeZ5dxXHt+LRLJnvBbGgnvAM6rSRKdHXT0gfqiRIMw2qIUtndgRr4RK5hqcd4wKBgBYBFh620t/VFhIdC6h6VDnuV4+7rLhje+6w57OCwVhVFxMGMZmtm6qfc6yeSP+sk2OTcINYcp+TqtbNE+i1AKxSjvnLgxuHY2xcViat7OOYCKpj8WEIT3VT7RD5y5m3d0NBvhASZG0lRiE05T4N5pEYT5b7vTuiNLNxMV3UJiwfAoGBAIb2/1QEqwmN+RIX4TSTNnWkpvELSkRAJU8Akwpp/J5MC0mNqzGJ9NB1Nv7SCTRSSV04PaoHgvoSXBPpvgYUx4O6t0MrKG4ktAJzL+jJtcuKU9Bavqrs9znE5mCulRHQE0wGixJ7/dqNUWW7g7coPrPlLTMoeI+UrEK8x7LJF7ZPAoGALHvtu6zzWVeCdELIPUTersVQrH1R3yZuf6rgubg4XFw3meFcd4W8BvXm4EKGRZxdiyZvCtKlkV9u110Rx3RNSbZCOb3MClmkcow8vPIhmyGWIGymAIxr9JcD0p6HogzPvbjRsLh1nFg/+95OL2E353Bp4/oPIgYIfnYNUfD+0gA=");
-//        fsPayConfig.setHfRsaPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjbkiiy2ewzuPsM5uZbAFMJOBWCRRQ2RtH7Dbr9Evbow6IEyvGoen8XKpiuXzapeps3b2eogETHVFQtLooqRHpVRppFKtU1AHZXA7C6wPocfMldJbTykDCowyJwOSYEaFPBjr9cw6dQcBJMIEHj0YWjBPR1dPVzf+y4sUohbrkS/FANBpp24j+Mu0qEqh8TuVuKlvig7jbmXJiJkAmUJ+Tb3Caj20fFTen6juPd3zR/KM3twki06wZZbb4KyCiM/NwozEqJ9PkWSs6rG7aW+BEfzlo3m1a7MlL0vpKNR3f0lbywq09rFAwtA7R2lssWwLMma4LOqtMMqo3yZdv4vObQIDAQAB");
-//        fsPayConfig.setHfPayOnlineNotifyUrl("https://userapp.his.cdwjyyh.com//app/hfPay/payNotifyUrl");
+//        fsPayConfig.setHfSysId("6666000175632107");
+//        fsPayConfig.setHuifuId("6666000175632107");
+        //fsPayConfig.setHfRsaPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCijLcYLMJEe16TS6BtEG9hUezZyYvp2qgpPVGWaaBbb6lud89ILMUC7jyTWufCo2fUQ0nJzYhVlNeMzmGFtg/zFwhkjJIkuCOW+/Koy1ow66Rom8/sNQLb82szHoeklbv17AnD7WJis7cGyy1+3E6jzfaPOB7PTzidK6KyfCWDByOt0JcGe3+6+9+loQFbFRXJ2RpWPQeN72n9FVtSKSvgkGtJNUzh/qBwMPN6ol6xcU/Z2o1sYrRfKC4tcMqccRi/DvvZFJPVlN+YqkJ6lhgAmJg7eZ2fhIgrmzqc96UKp2YUNm+1v8XHCflD9Wv94E6D2JgL4VbF4Zyf+fKYuR7pAgMBAAECggEAfy5UL6ENmuFgHSVF7y+1xdKA2+IbC60ed63XgTVB12jli15Im3MT7ngSg0TUIvERUv4W5MNgkX10rWHo4eKSViPGWE24JuzAQ+j7cuAwwCgPKh4HMAxGIWwyivuvK7JQL1kwRtEccpekc7dS8HhVO0rySBqj2JZmeGrk0HvcKciSWuMjhjT4dJUwSntD07REV6rVjrpQXuvmY40vH88uvHLdH1IcjmJs2yJRNawUNtd+8FvpOCjami7zpB+er+AQ6S2fvpljNqfE5Kadm3MvzBngDdMS3xRvMHfjCifVwFpLP0rLDP6cSn6PJWbkNYQVZi12w8+wb5f7AVlaKXnfdQKBgQDh7VC5+MOqfcUr9h/n2vhFFhQOaGAZCOBc65n8VBj9aRht8ViXFvRrIRmM+QvUbV9/7taFbtAnZXIzu+12T4vnlZv9DTsy6kKloV5923xZ4CpzIVG8crlwJz1wdALeO6M485RtRLjz6nlNKn2m2VJ1d5XFBDhIz5rWUzagPwwpwwKBgQC4L8Eyu6Yn/zQmv8l6rfAsEfUJzfYtojf1PerPYilARtgFuD20cppcOP5oAk2TTX3qaz0Y9atCfL2z2qxtrgKtw2etfhDBmT6l6+pg04SLuyTrVeZ5dxXHt+LRLJnvBbGgnvAM6rSRKdHXT0gfqiRIMw2qIUtndgRr4RK5hqcd4wKBgBYBFh620t/VFhIdC6h6VDnuV4+7rLhje+6w57OCwVhVFxMGMZmtm6qfc6yeSP+sk2OTcINYcp+TqtbNE+i1AKxSjvnLgxuHY2xcViat7OOYCKpj8WEIT3VT7RD5y5m3d0NBvhASZG0lRiE05T4N5pEYT5b7vTuiNLNxMV3UJiwfAoGBAIb2/1QEqwmN+RIX4TSTNnWkpvELSkRAJU8Akwpp/J5MC0mNqzGJ9NB1Nv7SCTRSSV04PaoHgvoSXBPpvgYUx4O6t0MrKG4ktAJzL+jJtcuKU9Bavqrs9znE5mCulRHQE0wGixJ7/dqNUWW7g7coPrPlLTMoeI+UrEK8x7LJF7ZPAoGALHvtu6zzWVeCdELIPUTersVQrH1R3yZuf6rgubg4XFw3meFcd4W8BvXm4EKGRZxdiyZvCtKlkV9u110Rx3RNSbZCOb3MClmkcow8vPIhmyGWIGymAIxr9JcD0p6HogzPvbjRsLh1nFg/+95OL2E353Bp4/oPIgYIfnYNUfD+0gA=");
+        //fsPayConfig.setHfRsaPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjbkiiy2ewzuPsM5uZbAFMJOBWCRRQ2RtH7Dbr9Evbow6IEyvGoen8XKpiuXzapeps3b2eogETHVFQtLooqRHpVRppFKtU1AHZXA7C6wPocfMldJbTykDCowyJwOSYEaFPBjr9cw6dQcBJMIEHj0YWjBPR1dPVzf+y4sUohbrkS/FANBpp24j+Mu0qEqh8TuVuKlvig7jbmXJiJkAmUJ+Tb3Caj20fFTen6juPd3zR/KM3twki06wZZbb4KyCiM/NwozEqJ9PkWSs6rG7aW+BEfzlo3m1a7MlL0vpKNR3f0lbywq09rFAwtA7R2lssWwLMma4LOqtMMqo3yZdv4vObQIDAQAB");
+        //fsPayConfig.setHfRsaPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCijLcYLMJEe16TS6BtEG9hUezZyYvp2qgpPVGWaaBbb6lud89ILMUC7jyTWufCo2fUQ0nJzYhVlNeMzmGFtg/zFwhkjJIkuCOW+/Koy1ow66Rom8/sNQLb82szHoeklbv17AnD7WJis7cGyy1+3E6jzfaPOB7PTzidK6KyfCWDByOt0JcGe3+6+9+loQFbFRXJ2RpWPQeN72n9FVtSKSvgkGtJNUzh/qBwMPN6ol6xcU/Z2o1sYrRfKC4tcMqccRi/DvvZFJPVlN+YqkJ6lhgAmJg7eZ2fhIgrmzqc96UKp2YUNm+1v8XHCflD9Wv94E6D2JgL4VbF4Zyf+fKYuR7pAgMBAAECggEAfy5UL6ENmuFgHSVF7y+1xdKA2+IbC60ed63XgTVB12jli15Im3MT7ngSg0TUIvERUv4W5MNgkX10rWHo4eKSViPGWE24JuzAQ+j7cuAwwCgPKh4HMAxGIWwyivuvK7JQL1kwRtEccpekc7dS8HhVO0rySBqj2JZmeGrk0HvcKciSWuMjhjT4dJUwSntD07REV6rVjrpQXuvmY40vH88uvHLdH1IcjmJs2yJRNawUNtd+8FvpOCjami7zpB+er+AQ6S2fvpljNqfE5Kadm3MvzBngDdMS3xRvMHfjCifVwFpLP0rLDP6cSn6PJWbkNYQVZi12w8+wb5f7AVlaKXnfdQKBgQDh7VC5+MOqfcUr9h/n2vhFFhQOaGAZCOBc65n8VBj9aRht8ViXFvRrIRmM+QvUbV9/7taFbtAnZXIzu+12T4vnlZv9DTsy6kKloV5923xZ4CpzIVG8crlwJz1wdALeO6M485RtRLjz6nlNKn2m2VJ1d5XFBDhIz5rWUzagPwwpwwKBgQC4L8Eyu6Yn/zQmv8l6rfAsEfUJzfYtojf1PerPYilARtgFuD20cppcOP5oAk2TTX3qaz0Y9atCfL2z2qxtrgKtw2etfhDBmT6l6+pg04SLuyTrVeZ5dxXHt+LRLJnvBbGgnvAM6rSRKdHXT0gfqiRIMw2qIUtndgRr4RK5hqcd4wKBgBYBFh620t/VFhIdC6h6VDnuV4+7rLhje+6w57OCwVhVFxMGMZmtm6qfc6yeSP+sk2OTcINYcp+TqtbNE+i1AKxSjvnLgxuHY2xcViat7OOYCKpj8WEIT3VT7RD5y5m3d0NBvhASZG0lRiE05T4N5pEYT5b7vTuiNLNxMV3UJiwfAoGBAIb2/1QEqwmN+RIX4TSTNnWkpvELSkRAJU8Akwpp/J5MC0mNqzGJ9NB1Nv7SCTRSSV04PaoHgvoSXBPpvgYUx4O6t0MrKG4ktAJzL+jJtcuKU9Bavqrs9znE5mCulRHQE0wGixJ7/dqNUWW7g7coPrPlLTMoeI+UrEK8x7LJF7ZPAoGALHvtu6zzWVeCdELIPUTersVQrH1R3yZuf6rgubg4XFw3meFcd4W8BvXm4EKGRZxdiyZvCtKlkV9u110Rx3RNSbZCOb3MClmkcow8vPIhmyGWIGymAIxr9JcD0p6HogzPvbjRsLh1nFg/+95OL2E353Bp4/oPIgYIfnYNUfD+0gA=");
+        //fsPayConfig.setHfRsaPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjbkiiy2ewzuPsM5uZbAFMJOBWCRRQ2RtH7Dbr9Evbow6IEyvGoen8XKpiuXzapeps3b2eogETHVFQtLooqRHpVRppFKtU1AHZXA7C6wPocfMldJbTykDCowyJwOSYEaFPBjr9cw6dQcBJMIEHj0YWjBPR1dPVzf+y4sUohbrkS/FANBpp24j+Mu0qEqh8TuVuKlvig7jbmXJiJkAmUJ+Tb3Caj20fFTen6juPd3zR/KM3twki06wZZbb4KyCiM/NwozEqJ9PkWSs6rG7aW+BEfzlo3m1a7MlL0vpKNR3f0lbywq09rFAwtA7R2lssWwLMma4LOqtMMqo3yZdv4vObQIDAQAB");
+        //fsPayConfig.setHfPayOnlineNotifyUrl("https://userapp.ysya.top/app/hfPay/payNotifyUrl");
+        //fsPayConfig.setHfRsaPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCOLOsfdbmB5qe7HTwbpxNQW0+5O6+im/7x+ZOBCf30FftYYRvnzbcsbvdBZa7745d7OgMB9Drd6vWah5Xp4uGf+tZOwGMHm6C8lphswJp3d1vPARuZulw4WSaIm+b8M2zEg+IMZiGhFC+H6fjtQm2jBz+Szvfa+MPwOzdJNcczpv56dujjz3G8Pf5aizZWjz5ovuWSSwdnmP8OAPBYhQaaBF4JyrIv5s89Vm+xIVlvvMcTo8uNf7HbKgUR27fjxyTtcJAlZUc/7XuBxNXTknxP1taiJU4XXeNpsPnLq31KwCsacPFZ5/QHvgkaDFjmImWaHUESMAFT/bkZvbV+PJvXAgMBAAECggEAYenRa3MZ9Loy3Yw+rxSbGoYoG3tdc/FW3LJywTVubcENvknye+uSsMkjAyjSH6sX0ceb9qaKO/bqeifSOKcFl7WaDdY03TJyui5EfvEN8CSFV8R9i5tqk2viO8aShzGrQJNLBBr6IgLS0RlzU4KiGtqND7/1thoIZtOBOawNqiXarFQo7i5DpsV6cZhw5Pk/JP5eQMhcVnyDmjYSKIcbCtkOmYHgxjXt79JnJBrwhHQ3gmdFO43XtuH+LPtg7tsvLetwIX1s5KdGJqXuDwFa/grFpTVa/oHZ0vebdHyNKn2WFbXEuGZP+GsudOEMRYIpyyPIJEzHmlXJs5SbYeLgUQKBgQDHEPUfOiqFg2APYtSFH751tPRRpqI0RZf9D3c/OEUXBCAEbVFocIPVexk+HNS3MXkzxTHS+ULRSCnmaSMKIcjJgX8ekatwNKzUbnXT9R4w2hSqp0vI1o9pNASe5dLQAKnp9WzyXAYeRxflQ+wb/d4xfwn4oqxti66TMBkhYpPY7QKBgQC21pYNZVADjQWKMVvbqqvHec22iTCpqmwJtD90Ze3DLI0SjJnPSeSRkMb71wNQYITH6pdFqw5KpdgxuQlefA6is3mSQ+Ovk+bCG84Ii5b2SAVUfUnknJA4OnPKn9TJs0C8BtpN7wQDKI2wTw5GGqdsDu2ly9ZpZRv/b/oM0/yDUwKBgAIINUhdUqPMRIXDr4GwYkRXVYsj1VINR9DogIIfs+zZOO5yozsasu3R9N8CclVwZtlVcP3DV6BFSVA10IrA74jHDqIkQIjDsOP2QLOqM+WxxDY9wPNK5Wnggw+QLwe6igF+ZN9QeyuB9Ed92wIqJEODFXn5RyNTIrQT8J27oOC9AoGBAIdedRZR7l3SqUlZphMLV8eGrQH6rObRYNAGffymAtVAROp44uAQa4RC1rBazv9Rlr2VOI7CSQCHrXuS7hbgbs2TZ+0dCpRSQsVwZKj7ALgzNo8JfA4gxL58uIJKt/bmGoWb5UFSN3xHKDBjN8Q7s71TiCv6sTKzQ3lp5I5e3VQ1AoGANS1iuylO0EAm5EmbzOLgHDa+qptG9pkG3eiEFO0IDXKc1Kd6haJkQJH6phePg1L6X7X/zEPuVW9EuUUWmICxRcVLlqGfuj4CAq/x8JEbpizMyD8hM+8DgnwWOHc3OY8OxgooNwlvf+zn5rLY3LkpTnPJL/AdRyQRlKaO7Jqqpc0=");
+        //fsPayConfig.setHfRsaPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnv5W7Fwgxe6VIEAmT0scdRAv7ZjzmaRLIcsUuwwI1/1HDDfBk3oyYsPHTpsP5BpdceKfcNkowmLE4RDnTHjdGe6qWFCp/R18oKiASp/4kqeA1NYycP3Vu4AQZKMJCpqmWEwYBUl6Js033MQd575C10zdzTexvA0lggMFoM5toI13cvPD58dYqGFzmNUsv5IfUfdRmj0ul4etFpgWYSpHPWlWMV2TpR+HhrDf8/hqqYgUn1lsvFlLzeC7LyhpahgXmXv6FdJFEAQ95EsvD8OpgzRyPxpkBwHh5ogsldi+9sWYDnT2/w/fuGVELpXO3otJ1JuROyuOPx23A2aoTBnTTQIDAQAB");
+
         config=fsPayConfig;
         MerConfig merConfig = new MerConfig();
         merConfig.setProcutId(fsPayConfig.getHfProductId());

+ 35 - 9
fs-service/src/main/java/com/fs/huifuPay/service/test.java

@@ -2,8 +2,10 @@ package com.fs.huifuPay.service;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.fs.common.OrderUtils;
 import com.fs.huifuPay.domain.*;
 import com.fs.huifuPay.sdk.opps.core.request.*;
+import com.fs.huifuPay.sdk.opps.core.utils.DateTools;
 import com.fs.huifuPay.service.impl.HuiFuServiceImpl;
 import java.util.HashMap;
 import java.util.Map;
@@ -13,14 +15,38 @@ public class test {
     public static void main(String[] args)throws Exception {
 //        onlinePay();
         refund();
+       // busiOpen();
+        //confirmOrder();
+        //createOrder();
+        //queryOrder();
+    }
+
+    public static void  confirmOrder(){
+        HuifuOrderConfirm confirm = new HuifuOrderConfirm();
+        String orderNo = OrderUtils.getOrderNo();
+        confirm.setReqSeqId(orderNo);
+        confirm.setOrgReqSeqId("package-1976839880096874496");
+        confirm.setOrgReqDate(DateTools.getCurrentDateYYYYMMDD());
+        confirm.setDivAmt("0.01");
+        HuifuOrderConfirmResult result = huiFuService.confirmOrder(confirm);
+        System.out.println(result);
+    }
+    public static void  busiOpen(){
+        HuifuBusiOpen open = new HuifuBusiOpen();
+        open.setShortName("沈阳久运天天好大药房有限公司");
+        String orderNo = OrderUtils.getOrderNo();
+        open.setReqSeqId(orderNo);
+        HuifuBusiOpenResult result = huiFuService.busiOpen(open);
+        System.out.println(result);
+
     }
     public static void  createOrder()throws Exception {
         HuiFuCreateOrder order = new HuiFuCreateOrder();
         //    T_MINIAPP: 微信小程序
         //    A_NATIVE: 支付宝正扫
-        order.setTradeType("A_NATIVE");
+        order.setTradeType("T_MINIAPP");
        order.setOpenid("oCtcH7pwOWlPMBJJyQQQz32qq2og");
-        order.setReqSeqId("inquiry-117");
+        order.setReqSeqId("inquiry-131");
         order.setTransAmt("0.01");
         // 商品描述
         order.setGoodsDesc("hibs自动化-通用版验证");
@@ -30,10 +56,10 @@ public class test {
     public static void  queryOrder()throws Exception {
         V2TradePaymentScanpayQueryRequest request = new V2TradePaymentScanpayQueryRequest();
         //日期必须正确
-         request.setOrgReqDate("20251001");
+         request.setOrgReqDate("20251016");
         //选其一
-         request.setOrgHfSeqId("002900TOP2B251001170536P200ac139d2c00000");
-       //  request.setOrgReqSeqId("store-1973313179081506816");
+        // request.setOrgHfSeqId("002900TOP2B251001170536P200ac139d2c00000");
+         request.setOrgReqSeqId("package-1978809332086603776");
         HuiFuQueryOrderResult result = huiFuService.queryOrder(request);
         System.out.println(result);
     }
@@ -50,13 +76,13 @@ public class test {
 
     public static void  refund()throws Exception {
         V2TradePaymentScanpayRefundRequest request = new V2TradePaymentScanpayRefundRequest();
-        request.setOrdAmt("490.00");
+        request.setOrdAmt("2370.00");
         //订单创建日期
-        request.setOrgReqDate("20251001");
+        request.setOrgReqDate("20251016");
         //退款单号
-        request.setReqSeqId("package-1973323805363273728");
+        request.setReqSeqId("package-1978809332086603776");
         Map<String, Object> extendInfoMap = new HashMap<>();
-        extendInfoMap.put("org_req_seq_id", "package-1973323805363273728");
+        extendInfoMap.put("org_req_seq_id", "package-1978809332086603776");
         request.setExtendInfo(extendInfoMap);
         HuiFuRefundResult refund = huiFuService.refund(request);
         System.out.println(refund);

+ 3 - 1
fs-service/src/main/java/com/fs/qw/service/impl/QwExternalContactServiceImpl.java

@@ -1049,6 +1049,8 @@ public class QwExternalContactServiceImpl extends ServiceImpl<QwExternalContactM
                     } else {
                         qwExternalContactMapper.insertQwExternalContact(qwExternalContact);
                     }
+
+                    logger.info("同步一个客户");
                 }
 
             }else {
@@ -4785,7 +4787,7 @@ public class QwExternalContactServiceImpl extends ServiceImpl<QwExternalContactM
         for (QwOptionsVO qwOptionsVO : qwOptionsVOS) {
             String corpId = qwOptionsVO.getCorpId();
 //            System.out.println("同步的"+corpId);
-//            logger.info("同步的"+corpId);
+            logger.info("同步的"+corpId);
             executor.execute(() ->  qwExternalContactSyncByCorpId(corpId));
         }
         executor.shutdown();

+ 4 - 0
fs-service/src/main/resources/mapper/his/FsStoreOrderMapper.xml

@@ -91,6 +91,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="billPrice"    column="bill_price"    />
         <result property="erpPhone"    column="erp_phone"    />
         <result property="orderKey"    column="order_key"    />
+        <result property="isMerge"    column="is_merge"    />
     </resultMap>
 
     <sql id="selectFsStoreOrderVo">
@@ -234,6 +235,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="source != null">source,</if>
             <if test="erpPhone != null">erp_phone,</if>
             <if test="orderKey != null">order_key,</if>
+            <if test="isMerge != null">is_merge,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="storeId != null">#{storeId},</if>
@@ -320,6 +322,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="source != null">#{source},</if>
             <if test="erpPhone != null">#{erpPhone},</if>
             <if test="orderKey != null">#{orderKey},</if>
+            <if test="isMerge != null">#{isMerge},</if>
          </trim>
     </insert>
 
@@ -411,6 +414,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="billPrice != null">bill_price = #{billPrice},</if>
             <if test="erpPhone != null and erpPhone != ''">erp_phone = #{erpPhone},</if>
             <if test="orderKey != null and orderKey != ''">order_key = #{orderKey},</if>
+            <if test="isMerge != null and isMerge != ''">is_merge = #{isMerge},</if>
         </trim>
         where order_id = #{orderId}
     </update>

+ 1 - 0
fs-service/src/main/resources/mapper/hisStore/FsStoreOrderScrmMapper.xml

@@ -426,6 +426,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="followTime != null">follow_time = #{followTime},</if>
             <if test="followDoctorId != null">follow_doctor_id = #{followDoctorId},</if>
             <if test="cycle != null">cycle = #{cycle},</if>
+            <if test="isMerge != null and isMerge != ''">is_merge = #{isMerge},</if>
         </trim>
         where id = #{id}
     </update>

+ 109 - 0
fs-service/src/main/resources/mapper/hisStore/FsUserInformationCollectionMapper.xml

@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fs.hisStore.mapper.FsUserInformationCollectionMapper">
+    
+    <resultMap type="FsUserInformationCollection" id="FsUserInformationCollectionResult">
+        <result property="id"    column="id"    />
+        <result property="questionId"    column="question_id"    />
+        <result property="userId"    column="user_id"    />
+        <result property="jsonInfo"    column="json_info"    />
+        <result property="userConfirm"    column="user_confirm"    />
+        <result property="doctorConfirm"    column="doctor_confirm"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="doctorId"    column="doctor_id"    />
+        <result property="companyUserId"    column="company_user_id"    />
+        <result property="packageId"    column="package_id"    />
+        <result property="payType"    column="pay_type"    />
+        <result property="amount"    column="amount"    />
+    </resultMap>
+
+    <sql id="selectFsUserInformationCollectionVo">
+        select id, question_id, user_id, json_info, user_confirm, doctor_confirm, create_time, update_time,doctor_id,company_user_id,package_id,pay_type,amount from fs_user_information_collection
+    </sql>
+
+    <select id="selectFsUserInformationCollectionList" parameterType="FsUserInformationCollection" resultMap="FsUserInformationCollectionResult">
+        <include refid="selectFsUserInformationCollectionVo"/>
+        <where>  
+            <if test="questionId != null "> and question_id = #{questionId}</if>
+            <if test="userId != null "> and user_id = #{userId}</if>
+            <if test="jsonInfo != null  and jsonInfo != ''"> and json_info = #{jsonInfo}</if>
+            <if test="userConfirm != null "> and user_confirm = #{userConfirm}</if>
+            <if test="doctorConfirm != null "> and doctor_confirm = #{doctorConfirm}</if>
+        </where>
+    </select>
+    
+    <select id="selectFsUserInformationCollectionById" parameterType="Long" resultMap="FsUserInformationCollectionResult">
+        <include refid="selectFsUserInformationCollectionVo"/>
+        where id = #{id}
+    </select>
+
+    <select id="selectByUserId" parameterType="Long" resultMap="FsUserInformationCollectionResult">
+        <include refid="selectFsUserInformationCollectionVo"/>
+        where user_id = #{userId}
+    </select>
+        
+    <insert id="insertFsUserInformationCollection" parameterType="FsUserInformationCollection" useGeneratedKeys="true" keyProperty="id">
+        insert into fs_user_information_collection
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="questionId != null">question_id,</if>
+            <if test="userId != null">user_id,</if>
+            <if test="jsonInfo != null">json_info,</if>
+            <if test="userConfirm != null">user_confirm,</if>
+            <if test="doctorConfirm != null">doctor_confirm,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="doctorId != null">doctor_id,</if>
+            <if test="companyUserId != null">company_user_id,</if>
+            <if test="packageId != null">package_id,</if>
+            <if test="payType != null">pay_type,</if>
+            <if test="amount != null">amount,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="questionId != null">#{questionId},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="jsonInfo != null">#{jsonInfo},</if>
+            <if test="userConfirm != null">#{userConfirm},</if>
+            <if test="doctorConfirm != null">#{doctorConfirm},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="doctorId != null">#{doctorId},</if>
+            <if test="companyUserId != null">#{companyUserId},</if>
+            <if test="packageId != null">#{packageId},</if>
+            <if test="payType != null">#{payType},</if>
+            <if test="amount != null">#{amount},</if>
+         </trim>
+    </insert>
+
+    <update id="updateFsUserInformationCollection" parameterType="FsUserInformationCollection">
+        update fs_user_information_collection
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="questionId != null">question_id = #{questionId},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="jsonInfo != null">json_info = #{jsonInfo},</if>
+            <if test="userConfirm != null">user_confirm = #{userConfirm},</if>
+            <if test="doctorConfirm != null">doctor_confirm = #{doctorConfirm},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="doctorId != null">doctor_id = #{doctorId},</if>
+            <if test="companyUserId != null">company_user_id = #{companyUserId},</if>
+            <if test="packageId != null">package_id = #{packageId},</if>
+            <if test="payType != null">pay_type = #{payType},</if>
+            <if test="amount != null">amount = #{amount},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteFsUserInformationCollectionById" parameterType="Long">
+        delete from fs_user_information_collection where id = #{id}
+    </delete>
+
+    <delete id="deleteFsUserInformationCollectionByIds" parameterType="String">
+        delete from fs_user_information_collection where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 74 - 3
fs-user-app/src/main/java/com/fs/app/controller/HuifuPayController.java

@@ -1,22 +1,31 @@
 package com.fs.app.controller;
 
 import com.alibaba.fastjson.JSON;
+import com.fs.common.core.domain.R;
+import com.fs.common.core.redis.RedisCache;
+import com.fs.common.utils.StringUtils;
 import com.fs.course.service.IFsCourseProductOrderService;
 import com.fs.course.service.IFsUserCourseOrderService;
 import com.fs.course.service.IFsUserVipOrderService;
+import com.fs.his.mapper.FsHfpayConfigMapper;
 import com.fs.his.service.IFsInquiryOrderService;
 import com.fs.his.service.IFsIntegralOrderService;
 import com.fs.his.service.IFsPackageOrderService;
 import com.fs.his.service.IFsStoreOrderService;
-import com.fs.huifuPay.domain.HuiFuOnlinePay;
-import com.fs.huifuPay.domain.HuiFuOnlineRefund;
-import com.fs.huifuPay.domain.HuiFuResult;
+import com.fs.huifuPay.domain.*;
+import com.fs.huifuPay.service.HuiFuService;
+import com.google.common.collect.Lists;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
 @RestController
 @RequestMapping(value="/app/hfPay")
 public class HuifuPayController {
@@ -34,6 +43,14 @@ public class HuifuPayController {
     private IFsIntegralOrderService integralOrderService;
     @Autowired
     private IFsCourseProductOrderService courseProductOrderService;
+    @Autowired
+    private HuiFuService huiFuService;
+
+    @Autowired
+    RedisCache redisCache;
+
+    @Autowired
+    private FsHfpayConfigMapper hfpayConfigMapper;
 
     org.slf4j.Logger logger= LoggerFactory.getLogger(getClass());
     @RequestMapping("/payNotifyUrl")
@@ -87,4 +104,58 @@ public class HuifuPayController {
         System.out.println(resp_data);
         return "ok";
     }
+
+    @GetMapping("/confirm")
+    public R confirm (@RequestParam("data") String data){
+        HuiFuResult huiFuResult = JSON.parseObject(data, HuiFuResult.class);
+        if(huiFuResult == null) {
+            return R.error("参数错误");
+        }
+        HuifuOrderConfirm confirm = new HuifuOrderConfirm();
+        confirm.setOrgReqDate(huiFuResult.getReq_date());
+        confirm.setOrgReqSeqId(huiFuResult.getReq_seq_id());
+
+        //获取缓存中已分账的商户号
+        String alOtherHuifuId  = redisCache.getCacheObject("huifuId");
+
+        //获取其它商户号数据
+        List<String> huifuIDs;
+        if (StringUtils.isNotEmpty(alOtherHuifuId)) {
+            huifuIDs = hfpayConfigMapper.selectByHuifuId(alOtherHuifuId);
+        } else {
+            huifuIDs = hfpayConfigMapper.selectHuifuId();
+        }
+        //随机分账商户号
+        String[] huifuIds = huifuIDs.toArray(new String[0]);
+        int i = (int) (Math.random() * huifuIDs.size());
+        String otherHuifuId = huifuIds[i];
+        //存入或覆盖已分账的商户
+        redisCache.setCacheObject("huifuId",otherHuifuId);
+
+        //益寿缘分账金额数据(益寿缘主体分账20%)
+        BigDecimal ysyAmount = new BigDecimal(huiFuResult.getTrans_amt()).multiply(new BigDecimal("0.2"));
+        //6666000175632107(益寿缘互联网商户号)
+        confirm.setYsyHuifuId("6666000175632107");
+        confirm.setYsyDivAmt(ysyAmount.toString());
+
+        //其它商户分账数据
+        confirm.setDivHuifuId(otherHuifuId);
+        //其它分账金额 = 交易金额 - 益寿缘账金额
+        confirm.setDivAmt((new BigDecimal(huiFuResult.getTrans_amt()).subtract(ysyAmount)).toString());
+
+
+        HuifuOrderConfirmResult result = huiFuService.confirmOrder(confirm);
+        return R.ok().put("result", result);
+    }
+
+    public static void main(String[] args) {
+        List<String> list = new ArrayList<>();
+        list.add("1");
+        list.add("2");
+        list.add("3");
+        String[] array = list.toArray(new String[0]);
+        //String[] str = {"1","2","3"};
+        int dex = (int)(Math.random()*array.length);
+        System.out.println(array[dex]);
+    }
 }

+ 1 - 1
fs-user-app/src/main/java/com/fs/app/controller/PackageOrderController.java

@@ -318,7 +318,7 @@ public class PackageOrderController extends  AppBaseController {
     @ApiOperation("修改疗法患者信息")
     @PostMapping("/updatePatientInfo")
     public R updatePatientInfo(@RequestBody CreatePackageOrderParam param, HttpServletRequest request){
-        redisCache.setCacheObject("patient:" + param.getCreatePackageOrderKey(), param.getPatient(), 24, TimeUnit.HOURS);
+        redisCache.setCacheObject("patient:" + param.getCreatePackageOrderKey(), param.getPatient(), 120, TimeUnit.DAYS);
         return R.ok();
     }
 

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff