فهرست منبع

套餐包分账

ct 3 روز پیش
والد
کامیت
ad3784845d
23فایلهای تغییر یافته به همراه1432 افزوده شده و 26 حذف شده
  1. 26 4
      fs-admin/src/main/java/com/fs/his/controller/FsCompanyController.java
  2. 103 0
      fs-admin/src/main/java/com/fs/his/controller/FsCompanyDivItemController.java
  3. 48 0
      fs-service/src/main/java/com/fs/company/domain/CompanyDivConfig.java
  4. 55 0
      fs-service/src/main/java/com/fs/company/domain/CompanyDivItem.java
  5. 61 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyDivConfigMapper.java
  6. 65 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyDivItemMapper.java
  7. 19 0
      fs-service/src/main/java/com/fs/company/param/CompanyAcctInfo.java
  8. 40 0
      fs-service/src/main/java/com/fs/company/param/CompanyDivConfigUpdateParam.java
  9. 66 0
      fs-service/src/main/java/com/fs/company/service/ICompanyDivConfigService.java
  10. 65 0
      fs-service/src/main/java/com/fs/company/service/ICompanyDivItemService.java
  11. 179 0
      fs-service/src/main/java/com/fs/company/service/impl/CompanyDivConfigServiceImpl.java
  12. 104 0
      fs-service/src/main/java/com/fs/company/service/impl/CompanyDivItemServiceImpl.java
  13. 41 0
      fs-service/src/main/java/com/fs/company/vo/CompanyDivConfigVo.java
  14. 9 0
      fs-service/src/main/java/com/fs/his/service/impl/FsPackageOrderServiceImpl.java
  15. 125 18
      fs-service/src/main/java/com/fs/his/service/impl/FsStoreAfterSalesServiceImpl.java
  16. 2 0
      fs-service/src/main/java/com/fs/huifuPay/domain/HuiFuCreateOrder.java
  17. 19 1
      fs-service/src/main/java/com/fs/huifuPay/sdk/opps/core/request/V2TradePaymentScanpayRefundRequest.java
  18. 158 0
      fs-service/src/main/java/com/fs/huifuPay/sdk/opps/core/utils/HuiFuUtils.java
  19. 3 2
      fs-service/src/main/java/com/fs/huifuPay/service/impl/HuiFuServiceImpl.java
  20. 91 0
      fs-service/src/main/resources/mapper/company/CompanyDivConfigMapper.xml
  21. 103 0
      fs-service/src/main/resources/mapper/company/CompanyDivItemMapper.xml
  22. 1 1
      fs-service/src/main/resources/mapper/his/FsPackageMapper.xml
  23. 49 0
      fs-user-app/src/main/java/com/fs/app/controller/HuifuPayController.java

+ 26 - 4
fs-admin/src/main/java/com/fs/his/controller/FsCompanyController.java

@@ -15,11 +15,9 @@ import com.fs.company.domain.Company;
 import com.fs.company.domain.CompanyDeduct;
 import com.fs.company.domain.CompanyRecharge;
 import com.fs.company.param.CompanyDeductParam;
+import com.fs.company.param.CompanyDivConfigUpdateParam;
 import com.fs.company.param.CompanyRechargeParam;
-import com.fs.company.service.ICompanyDeductService;
-import com.fs.company.service.ICompanyRechargeService;
-import com.fs.company.service.ICompanyService;
-import com.fs.company.service.ICompanyUserService;
+import com.fs.company.service.*;
 import com.fs.company.vo.CompanyVO;
 import com.fs.core.utils.OrderCodeUtils;
 import com.fs.course.config.CourseConfig;
@@ -70,6 +68,8 @@ public class FsCompanyController extends BaseController
     private ICompanyDeductService deductService;
     @Autowired
     private ISysConfigService configService;
+    @Autowired
+    private ICompanyDivConfigService companyDivConfigService;
     /**
      * 查询诊所管理列表
      */
@@ -241,4 +241,26 @@ public class FsCompanyController extends BaseController
         deductService.insertCompanyDeduct(deduct);
         return R.ok("提交成功,等待审核");
     }
+
+    /**
+     * 获取公司分账配置详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('his:companyDivConfig:query')")
+    @GetMapping(value = "/getDivConfig/{companyId}")
+    public AjaxResult getDivConfig(@PathVariable("companyId") Long companyId)
+    {
+        return AjaxResult.success(companyDivConfigService.selectCompanyDivConfigByCompanyId(companyId));
+    }
+
+    /**
+     * 公司分账配置
+     */
+    @PreAuthorize("@ss.hasPermi('his:companyDivConfig:set')")
+    @Log(title = "公司分账配置", businessType = BusinessType.UPDATE)
+    @PostMapping("/setDiv")
+    public R setDiv(@RequestBody CompanyDivConfigUpdateParam param)
+    {
+        return companyDivConfigService.setDiv(param);
+    }
+
 }

+ 103 - 0
fs-admin/src/main/java/com/fs/his/controller/FsCompanyDivItemController.java

@@ -0,0 +1,103 @@
+package com.fs.his.controller;
+
+import java.util.List;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+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.company.domain.CompanyDivItem;
+import com.fs.company.service.ICompanyDivItemService;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.common.core.page.TableDataInfo;
+
+/**
+ * 分账明细Controller
+ *
+ * @author fs
+ * @date 2025-10-21
+ */
+@RestController
+@RequestMapping("/his/divItem")
+public class FsCompanyDivItemController extends BaseController
+{
+    @Autowired
+    private ICompanyDivItemService companyDivItemService;
+
+    /**
+     * 查询分账明细列表
+     */
+    @PreAuthorize("@ss.hasPermi('his:divItem:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(CompanyDivItem companyDivItem)
+    {
+        startPage();
+        List<CompanyDivItem> list = companyDivItemService.selectCompanyDivItemList(companyDivItem);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出分账明细列表
+     */
+    @PreAuthorize("@ss.hasPermi('his:divItem:export')")
+    @Log(title = "分账明细", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(CompanyDivItem companyDivItem)
+    {
+        List<CompanyDivItem> list = companyDivItemService.selectCompanyDivItemList(companyDivItem);
+        ExcelUtil<CompanyDivItem> util = new ExcelUtil<CompanyDivItem>(CompanyDivItem.class);
+        return util.exportExcel(list, "分账明细数据");
+    }
+
+    /**
+     * 获取分账明细详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('his:divItem:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(companyDivItemService.selectCompanyDivItemById(id));
+    }
+
+//    /**
+//     * 新增分账明细
+//     */
+//    @PreAuthorize("@ss.hasPermi('his:divItem:add')")
+//    @Log(title = "分账明细", businessType = BusinessType.INSERT)
+//    @PostMapping
+//    public AjaxResult add(@RequestBody CompanyDivItem companyDivItem)
+//    {
+//        return toAjax(companyDivItemService.insertCompanyDivItem(companyDivItem));
+//    }
+//
+//    /**
+//     * 修改分账明细
+//     */
+//    @PreAuthorize("@ss.hasPermi('his:divItem:edit')")
+//    @Log(title = "分账明细", businessType = BusinessType.UPDATE)
+//    @PutMapping
+//    public AjaxResult edit(@RequestBody CompanyDivItem companyDivItem)
+//    {
+//        return toAjax(companyDivItemService.updateCompanyDivItem(companyDivItem));
+//    }
+//
+//    /**
+//     * 删除分账明细
+//     */
+//    @PreAuthorize("@ss.hasPermi('his:divItem:remove')")
+//    @Log(title = "分账明细", businessType = BusinessType.DELETE)
+//	@DeleteMapping("/{ids}")
+//    public AjaxResult remove(@PathVariable Long[] ids)
+//    {
+//        return toAjax(companyDivItemService.deleteCompanyDivItemByIds(ids));
+//    }
+}

+ 48 - 0
fs-service/src/main/java/com/fs/company/domain/CompanyDivConfig.java

@@ -0,0 +1,48 @@
+package com.fs.company.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;
+
+/**
+ * 公司分账配置对象 company_div_config
+ *
+ * @author fs
+ * @date 2025-10-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class CompanyDivConfig extends BaseEntity{
+
+    /** 公司id */
+    @TableId
+    private Long companyId;
+
+    /** 公司名称 */
+    @Excel(name = "公司名称")
+    private String companyName;
+
+    /** 是否开启分账 0:否 1:是 */
+    @Excel(name = "是否开启分账 0:否 1:是")
+    private Integer divFlag;
+
+    /** 分账模式 Y:延迟分账 N:实时分账 */
+    @Excel(name = "分账模式 Y:延迟分账 N:实时分账")
+    private String delayAcctFlag;
+
+    /** 是否使用百分比分账 */
+    @Excel(name = "是否使用百分比分账")
+    private String percentageFlag;
+
+    /** 是否净值分账 */
+    @Excel(name = "是否净值分账")
+    private String isCleanSplit;
+
+    /** 分账对象 */
+    @Excel(name = "分账对象")
+    private String acctInfos;
+
+
+}

+ 55 - 0
fs-service/src/main/java/com/fs/company/domain/CompanyDivItem.java

@@ -0,0 +1,55 @@
+package com.fs.company.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fs.common.annotation.Excel;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 分账明细对象 company_div_item
+ *
+ * @author fs
+ * @date 2025-10-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class CompanyDivItem extends BaseEntity{
+
+    @TableId
+    private Long id;
+
+//    /** 订单id */
+//    @Excel(name = "订单id")
+//    private Long orderId;
+
+    /** 订单编号 */
+    @Excel(name = "订单编号")
+    private String orderCode;
+
+    /** 支付订单号 */
+    @Excel(name = "支付订单号")
+    private String payCode;
+
+    /** 分账明细 */
+    @Excel(name = "分账明细")
+    private String detail;
+
+    /** 分账明细 */
+    @Excel(name = "退款明细")
+    private String refundDetail;
+
+    /** 分账明细 */
+    @Excel(name = "是否支付成功 0否 1是")
+    private Integer isPay;
+
+    /** 是否延迟分账 0否 1是 */
+    @Excel(name = "是否延迟分账 0否 1是")
+    private Integer isDelay;
+
+    /** 是否退款 0否 1是 */
+    @Excel(name = "是否退款 0否 1是")
+    private Integer isRefund;
+
+
+}

+ 61 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyDivConfigMapper.java

@@ -0,0 +1,61 @@
+package com.fs.company.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.company.domain.CompanyDivConfig;
+
+/**
+ * 公司分账配置Mapper接口
+ *
+ * @author fs
+ * @date 2025-10-20
+ */
+public interface CompanyDivConfigMapper extends BaseMapper<CompanyDivConfig>{
+    /**
+     * 查询公司分账配置
+     *
+     * @param companyId 公司分账配置主键
+     * @return 公司分账配置
+     */
+    CompanyDivConfig selectCompanyDivConfigByCompanyId(Long companyId);
+
+    /**
+     * 查询公司分账配置列表
+     *
+     * @param companyDivConfig 公司分账配置
+     * @return 公司分账配置集合
+     */
+    List<CompanyDivConfig> selectCompanyDivConfigList(CompanyDivConfig companyDivConfig);
+
+    /**
+     * 新增公司分账配置
+     *
+     * @param companyDivConfig 公司分账配置
+     * @return 结果
+     */
+    int insertCompanyDivConfig(CompanyDivConfig companyDivConfig);
+
+    /**
+     * 修改公司分账配置
+     *
+     * @param companyDivConfig 公司分账配置
+     * @return 结果
+     */
+    int updateCompanyDivConfig(CompanyDivConfig companyDivConfig);
+
+    /**
+     * 删除公司分账配置
+     *
+     * @param companyId 公司分账配置主键
+     * @return 结果
+     */
+    int deleteCompanyDivConfigByCompanyId(Long companyId);
+
+    /**
+     * 批量删除公司分账配置
+     *
+     * @param companyIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteCompanyDivConfigByCompanyIds(Long[] companyIds);
+}

+ 65 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyDivItemMapper.java

@@ -0,0 +1,65 @@
+package com.fs.company.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.company.domain.CompanyDivItem;
+
+/**
+ * 分账明细Mapper接口
+ *
+ * @author fs
+ * @date 2025-10-21
+ */
+public interface CompanyDivItemMapper extends BaseMapper<CompanyDivItem>{
+    /**
+     * 查询分账明细
+     *
+     * @param id 分账明细主键
+     * @return 分账明细
+     */
+    CompanyDivItem selectCompanyDivItemById(Long id);
+
+    /**
+     * 查询分账明细列表
+     *
+     * @param companyDivItem 分账明细
+     * @return 分账明细集合
+     */
+    List<CompanyDivItem> selectCompanyDivItemList(CompanyDivItem companyDivItem);
+
+    /**
+     * 新增分账明细
+     *
+     * @param companyDivItem 分账明细
+     * @return 结果
+     */
+    int insertCompanyDivItem(CompanyDivItem companyDivItem);
+
+    /**
+     * 修改分账明细
+     *
+     * @param companyDivItem 分账明细
+     * @return 结果
+     */
+    int updateCompanyDivItem(CompanyDivItem companyDivItem);
+
+    /**
+     * 删除分账明细
+     *
+     * @param id 分账明细主键
+     * @return 结果
+     */
+    int deleteCompanyDivItemById(Long id);
+
+    /**
+     * 批量删除分账明细
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteCompanyDivItemByIds(Long[] ids);
+
+    CompanyDivItem selectCompanyDivItemByOrderCode(String orderCode);
+
+    CompanyDivItem selectCompanyDivItemByPayCode(String payCode);
+}

+ 19 - 0
fs-service/src/main/java/com/fs/company/param/CompanyAcctInfo.java

@@ -0,0 +1,19 @@
+package com.fs.company.param;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+@Data
+public class CompanyAcctInfo {
+    //分账金额
+    private BigDecimal divAmt;
+    //分账接收方ID
+    @NotNull(message = "分账接收方ID不能为空")
+    private String huifuId;
+    //	账户号
+    private String acctId;
+    //分账百分比%
+    private Float percentageDiv;
+}

+ 40 - 0
fs-service/src/main/java/com/fs/company/param/CompanyDivConfigUpdateParam.java

@@ -0,0 +1,40 @@
+package com.fs.company.param;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CompanyDivConfigUpdateParam {
+    /** 公司id */
+    @TableId
+    private Long companyId;
+
+    /** 公司名称 */
+    @Excel(name = "公司名称")
+    private String companyName;
+
+    /** 是否开启分账 0:否 1:是 */
+    @Excel(name = "是否开启分账 0:否 1:是")
+    private Integer divFlag;
+
+    /** 分账模式 Y:延迟分账 N:实时分账 */
+    @Excel(name = "分账模式 Y:延迟分账 N:实时分账")
+    private String delayAcctFlag;
+
+    /** 是否使用百分比分账 */
+    @Excel(name = "是否使用百分比分账")
+    private String percentageFlag;
+
+    /** 是否净值分账 */
+    @Excel(name = "是否净值分账")
+    private String isCleanSplit;
+
+    /** 分账对象 */
+    @Excel(name = "分账对象")
+    private List<CompanyAcctInfo> acctInfos;
+
+    private Integer isAdd; //是否新增 1:是
+}

+ 66 - 0
fs-service/src/main/java/com/fs/company/service/ICompanyDivConfigService.java

@@ -0,0 +1,66 @@
+package com.fs.company.service;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.common.core.domain.R;
+import com.fs.company.domain.CompanyDivConfig;
+import com.fs.company.param.CompanyDivConfigUpdateParam;
+import com.fs.company.vo.CompanyDivConfigVo;
+
+/**
+ * 公司分账配置Service接口
+ *
+ * @author fs
+ * @date 2025-10-20
+ */
+public interface ICompanyDivConfigService extends IService<CompanyDivConfig>{
+    /**
+     * 查询公司分账配置
+     *
+     * @param companyId 公司分账配置主键
+     * @return 公司分账配置
+     */
+    CompanyDivConfigVo selectCompanyDivConfigByCompanyId(Long companyId);
+
+    /**
+     * 查询公司分账配置列表
+     *
+     * @param companyDivConfig 公司分账配置
+     * @return 公司分账配置集合
+     */
+    List<CompanyDivConfig> selectCompanyDivConfigList(CompanyDivConfig companyDivConfig);
+
+    /**
+     * 新增公司分账配置
+     *
+     * @param companyDivConfig 公司分账配置
+     * @return 结果
+     */
+    int insertCompanyDivConfig(CompanyDivConfig companyDivConfig);
+
+    /**
+     * 修改公司分账配置
+     *
+     * @param companyDivConfig 公司分账配置
+     * @return 结果
+     */
+    int updateCompanyDivConfig(CompanyDivConfig companyDivConfig);
+
+    /**
+     * 批量删除公司分账配置
+     *
+     * @param companyIds 需要删除的公司分账配置主键集合
+     * @return 结果
+     */
+    int deleteCompanyDivConfigByCompanyIds(Long[] companyIds);
+
+    /**
+     * 删除公司分账配置信息
+     *
+     * @param companyId 公司分账配置主键
+     * @return 结果
+     */
+    int deleteCompanyDivConfigByCompanyId(Long companyId);
+
+    R setDiv(CompanyDivConfigUpdateParam param);
+}

+ 65 - 0
fs-service/src/main/java/com/fs/company/service/ICompanyDivItemService.java

@@ -0,0 +1,65 @@
+package com.fs.company.service;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.company.domain.CompanyDivItem;
+
+/**
+ * 分账明细Service接口
+ *
+ * @author fs
+ * @date 2025-10-21
+ */
+public interface ICompanyDivItemService extends IService<CompanyDivItem>{
+    /**
+     * 查询分账明细
+     *
+     * @param id 分账明细主键
+     * @return 分账明细
+     */
+    CompanyDivItem selectCompanyDivItemById(Long id);
+
+    /**
+     * 查询分账明细列表
+     *
+     * @param companyDivItem 分账明细
+     * @return 分账明细集合
+     */
+    List<CompanyDivItem> selectCompanyDivItemList(CompanyDivItem companyDivItem);
+
+    /**
+     * 新增分账明细
+     *
+     * @param companyDivItem 分账明细
+     * @return 结果
+     */
+    int insertCompanyDivItem(CompanyDivItem companyDivItem);
+
+    /**
+     * 修改分账明细
+     *
+     * @param companyDivItem 分账明细
+     * @return 结果
+     */
+    int updateCompanyDivItem(CompanyDivItem companyDivItem);
+
+    /**
+     * 批量删除分账明细
+     *
+     * @param ids 需要删除的分账明细主键集合
+     * @return 结果
+     */
+    int deleteCompanyDivItemByIds(Long[] ids);
+
+    /**
+     * 删除分账明细信息
+     *
+     * @param id 分账明细主键
+     * @return 结果
+     */
+    int deleteCompanyDivItemById(Long id);
+
+    CompanyDivItem selectCompanyDivItemByOrderCode(String orderCode);
+
+    CompanyDivItem selectCompanyDivItemByPayCode(String payCode);
+}

+ 179 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyDivConfigServiceImpl.java

@@ -0,0 +1,179 @@
+package com.fs.company.service.impl;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+import com.alibaba.fastjson.JSON;
+import com.fs.common.core.domain.R;
+import com.fs.common.utils.DateUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.common.utils.StringUtils;
+import com.fs.company.domain.CompanyDivConfig;
+import com.fs.company.mapper.CompanyDivConfigMapper;
+import com.fs.company.param.CompanyAcctInfo;
+import com.fs.company.param.CompanyDivConfigUpdateParam;
+import com.fs.company.service.ICompanyDivConfigService;
+import com.fs.company.vo.CompanyDivConfigVo;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 公司分账配置Service业务层处理
+ *
+ * @author fs
+ * @date 2025-10-20
+ */
+@Service
+public class CompanyDivConfigServiceImpl extends ServiceImpl<CompanyDivConfigMapper, CompanyDivConfig> implements ICompanyDivConfigService {
+    @Autowired
+    private CompanyDivConfigMapper companyDivConfigMapper;
+
+    /**
+     * 查询公司分账配置
+     *
+     * @param companyId 公司分账配置主键
+     * @return 公司分账配置
+     */
+    @Override
+    public CompanyDivConfigVo selectCompanyDivConfigByCompanyId(Long companyId)
+    {
+        CompanyDivConfig companyDivConfig = baseMapper.selectCompanyDivConfigByCompanyId(companyId);
+        if (companyDivConfig == null){
+            return null;
+        }
+        CompanyDivConfigVo vo = new CompanyDivConfigVo();
+        BeanUtils.copyProperties(companyDivConfig, vo);
+        String acctInfosStr = companyDivConfig.getAcctInfos();
+        if (StringUtils.isNotBlank(acctInfosStr)){
+            List<CompanyAcctInfo> acctInfos = JSON.parseArray(acctInfosStr, CompanyAcctInfo.class);
+            vo.setAcctInfos(acctInfos);
+        }
+        return vo;
+    }
+
+    /**
+     * 查询公司分账配置列表
+     *
+     * @param companyDivConfig 公司分账配置
+     * @return 公司分账配置
+     */
+    @Override
+    public List<CompanyDivConfig> selectCompanyDivConfigList(CompanyDivConfig companyDivConfig)
+    {
+        return baseMapper.selectCompanyDivConfigList(companyDivConfig);
+    }
+
+    /**
+     * 新增公司分账配置
+     *
+     * @param companyDivConfig 公司分账配置
+     * @return 结果
+     */
+    @Override
+    public int insertCompanyDivConfig(CompanyDivConfig companyDivConfig)
+    {
+        companyDivConfig.setCreateTime(DateUtils.getNowDate());
+        return baseMapper.insertCompanyDivConfig(companyDivConfig);
+    }
+
+    /**
+     * 修改公司分账配置
+     *
+     * @param companyDivConfig 公司分账配置
+     * @return 结果
+     */
+    @Override
+    public int updateCompanyDivConfig(CompanyDivConfig companyDivConfig)
+    {
+        companyDivConfig.setUpdateTime(DateUtils.getNowDate());
+        return baseMapper.updateCompanyDivConfig(companyDivConfig);
+    }
+
+    /**
+     * 批量删除公司分账配置
+     *
+     * @param companyIds 需要删除的公司分账配置主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCompanyDivConfigByCompanyIds(Long[] companyIds)
+    {
+        return baseMapper.deleteCompanyDivConfigByCompanyIds(companyIds);
+    }
+
+    /**
+     * 删除公司分账配置信息
+     *
+     * @param companyId 公司分账配置主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCompanyDivConfigByCompanyId(Long companyId)
+    {
+        return baseMapper.deleteCompanyDivConfigByCompanyId(companyId);
+    }
+
+    @Override
+    public R setDiv(CompanyDivConfigUpdateParam param) {
+        if (param.getCompanyId() == null || StringUtils.isBlank(param.getCompanyName())){
+            return R.error("公司信息不能为空!");
+        }
+        Integer divFlag = param.getDivFlag();
+        String acctInfosStr = null;
+        //分账账户
+        List<CompanyAcctInfo> acctInfos = param.getAcctInfos();
+        if (divFlag == null){
+            divFlag = 0;
+        } else if (divFlag == 1){
+            String delayAcctFlag = param.getDelayAcctFlag();
+            if (StringUtils.isBlank(delayAcctFlag)){
+                return R.error("分账模式不能为空!");
+            }
+
+            if (acctInfos == null || acctInfos.isEmpty()){
+                return R.error("分账接收方不能为空!");
+            }
+            acctInfosStr = JSON.toJSONString(acctInfos);
+        }
+        CompanyDivConfig companyDivConfig = new CompanyDivConfig();
+        BeanUtils.copyProperties(param, companyDivConfig);
+        companyDivConfig.setAcctInfos(acctInfosStr);
+        String percentageFlag = companyDivConfig.getPercentageFlag();
+        if (acctInfos != null && !acctInfos.isEmpty()){
+            if (StringUtils.isNotBlank(percentageFlag) && percentageFlag.equals("Y")){
+                if (StringUtils.isBlank(companyDivConfig.getIsCleanSplit())){
+                    companyDivConfig.setIsCleanSplit("N");
+                }
+            }
+            Float total = 0f;
+            for (CompanyAcctInfo acctInfo : acctInfos) {
+                if ("N".equals(percentageFlag)){
+                    if (BigDecimal.valueOf(0.01).compareTo(acctInfo.getDivAmt())>0) {
+                        return R.error("分账接收方:"+acctInfo.getHuifuId()+"分账金额必须大于0.01!");
+                    }
+                } else if ("Y".equals(percentageFlag)){
+                    if (acctInfo.getPercentageDiv()>100) {
+                        return R.error("分账接收方:"+acctInfo.getHuifuId()+"分账百分比不能大于100!");
+                    }
+                    total = total + acctInfo.getPercentageDiv();
+                    if (total>100){
+                        return R.error("分账接收方百分比之和不能大于100!");
+                    }
+                }
+            }
+        }
+        int flag = 0;
+        if (param.getIsAdd()!= null && param.getIsAdd() == 1){
+            //新增
+            companyDivConfig.setCreateTime(DateUtils.getNowDate());
+            flag = companyDivConfigMapper.insertCompanyDivConfig(companyDivConfig);
+        } else {
+            //更新
+            companyDivConfig.setUpdateTime(DateUtils.getNowDate());
+            flag = companyDivConfigMapper.updateCompanyDivConfig(companyDivConfig);
+        }
+
+        return flag>0?R.ok():R.error();
+    }
+}

+ 104 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyDivItemServiceImpl.java

@@ -0,0 +1,104 @@
+package com.fs.company.service.impl;
+
+import java.util.List;
+import com.fs.common.utils.DateUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.fs.company.mapper.CompanyDivItemMapper;
+import com.fs.company.domain.CompanyDivItem;
+import com.fs.company.service.ICompanyDivItemService;
+
+/**
+ * 分账明细Service业务层处理
+ *
+ * @author fs
+ * @date 2025-10-21
+ */
+@Service
+public class CompanyDivItemServiceImpl extends ServiceImpl<CompanyDivItemMapper, CompanyDivItem> implements ICompanyDivItemService {
+
+    /**
+     * 查询分账明细
+     *
+     * @param id 分账明细主键
+     * @return 分账明细
+     */
+    @Override
+    public CompanyDivItem selectCompanyDivItemById(Long id)
+    {
+        return baseMapper.selectCompanyDivItemById(id);
+    }
+
+    /**
+     * 查询分账明细列表
+     *
+     * @param companyDivItem 分账明细
+     * @return 分账明细
+     */
+    @Override
+    public List<CompanyDivItem> selectCompanyDivItemList(CompanyDivItem companyDivItem)
+    {
+        return baseMapper.selectCompanyDivItemList(companyDivItem);
+    }
+
+    /**
+     * 新增分账明细
+     *
+     * @param companyDivItem 分账明细
+     * @return 结果
+     */
+    @Override
+    public int insertCompanyDivItem(CompanyDivItem companyDivItem)
+    {
+        companyDivItem.setCreateTime(DateUtils.getNowDate());
+        return baseMapper.insertCompanyDivItem(companyDivItem);
+    }
+
+    /**
+     * 修改分账明细
+     *
+     * @param companyDivItem 分账明细
+     * @return 结果
+     */
+    @Override
+    public int updateCompanyDivItem(CompanyDivItem companyDivItem)
+    {
+        companyDivItem.setUpdateTime(DateUtils.getNowDate());
+        return baseMapper.updateCompanyDivItem(companyDivItem);
+    }
+
+    /**
+     * 批量删除分账明细
+     *
+     * @param ids 需要删除的分账明细主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCompanyDivItemByIds(Long[] ids)
+    {
+        return baseMapper.deleteCompanyDivItemByIds(ids);
+    }
+
+    /**
+     * 删除分账明细信息
+     *
+     * @param id 分账明细主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCompanyDivItemById(Long id)
+    {
+        return baseMapper.deleteCompanyDivItemById(id);
+    }
+
+    @Override
+    public CompanyDivItem selectCompanyDivItemByOrderCode(String orderCode) {
+        return baseMapper.selectCompanyDivItemByOrderCode(orderCode);
+    }
+
+    @Override
+    public CompanyDivItem selectCompanyDivItemByPayCode(String payCode) {
+        return baseMapper.selectCompanyDivItemByPayCode(payCode);
+    }
+}

+ 41 - 0
fs-service/src/main/java/com/fs/company/vo/CompanyDivConfigVo.java

@@ -0,0 +1,41 @@
+package com.fs.company.vo;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fs.common.annotation.Excel;
+import com.fs.company.param.CompanyAcctInfo;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CompanyDivConfigVo {
+    /** 公司id */
+    @TableId
+    private Long companyId;
+
+    /** 公司名称 */
+    @Excel(name = "公司名称")
+    private String companyName;
+
+    /** 是否开启分账 0:否 1:是 */
+    @Excel(name = "是否开启分账 0:否 1:是")
+    private Integer divFlag;
+
+    /** 分账模式 Y:延迟分账 N:实时分账 */
+    @Excel(name = "分账模式 Y:延迟分账 N:实时分账")
+    private String delayAcctFlag;
+
+    /** 是否使用百分比分账 */
+    @Excel(name = "是否使用百分比分账")
+    private String percentageFlag;
+
+    /** 是否净值分账 */
+    @Excel(name = "是否净值分账")
+    private String isCleanSplit;
+
+    /** 分账对象 */
+    @Excel(name = "分账对象")
+    private List<CompanyAcctInfo> acctInfos;
+
+    private Integer isAdd; //是否新增 1:是
+}

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

@@ -50,6 +50,7 @@ import com.fs.his.vo.FsPackageOrderListVO;
 import com.fs.his.vo.FsPackageOrderVO;
 import com.fs.huifuPay.domain.HuiFuCreateOrder;
 import com.fs.huifuPay.domain.HuifuCreateOrderResult;
+import com.fs.huifuPay.sdk.opps.core.utils.HuiFuUtils;
 import com.fs.huifuPay.service.HuiFuService;
 import com.fs.system.domain.SysConfig;
 import com.fs.system.oss.CloudStorageService;
@@ -1019,6 +1020,14 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
                         o.setTransAmt(storePayment.getPayMoney().toString());
                         o.setGoodsDesc("套餐包订单支付");
                         o.setAppId(appId);
+                        //公司分账
+                        try {
+                            HuiFuUtils.doDiv(o,fsPackageOrder.getCompanyId());
+                            //存储分账明细
+                            HuiFuUtils.saveDivItem(o, fsPackageOrder, storePayment);
+                        } catch (Exception e) {
+                            logger.error("-------------分账出错:{}", e.getMessage());
+                        }
                         HuifuCreateOrderResult result = huiFuService.createOrder(o);
                         logger.info("创建汇付支付:"+result);
                         FsStorePayment mt=new FsStorePayment();

+ 125 - 18
fs-service/src/main/java/com/fs/his/service/impl/FsStoreAfterSalesServiceImpl.java

@@ -12,6 +12,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.domain.R;
@@ -20,7 +21,11 @@ import com.fs.common.utils.CloudHostUtils;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.common.utils.spring.SpringUtils;
+import com.fs.company.domain.CompanyDivItem;
 import com.fs.company.param.FsStoreStatisticsParam;
+import com.fs.company.service.ICompanyDivConfigService;
+import com.fs.company.service.ICompanyDivItemService;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.service.impl.CompanyServiceImpl;
 import com.fs.company.vo.FsStoreOrderStatisticsVO;
@@ -160,6 +165,9 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
     @Autowired
     private IFsStoreOrderLogsService fsStoreOrderLogsService;
 
+    @Autowired
+    private ICompanyDivItemService companyDivItemService;
+
     /**
      * 查询售后记录
      *
@@ -289,7 +297,7 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
         fsStoreAfterSalesLogsMapper.insertFsStoreAfterSalesLogs(logs);
         //添加订单日志
         fsStoreOrderLogsService.create(order.getOrderId(), FsStoreOrderLogEnum.PLATFORM_REVIEW_SALES.getValue(),
-                logs.getOperator()+" "+FsStoreOrderLogEnum.PLATFORM_REVIEW_SALES.getDesc());
+                logs.getOperator() + " " + FsStoreOrderLogEnum.PLATFORM_REVIEW_SALES.getDesc());
         return 1;
     }
 
@@ -318,7 +326,7 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
         fsStoreAfterSalesLogsMapper.insertFsStoreAfterSalesLogs(logs);
         //添加订单日志
         fsStoreOrderLogsService.create(order.getOrderId(), FsStoreOrderLogEnum.PLATFORM_REVIEW_CANCEL.getValue(),
-                logs.getOperator() + " " +FsStoreOrderLogEnum.PLATFORM_REVIEW_CANCEL.getDesc());
+                logs.getOperator() + " " + FsStoreOrderLogEnum.PLATFORM_REVIEW_CANCEL.getDesc());
 //        FsStoreOrderLogs Logs = new FsStoreOrderLogs();
 //        Logs.setChangeMessage("已取消退款");
 //        Logs.setOrderId(order.getOrderId());
@@ -330,7 +338,7 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
         or.setStatus(order.getOrderStatus());
         fsStoreOrderMapper.updateFsStoreOrder(or);
         //金牛订单取消售后审核不需要操作
-        if(!CloudHostUtils.hasCloudHostName("金牛名医","康年堂")){
+        if (!CloudHostUtils.hasCloudHostName("金牛名医", "康年堂")) {
             if (order.getOrderStatus() == 2) {
                 FsStoreOrder fsStoreOrder = fsStoreOrderMapper.selectFsStoreOrderByOrderId(order.getOrderId());
                 String newOrderSn = OrderCodeUtils.getOrderSn();
@@ -376,7 +384,6 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
         }
 
 
-
         return 1;
     }
 
@@ -402,7 +409,7 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
         fsStoreAfterSalesLogsMapper.insertFsStoreAfterSalesLogs(logs);
         //添加订单日志
         fsStoreOrderLogsService.create(order.getOrderId(), FsStoreOrderLogEnum.FINANCE_REVIEW_SALES.getValue(),
-                logs.getOperator() + " " +FsStoreOrderLogEnum.FINANCE_REVIEW_SALES.getDesc());
+                logs.getOperator() + " " + FsStoreOrderLogEnum.FINANCE_REVIEW_SALES.getDesc());
         //更改订单状态
         FsStoreOrder or = new FsStoreOrder();
         or.setOrderId(order.getOrderId());
@@ -464,7 +471,7 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
         }
         if (payments != null && payments.size() > 0) {
             FsStorePayment payment = payments.get(0);
-            if (reMoney.compareTo(payment.getPayMoney())>0) {
+            if (reMoney.compareTo(payment.getPayMoney()) > 0) {
                 return 0; //退款金额不能大于实际支付金额
             }
             String json = configService.selectConfigByKey("his.pay");
@@ -550,6 +557,16 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
                 request.setReqSeqId("refund-" + payment.getPayCode());
                 Map<String, Object> extendInfoMap = new HashMap<>();
                 extendInfoMap.put("org_req_seq_id", orderType + "-" + payment.getPayCode());
+
+                //处理分账退款
+                //1.判断是否是全额退款
+                CompanyDivItem companyDivItem = null;
+                try {
+                    companyDivItem = doRefundDiv(fsStoreOrder, reMoney, payment, extendInfoMap);
+                } catch (Exception e) {
+                    logger.error("-----------------分账退款处理失败{}", e.getMessage());
+                }
+
                 request.setExtendInfo(extendInfoMap);
                 HuiFuRefundResult refund = huiFuService.refund(request);
                 logger.info("订单退款返回结果:退款订单id:" + order.getOrderId() + refund);
@@ -560,6 +577,15 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
                     paymentMap.setRefundTime(DateUtils.getNowDate());
                     paymentMap.setRefundMoney(payment.getPayMoney());
                     fsStorePaymentMapper.updateFsStorePayment(paymentMap);
+                    try {
+                        //处理分账退款明细表
+                        if (companyDivItem !=null && companyDivItem.getId() != null) {
+                            companyDivItem.setIsRefund(1);
+                            companyDivItemService.updateCompanyDivItem(companyDivItem);
+                        }
+                    } catch (Exception e) {
+                        logger.error("-----------------分账退款明细处理失败{}", e.getMessage());
+                    }
                 } else {
                     throw new CustomException("退款请求失败" + refund.getResp_desc());
                 }
@@ -576,17 +602,17 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
                     Integer erpType = sysConfig.getErpType();
                     if (erpType == 1) {
                         erpOrderService.refundUpdate(request);
-                    }else if (erpType == 2) {
+                    } else if (erpType == 2) {
                         //旺店通
                         wdtErpOrderService.refundUpdate(request);
                     } else if (erpType == 3) {
                         //瀚智
                         hzOMSerpOrderService.refundUpdate(request);
-                    }  else if (erpType == 4) {
+                    } else if (erpType == 4) {
                         dfOrderService.refundUpdate(request);
-                    }else if(erpType == 5){
+                    } else if (erpType == 5) {
                         jSTOrderService.refundUpdate(request);
-                    }else if(erpType == 6){
+                    } else if (erpType == 6) {
                         k9OrderService.refundUpdate(request);
                     }
                 }
@@ -603,6 +629,87 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
         return i;
     }
 
+    /**
+     * 处理分账退款
+     *
+     * @param fsStoreOrder
+     * @param reMoney
+     * @param payment
+     * @param extendInfoMap
+     */
+    private CompanyDivItem doRefundDiv(FsStoreOrder fsStoreOrder, BigDecimal reMoney, FsStorePayment payment, Map<String, Object> extendInfoMap) {
+        CompanyDivItem companyDivItem = null;
+        Long companyId = fsStoreOrder.getCompanyId();
+        if (companyId != null) {
+            companyDivItem = companyDivItemService.selectCompanyDivItemByPayCode(payment.getPayCode());
+            if (fsStoreOrder.getPayPrice().compareTo(reMoney) > 0) {
+                //部分退款
+                if (companyDivItem != null) {
+                    SysConfigMapper sysConfigMapper = SpringUtils.getBean(SysConfigMapper.class);
+                    SysConfig sysConfig = sysConfigMapper.selectConfigByConfigKey("his.pay");
+                    FsPayConfig fsPayConfig = new Gson().fromJson(sysConfig.getConfigValue(), FsPayConfig.class);
+                    String defaultHuiFuId = fsPayConfig.getHuifuId(); //默认汇付id
+
+                    String detail = companyDivItem.getDetail();
+                    if (StringUtils.isNotBlank(detail)) {
+                        JSONObject acctSplitBunch = JSONObject.parseObject(detail);
+                        if (acctSplitBunch.get("percentage_flag") != null) {
+                            List<Map<String, Object>> param = new ArrayList(); //传入汇付参数
+
+                            String percentageFlag = acctSplitBunch.get("percentage_flag").toString();
+                            Object acctInfosObj = acctSplitBunch.get("acct_infos");
+                            if (acctInfosObj != null) {
+                                if ("Y".equals(percentageFlag)) {
+                                    // 百分比分账
+                                    List<Map> acctInfos = JSON.parseArray(acctInfosObj.toString(), Map.class);
+                                    if (acctInfos != null && !acctInfos.isEmpty()) {
+                                        BigDecimal remainMoney = reMoney;
+
+                                        for (Map acctInfo : acctInfos) {
+                                            String percentageDiv = acctInfo.get("percentage_div").toString();
+                                            BigDecimal divAmt = reMoney.multiply(BigDecimal.valueOf(Float.valueOf(percentageDiv)).multiply(BigDecimal.valueOf(0.01))).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            if (divAmt.compareTo(BigDecimal.ZERO) <= 0) {
+                                                continue;
+                                            }
+                                            remainMoney = remainMoney.subtract(divAmt);
+                                            String huiFuId = acctInfo.get("huifu_id").toString();
+                                            Map<String, Object> map = new HashMap<>();
+                                            map.put("div_amt", divAmt);
+                                            map.put("huifu_id", huiFuId);
+//                                                part_loan_amt	垫资金额
+                                            param.add(map);
+                                            if (remainMoney.compareTo(BigDecimal.ZERO) >= 0) {
+                                                break;
+                                            }
+                                        }
+                                        if (remainMoney.compareTo(BigDecimal.ZERO) >= 0) {
+                                            BigDecimal divAmt = reMoney.subtract(remainMoney).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            Map<String, Object> map = new HashMap<>();
+                                            map.put("div_amt", divAmt);
+                                            map.put("huifu_id", defaultHuiFuId);
+                                            param.add(map);
+                                        }
+                                    }
+
+                                } else if ("N".equals(percentageFlag)) {
+                                    // 金额分账 目前按照排序从第一个开始扣 扣到满足退款金额
+                                }
+                                if (!param.isEmpty()) {
+                                    extendInfoMap.put("acct_split_bunch", JSON.toJSONString(param));
+                                }
+                            }
+
+                        }
+
+
+                    }
+                }
+            }
+        }
+        return companyDivItem;
+
+    }
+
     @Override
     public List<FsStoreAfterSalesExcelVO> selectFsStoreAfterSalesExcelListVO(FsStoreAfterSalesParam fsStoreAfterSales) {
         return fsStoreAfterSalesMapper.selectFsStoreAfterSalesExcelListVO(fsStoreAfterSales);
@@ -743,17 +850,17 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
             Integer erpType = sysConfig.getErpType();
             BaseResponse response = null;
             if (erpType == 1) {
-                response =  erpOrderService.refundUpdate(request);
-            }else if (erpType == 2) {
+                response = erpOrderService.refundUpdate(request);
+            } else if (erpType == 2) {
                 //旺店通
                 response = wdtErpOrderService.refundUpdate(request);
-            }  else if (erpType == 3) {
+            } else if (erpType == 3) {
                 //瀚智
-                response =  hzOMSerpOrderService.refundUpdate(request);
+                response = hzOMSerpOrderService.refundUpdate(request);
             } else if (erpType == 4) {
-                response =  dfOrderService.refundUpdate(request);
-            }else if(erpType == 5){
-                response=jSTOrderService.refundUpdate(request);
+                response = dfOrderService.refundUpdate(request);
+            } else if (erpType == 5) {
+                response = jSTOrderService.refundUpdate(request);
             }
             if (response.getSuccess()) {
                 return R.ok();
@@ -898,7 +1005,7 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
         fsStoreAfterSalesLogsMapper.insertFsStoreAfterSalesLogs(logs);
         //添加订单日志
         fsStoreOrderLogsService.create(order.getOrderId(), FsStoreOrderLogEnum.WAREHOUSE_REVIEW_SALES.getValue(),
-                logs.getOperator() + " " +FsStoreOrderLogEnum.WAREHOUSE_REVIEW_SALES.getDesc());
+                logs.getOperator() + " " + FsStoreOrderLogEnum.WAREHOUSE_REVIEW_SALES.getDesc());
         return 1;
     }
 

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

@@ -20,4 +20,6 @@ public class HuiFuCreateOrder {
     String goodsDesc;
     String openid;
     String appId; //多小程序支付
+    String acctSplitBunch; //公司分账参数
+    String delayAcctFlag; //延时交易 延迟分账需要
 }

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

@@ -43,6 +43,15 @@ public class V2TradePaymentScanpayRefundRequest extends BaseRequest {
     @JSONField(name = "org_hf_seq_id")
     private String orgHfSeqId;
 
+
+
+    /**
+     *分账对象
+     * **/
+    @JSONField(name = "acct_split_bunch")
+    private String acctSplitBunch;
+
+
     @Override
     public FunctionCodeEnum getFunctionCode() {
         return FunctionCodeEnum.V2_TRADE_PAYMENT_SCANPAY_REFUND;
@@ -51,12 +60,13 @@ public class V2TradePaymentScanpayRefundRequest extends BaseRequest {
     public V2TradePaymentScanpayRefundRequest() {
     }
 
-    public V2TradePaymentScanpayRefundRequest(String reqDate, String reqSeqId, String huifuId, String ordAmt, String orgReqDate) {
+    public V2TradePaymentScanpayRefundRequest(String reqDate, String reqSeqId, String huifuId, String ordAmt, String orgReqDate,String acctSplitBunch) {
         this.reqDate = reqDate;
         this.reqSeqId = reqSeqId;
         this.huifuId = huifuId;
         this.ordAmt = ordAmt;
         this.orgReqDate = orgReqDate;
+        this.acctSplitBunch = acctSplitBunch;
     }
 
     public String getReqDate() {
@@ -106,4 +116,12 @@ public class V2TradePaymentScanpayRefundRequest extends BaseRequest {
     public void setOrgHfSeqId(String orgHfSeqId) {
         this.orgHfSeqId = orgHfSeqId;
     }
+
+    public String getAcctSplitBunch() {
+        return acctSplitBunch;
+    }
+
+    public void setAcctSplitBunch(String acctSplitBunch) {
+        this.acctSplitBunch = acctSplitBunch;
+    }
 }

+ 158 - 0
fs-service/src/main/java/com/fs/huifuPay/sdk/opps/core/utils/HuiFuUtils.java

@@ -0,0 +1,158 @@
+package com.fs.huifuPay.sdk.opps.core.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.fs.common.utils.StringUtils;
+import com.fs.common.utils.spring.SpringUtils;
+import com.fs.company.domain.CompanyDivItem;
+import com.fs.company.mapper.CompanyDivConfigMapper;
+import com.fs.company.param.CompanyAcctInfo;
+import com.fs.company.service.ICompanyDivConfigService;
+import com.fs.company.service.ICompanyDivItemService;
+import com.fs.company.service.impl.CompanyDivConfigServiceImpl;
+import com.fs.company.vo.CompanyDivConfigVo;
+import com.fs.his.domain.FsPackageOrder;
+import com.fs.his.domain.FsPayConfig;
+import com.fs.his.domain.FsStorePayment;
+import com.fs.huifuPay.domain.HuiFuCreateOrder;
+import com.fs.system.domain.SysConfig;
+import com.fs.system.mapper.SysConfigMapper;
+import com.google.gson.Gson;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class HuiFuUtils {
+    private static ICompanyDivConfigService companyDivConfigService = SpringUtils.getBean(ICompanyDivConfigService.class);
+    private static ICompanyDivItemService companyDivItemService = SpringUtils.getBean(ICompanyDivItemService.class);
+
+    /**
+     *  处理分账
+     * @param huiFuCreateOrder
+     * @param companyId
+     */
+    public static void doDiv(HuiFuCreateOrder huiFuCreateOrder, Long companyId) throws Exception {
+        //默认汇付账户
+        SysConfigMapper sysConfigMapper= SpringUtils.getBean(SysConfigMapper.class);
+        SysConfig sysConfig = sysConfigMapper.selectConfigByConfigKey("his.pay");
+        FsPayConfig fsPayConfig = new Gson().fromJson(sysConfig.getConfigValue(), FsPayConfig.class);
+        String defaultHuifuId = fsPayConfig.getHuifuId();
+        //查询是否开启分账
+        if (companyId !=null){
+
+            CompanyDivConfigVo configVo = companyDivConfigService.selectCompanyDivConfigByCompanyId(companyId);
+            if (configVo != null){
+                Integer divFlag = configVo.getDivFlag();
+                if (divFlag != null && divFlag == 1){
+                    //开启分账
+                    //汇付传参
+                    Map<String, Object> acctSplitBunchMap = new HashMap<>();
+                    List<Map<String,Object>> acctInfos = new ArrayList();
+                    List<CompanyAcctInfo> acctInfoVos = configVo.getAcctInfos();
+                    if (acctInfoVos != null && !acctInfoVos.isEmpty()){
+                        String delayAcctFlag = configVo.getDelayAcctFlag();
+                        String percentageFlag = configVo.getPercentageFlag();
+                        if (StringUtils.isNotBlank(delayAcctFlag) && delayAcctFlag.equals("N")){
+                            //实时分账
+                            if (StringUtils.isNotBlank(percentageFlag) && percentageFlag.equals("Y")){
+                                acctSplitBunchMap.put("percentage_flag","Y");
+                                Float total = 0f;
+                                //百分比分账
+                                for (CompanyAcctInfo acctInfo : acctInfoVos) {
+                                    Map<String, Object> map = new HashMap<>();
+                                    Float percentageDiv = acctInfo.getPercentageDiv();
+                                    if (percentageDiv == null || percentageDiv <= 0){
+                                        continue;
+                                    }
+                                    map.put("percentage_div", String.format("%.2f", percentageDiv));
+                                    if (percentageDiv > 100){
+                                        acctInfos = null;
+                                        break;
+                                    }
+                                    total = total + percentageDiv;
+                                    if (total>100){
+                                        acctInfos = null;
+                                        break;
+                                    }
+                                    if (StringUtils.isBlank(acctInfo.getAcctId())){
+                                        acctInfo.setAcctId(null);
+                                    }
+                                    map.put("huifu_id", acctInfo.getHuifuId());
+                                    acctInfos.add(map);
+                                }
+                                if (acctInfos != null && !acctInfos.isEmpty()){
+                                    Map<String, Object> defaultAccount = new HashMap<>();
+                                    defaultAccount.put("percentage_div", String.format("%.2f", 100f - total));
+                                    defaultAccount.put("huifu_id", defaultHuifuId);
+                                    acctInfos.add(defaultAccount);
+                                }
+
+
+                            } else {
+                                acctSplitBunchMap.put("percentage_flag","N");
+                                // 固定金额
+                                BigDecimal amtTotal = BigDecimal.ZERO;
+                                //支付金额
+                                BigDecimal initTotal = new BigDecimal(huiFuCreateOrder.getTransAmt()).setScale(2, RoundingMode.FLOOR);
+                                for (CompanyAcctInfo acctInfo : acctInfoVos) {
+                                    Map<String, Object> map = new HashMap<>();
+                                    BigDecimal divAmt = acctInfo.getDivAmt().setScale(2, RoundingMode.FLOOR);
+                                    if (divAmt.compareTo(BigDecimal.ZERO) <= 0){
+                                        continue;
+                                    }
+                                    map.put("div_amt",divAmt.toString());
+                                    amtTotal = amtTotal.add(divAmt);
+                                    if (amtTotal.compareTo(initTotal) > 0){
+                                        acctInfos = null;
+                                        break;
+                                    }
+                                    if (StringUtils.isBlank(acctInfo.getAcctId())){
+                                        acctInfo.setAcctId(null);
+                                    }
+                                    map.put("huifu_id", acctInfo.getHuifuId());
+                                    acctInfos.add(map);
+                                }
+                                if (acctInfos != null && !acctInfos.isEmpty()){
+                                    if (initTotal.compareTo(amtTotal)<0){
+                                        acctInfos = null;
+                                    } else {
+                                        Map<String, Object> defaultAccount = new HashMap<>();
+                                        defaultAccount.put("div_amt", String.valueOf(initTotal.subtract(amtTotal).setScale(2, RoundingMode.FLOOR)));
+                                        defaultAccount.put("huifu_id", defaultHuifuId);
+                                        acctInfos.add(defaultAccount);
+                                    }
+                                }
+
+                            }
+
+                            if (acctInfos != null){
+                                acctSplitBunchMap.put("is_clean_split", configVo.getIsCleanSplit());
+                                acctSplitBunchMap.put("acct_infos", acctInfos);
+                                huiFuCreateOrder.setAcctSplitBunch( JSON.toJSONString(acctSplitBunchMap));
+                            }
+                        } else if (StringUtils.isNotBlank(delayAcctFlag) && delayAcctFlag.equals("Y")){
+                            //延时分账 确认交易时传参
+                            huiFuCreateOrder.setDelayAcctFlag("Y");
+                        }
+
+                    }
+                }
+            }
+        }
+    }
+
+    public static void saveDivItem(HuiFuCreateOrder o, FsPackageOrder fsPackageOrder, FsStorePayment storePayment) {
+        CompanyDivItem companyDivItem = new CompanyDivItem();
+        if (StringUtils.isNotBlank(o.getAcctSplitBunch())){
+            companyDivItem.setOrderCode(fsPackageOrder.getOrderSn());
+            companyDivItem.setPayCode(storePayment.getPayCode());
+            companyDivItem.setDetail(o.getAcctSplitBunch());
+            companyDivItem.setIsRefund(0); //支付
+            companyDivItem.setIsDelay(0); //延迟分账
+            companyDivItemService.insertCompanyDivItem(companyDivItem);
+        }
+    }
+}

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

@@ -9,14 +9,12 @@ import com.fs.his.domain.FsPayConfig;
 import com.fs.huifuPay.domain.*;
 import com.fs.huifuPay.sdk.opps.core.config.MerConfig;
 import com.fs.huifuPay.sdk.opps.core.request.*;
-import com.fs.huifuPay.sdk.opps.core.utils.RsaUtils;
 import com.fs.huifuPay.sdk.opps.core.utils.SequenceTools;
 import com.fs.huifuPay.service.HuiFuService;
 import com.fs.huifuPay.sdk.opps.core.utils.DateTools;
 import com.fs.system.domain.SysConfig;
 import com.fs.system.mapper.SysConfigMapper;
 import com.google.gson.Gson;
-import io.lettuce.core.ScriptOutputType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -57,6 +55,9 @@ public class HuiFuServiceImpl implements HuiFuService {
             // 是否延迟交易
             extendInfoMap.put("delay_acct_flag", "N");
             extendInfoMap.put("pay_scene", "02");
+            if (StringUtils.isNotBlank(order.getAcctSplitBunch())){
+                extendInfoMap.put("acct_split_bunch", order.getAcctSplitBunch());
+            }
             // 传入分帐遇到优惠的处理规则
             extendInfoMap.put("term_div_coupon_type", "0");
             String appId = order.getAppId();

+ 91 - 0
fs-service/src/main/resources/mapper/company/CompanyDivConfigMapper.xml

@@ -0,0 +1,91 @@
+<?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.company.mapper.CompanyDivConfigMapper">
+
+    <resultMap type="CompanyDivConfig" id="CompanyDivConfigResult">
+        <result property="companyId"    column="company_id"    />
+        <result property="companyName"    column="company_name"    />
+        <result property="divFlag"    column="div_flag"    />
+        <result property="delayAcctFlag"    column="delay_acct_flag"    />
+        <result property="percentageFlag"    column="percentage_flag"    />
+        <result property="isCleanSplit"    column="is_clean_split"    />
+        <result property="acctInfos"    column="acct_infos"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectCompanyDivConfigVo">
+        select company_id, company_name, div_flag, delay_acct_flag, percentage_flag, is_clean_split, acct_infos, create_time, update_time from company_div_config
+    </sql>
+
+    <select id="selectCompanyDivConfigList" parameterType="CompanyDivConfig" resultMap="CompanyDivConfigResult">
+        <include refid="selectCompanyDivConfigVo"/>
+        <where>
+            <if test="companyName != null  and companyName != ''"> and company_name like concat('%', #{companyName}, '%')</if>
+            <if test="divFlag != null "> and div_flag = #{divFlag}</if>
+            <if test="delayAcctFlag != null  and delayAcctFlag != ''"> and delay_acct_flag = #{delayAcctFlag}</if>
+            <if test="percentageFlag != null  and percentageFlag != ''"> and percentage_flag = #{percentageFlag}</if>
+            <if test="isCleanSplit != null  and isCleanSplit != ''"> and is_clean_split = #{isCleanSplit}</if>
+            <if test="acctInfos != null  and acctInfos != ''"> and acct_infos = #{acctInfos}</if>
+        </where>
+    </select>
+
+    <select id="selectCompanyDivConfigByCompanyId" parameterType="Long" resultMap="CompanyDivConfigResult">
+        <include refid="selectCompanyDivConfigVo"/>
+        where company_id = #{companyId}
+    </select>
+
+    <insert id="insertCompanyDivConfig" parameterType="CompanyDivConfig">
+        insert into company_div_config
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="companyId != null">company_id,</if>
+            <if test="companyName != null and companyName != ''">company_name,</if>
+            <if test="divFlag != null">div_flag,</if>
+            <if test="delayAcctFlag != null">delay_acct_flag,</if>
+            <if test="percentageFlag != null">percentage_flag,</if>
+            <if test="isCleanSplit != null">is_clean_split,</if>
+            <if test="acctInfos != null">acct_infos,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="companyId != null">#{companyId},</if>
+            <if test="companyName != null and companyName != ''">#{companyName},</if>
+            <if test="divFlag != null">#{divFlag},</if>
+            <if test="delayAcctFlag != null">#{delayAcctFlag},</if>
+            <if test="percentageFlag != null">#{percentageFlag},</if>
+            <if test="isCleanSplit != null">#{isCleanSplit},</if>
+            <if test="acctInfos != null">#{acctInfos},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateCompanyDivConfig" parameterType="CompanyDivConfig">
+        update company_div_config
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="companyName != null and companyName != ''">company_name = #{companyName},</if>
+            <if test="divFlag != null">div_flag = #{divFlag},</if>
+            <if test="delayAcctFlag != null">delay_acct_flag = #{delayAcctFlag},</if>
+            <if test="percentageFlag != null">percentage_flag = #{percentageFlag},</if>
+            <if test="isCleanSplit != null">is_clean_split = #{isCleanSplit},</if>
+            <if test="acctInfos != null">acct_infos = #{acctInfos},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where company_id = #{companyId}
+    </update>
+
+    <delete id="deleteCompanyDivConfigByCompanyId" parameterType="Long">
+        delete from company_div_config where company_id = #{companyId}
+    </delete>
+
+    <delete id="deleteCompanyDivConfigByCompanyIds" parameterType="String">
+        delete from company_div_config where company_id in
+        <foreach item="companyId" collection="array" open="(" separator="," close=")">
+            #{companyId}
+        </foreach>
+    </delete>
+</mapper>

+ 103 - 0
fs-service/src/main/resources/mapper/company/CompanyDivItemMapper.xml

@@ -0,0 +1,103 @@
+<?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.company.mapper.CompanyDivItemMapper">
+
+    <resultMap type="CompanyDivItem" id="CompanyDivItemResult">
+        <result property="id"    column="id"    />
+<!--        <result property="orderId"    column="order_id"    />-->
+        <result property="orderCode"    column="order_code"    />
+        <result property="payCode"    column="pay_code"    />
+        <result property="detail"    column="detail"    />
+        <result property="refundDetail"    column="refund_detail"    />
+        <result property="isPay"    column="is_pay"    />
+        <result property="isDelay"    column="is_delay"    />
+        <result property="isRefund"    column="is_refund"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectCompanyDivItemVo">
+        select id, order_code, pay_code, detail,refund_detail,is_pay, is_delay, is_refund, create_time, update_time from company_div_item
+    </sql>
+
+    <select id="selectCompanyDivItemList" parameterType="CompanyDivItem" resultMap="CompanyDivItemResult">
+        <include refid="selectCompanyDivItemVo"/>
+        <where>
+            <if test="orderCode != null  and orderCode != ''"> and order_code = #{orderCode}</if>
+            <if test="payCode != null  and payCode != ''"> and pay_code = #{payCode}</if>
+            <if test="detail != null  and detail != ''"> and detail = #{detail}</if>
+            <if test="refundDetail != null  and refundDetail != ''"> and refund_detail = #{refundDetail}</if>
+            <if test="isPay != null "> and is_pay = #{isPay}</if>
+            <if test="isDelay != null "> and is_delay = #{isDelay}</if>
+            <if test="isRefund != null "> and is_refund = #{isRefund}</if>
+        </where>
+    </select>
+
+    <select id="selectCompanyDivItemById" parameterType="Long" resultMap="CompanyDivItemResult">
+        <include refid="selectCompanyDivItemVo"/>
+        where id = #{id}
+    </select>
+    <select id="selectCompanyDivItemByOrderCode" resultType="com.fs.company.domain.CompanyDivItem">
+        <include refid="selectCompanyDivItemVo"/>
+        where order_code = #{orderCode}
+    </select>
+    <select id="selectCompanyDivItemByPayCode" resultType="com.fs.company.domain.CompanyDivItem">
+        <include refid="selectCompanyDivItemVo"/>
+        where pay_code = #{payCode}
+    </select>
+
+    <insert id="insertCompanyDivItem" parameterType="CompanyDivItem" useGeneratedKeys="true" keyProperty="id">
+        insert into company_div_item
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="orderCode != null and orderCode != ''">order_code,</if>
+            <if test="payCode != null and payCode != ''">pay_code,</if>
+            <if test="detail != null">detail,</if>
+            <if test="refundDetail != null">refund_detail,</if>
+            <if test="isPay != null">is_pay,</if>
+            <if test="isDelay != null">is_delay,</if>
+            <if test="isRefund != null">is_refund,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="orderCode != null and orderCode != ''">#{orderCode},</if>
+            <if test="payCode != null and payCode != ''">#{payCode},</if>
+            <if test="detail != null">#{detail},</if>
+            <if test="refundDetail != null">#{refundDetail},</if>
+            <if test="isPay != null">#{isPay},</if>
+            <if test="isDelay != null">#{isDelay},</if>
+            <if test="isRefund != null">#{isRefund},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateCompanyDivItem" parameterType="CompanyDivItem">
+        update company_div_item
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="orderCode != null and orderCode != ''">order_code = #{orderCode},</if>
+            <if test="payCode != null and payCode != ''">pay_code = #{payCode},</if>
+            <if test="detail != null">detail = #{detail},</if>
+            <if test="refundDetail != null">refund_detail = #{refundDetail},</if>
+            <if test="isPay != null">is_pay = #{isPay},</if>
+            <if test="isDelay != null">is_delay = #{isDelay},</if>
+            <if test="isRefund != null">is_refund = #{isRefund},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteCompanyDivItemById" parameterType="Long">
+        delete from company_div_item where id = #{id}
+    </delete>
+
+    <delete id="deleteCompanyDivItemByIds" parameterType="String">
+        delete from company_div_item where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

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

@@ -75,7 +75,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         SELECT i.icd_name
         FROM fs_package p
                  LEFT JOIN fs_icd i ON FIND_IN_SET(i.icd_code, p.icd_code) > 0
-        WHERE package_id = #{packageId};
+        WHERE package_id = #{packageId}
     </select>
 
     <select id="selectFsPackageListByIds" resultType="com.fs.his.domain.FsPackage">

+ 49 - 0
fs-user-app/src/main/java/com/fs/app/controller/HuifuPayController.java

@@ -1,6 +1,8 @@
 package com.fs.app.controller;
 
 import com.alibaba.fastjson.JSON;
+import com.fs.company.domain.CompanyDivItem;
+import com.fs.company.service.ICompanyDivItemService;
 import com.fs.course.service.IFsCourseProductOrderService;
 import com.fs.course.service.IFsUserCourseOrderService;
 import com.fs.course.service.IFsUserVipOrderService;
@@ -36,6 +38,9 @@ public class HuifuPayController {
     private IFsCourseProductOrderService courseProductOrderService;
 
     org.slf4j.Logger logger= LoggerFactory.getLogger(getClass());
+    @Autowired
+    private ICompanyDivItemService companyDivItemService;
+
     @RequestMapping("/payNotifyUrl")
     public String asyncMessage(@RequestParam String resp_desc,@RequestParam String resp_code,@RequestParam String sign,@RequestParam String resp_data) {
         HuiFuResult huiFuResult = JSON.parseObject(resp_data, HuiFuResult.class);
@@ -45,24 +50,59 @@ public class HuifuPayController {
             switch (orderId[0]){
                 case "inquiry":
                     inquiryOrderService.payConfirm("",orderId[1],huiFuResult.getHf_seq_id(),"",1,huiFuResult.getOut_trans_id(),huiFuResult.getParty_order_id());
+                    try {
+                        updateDivItem(orderId[1]);
+                    } catch (Exception e) {
+                        logger.error("-------分账明细回调错误{}", e.getMessage());
+                    }
                     break;
                 case "store":
                     storeOrderService.payConfirm("",orderId[1],huiFuResult.getHf_seq_id(),"",1,huiFuResult.getOut_trans_id(),huiFuResult.getParty_order_id());
+                    try {
+                        updateDivItem(orderId[1]);
+                    } catch (Exception e) {
+                        logger.error("-------分账明细回调错误{}", e.getMessage());
+                    }
                     break;
                 case "package":
                     packageOrderService.payConfirm("",orderId[1],huiFuResult.getHf_seq_id(),"",1,huiFuResult.getOut_trans_id(),huiFuResult.getParty_order_id());
+                    try {
+                        updateDivItem(orderId[1]);
+                    } catch (Exception e) {
+                        logger.error("-------分账明细回调错误{}", e.getMessage());
+                    }
                     break;
                 case "course":
                     courseOrderService.payConfirm("",orderId[1],huiFuResult.getHf_seq_id(),"",1,huiFuResult.getOut_trans_id(),huiFuResult.getParty_order_id());
+                    try {
+                        updateDivItem(orderId[1]);
+                    } catch (Exception e) {
+                        logger.error("-------分账明细回调错误{}", e.getMessage());
+                    }
                     break;
                 case "appvip":
                     vipOrderService.payConfirm("",orderId[1],huiFuResult.getHf_seq_id(),"",1,huiFuResult.getOut_trans_id(),huiFuResult.getParty_order_id());
+                    try {
+                        updateDivItem(orderId[1]);
+                    } catch (Exception e) {
+                        logger.error("-------分账明细回调错误{}", e.getMessage());
+                    }
                     break;
                 case "integral":
                     integralOrderService.payConfirm("",orderId[1],huiFuResult.getHf_seq_id(),"",1,huiFuResult.getOut_trans_id(),huiFuResult.getParty_order_id());
+                    try {
+                        updateDivItem(orderId[1]);
+                    } catch (Exception e) {
+                        logger.error("-------分账明细回调错误{}", e.getMessage());
+                    }
                     break;
                 case "product":
                     courseProductOrderService.payConfirm("",orderId[1],huiFuResult.getHf_seq_id(),"",1,huiFuResult.getOut_trans_id(),huiFuResult.getParty_order_id());
+                    try {
+                        updateDivItem(orderId[1]);
+                    } catch (Exception e) {
+                        logger.error("-------分账明细回调错误{}", e.getMessage());
+                    }
                     break;
             }
         }
@@ -70,6 +110,15 @@ public class HuifuPayController {
         return "ok";
     }
 
+    private void updateDivItem(String orderId) {
+        //修改分账状态
+        CompanyDivItem companyDivItem = companyDivItemService.selectCompanyDivItemByPayCode(orderId);
+        if (companyDivItem != null) {
+            companyDivItem.setIsPay(1);
+            companyDivItemService.updateCompanyDivItem(companyDivItem);
+        }
+    }
+
 
     @RequestMapping("/payOnlineNotifyUrl")
     public String asyncHuFuOnlinePay(@RequestParam String resp_desc,@RequestParam String resp_code,@RequestParam String sign,@RequestParam String resp_data) {