Sfoglia il codice sorgente

Merge remote-tracking branch 'origin/master'

yjwang 4 settimane fa
parent
commit
37d588a4e6
64 ha cambiato i file con 641 aggiunte e 56 eliminazioni
  1. 47 6
      fs-admin/src/main/java/com/fs/his/controller/FsStoreOrderController.java
  2. 7 1
      fs-admin/src/main/java/com/fs/his/task/Task.java
  3. 6 0
      fs-service/src/main/java/com/fs/config/ai/AiHostProper.java
  4. 1 1
      fs-service/src/main/java/com/fs/erp/service/impl/DfOrderServiceImpl.java
  5. 1 1
      fs-service/src/main/java/com/fs/fastgptApi/util/AudioUtils.java
  6. 5 1
      fs-service/src/main/java/com/fs/his/mapper/FsInquiryOrderMapper.java
  7. 5 1
      fs-service/src/main/java/com/fs/his/mapper/FsInquiryOrderReportMapper.java
  8. 11 3
      fs-service/src/main/java/com/fs/his/mapper/FsPackageOrderMapper.java
  9. 3 0
      fs-service/src/main/java/com/fs/his/mapper/FsStoreOrderItemMapper.java
  10. 3 7
      fs-service/src/main/java/com/fs/his/mapper/FsStoreOrderMapper.java
  11. 13 2
      fs-service/src/main/java/com/fs/his/mapper/FsStorePaymentMapper.java
  12. 2 1
      fs-service/src/main/java/com/fs/his/param/FsInquiryOrderParam.java
  13. 2 0
      fs-service/src/main/java/com/fs/his/param/FsInquiryOrderReportParam.java
  14. 2 0
      fs-service/src/main/java/com/fs/his/param/FsPackageOrderParam.java
  15. 10 0
      fs-service/src/main/java/com/fs/his/param/FsStoreOrderSalesParam.java
  16. 2 0
      fs-service/src/main/java/com/fs/his/param/FsStorePaymentParam.java
  17. 2 0
      fs-service/src/main/java/com/fs/his/service/IFsStoreOrderService.java
  18. 22 18
      fs-service/src/main/java/com/fs/his/service/impl/FsStoreAfterSalesServiceImpl.java
  19. 139 0
      fs-service/src/main/java/com/fs/his/service/impl/FsStoreOrderServiceImpl.java
  20. 3 1
      fs-service/src/main/java/com/fs/his/vo/FsInquiryOrderListVO.java
  21. 2 0
      fs-service/src/main/java/com/fs/his/vo/FsInquiryOrderReportListVO.java
  22. 2 0
      fs-service/src/main/java/com/fs/his/vo/FsPackageOrderExcelVO.java
  23. 3 0
      fs-service/src/main/java/com/fs/his/vo/FsPackageOrderListVO.java
  24. 4 0
      fs-service/src/main/java/com/fs/his/vo/FsStoreOrderStatusExcelVO.java
  25. 8 0
      fs-service/src/main/java/com/fs/his/vo/FsStorePaymentExcelVO.java
  26. 4 2
      fs-service/src/main/java/com/fs/his/vo/FsStorePaymentVO.java
  27. 19 0
      fs-service/src/main/java/com/fs/hisStore/param/FsStoreOrderRefundByProductParam.java
  28. 1 1
      fs-service/src/main/resources/application-config-druid-bjczwh.yml
  29. 1 0
      fs-service/src/main/resources/application-config-druid-bnkc.yml
  30. 1 0
      fs-service/src/main/resources/application-config-druid-cqtyt.yml
  31. 5 4
      fs-service/src/main/resources/application-config-druid-czt.yml
  32. 1 0
      fs-service/src/main/resources/application-config-druid-drk-test.yml
  33. 1 0
      fs-service/src/main/resources/application-config-druid-drk.yml
  34. 1 0
      fs-service/src/main/resources/application-config-druid-fby.yml
  35. 1 0
      fs-service/src/main/resources/application-config-druid-hcl.yml
  36. 1 0
      fs-service/src/main/resources/application-config-druid-hdt.yml
  37. 1 0
      fs-service/src/main/resources/application-config-druid-hst.yml
  38. 1 0
      fs-service/src/main/resources/application-config-druid-hyt.yml
  39. 1 0
      fs-service/src/main/resources/application-config-druid-hzyy.yml
  40. 1 0
      fs-service/src/main/resources/application-config-druid-jkj.yml
  41. 1 0
      fs-service/src/main/resources/application-config-druid-jnlzjk.yml
  42. 1 0
      fs-service/src/main/resources/application-config-druid-jnmy.yml
  43. 1 0
      fs-service/src/main/resources/application-config-druid-jzzx.yml
  44. 96 0
      fs-service/src/main/resources/application-config-druid-knt.yml
  45. 1 0
      fs-service/src/main/resources/application-config-druid-kyt.yml
  46. 1 0
      fs-service/src/main/resources/application-config-druid-nmgyt.yml
  47. 1 0
      fs-service/src/main/resources/application-config-druid-qdtst.yml
  48. 1 0
      fs-service/src/main/resources/application-config-druid-sft.yml
  49. 1 0
      fs-service/src/main/resources/application-config-druid-sxjz.yml
  50. 1 0
      fs-service/src/main/resources/application-config-druid-syysy.yml
  51. 1 0
      fs-service/src/main/resources/application-config-druid-whhm.yml
  52. 1 0
      fs-service/src/main/resources/application-config-druid-xfk.yml
  53. 1 0
      fs-service/src/main/resources/application-config-druid-xzt.yml
  54. 1 0
      fs-service/src/main/resources/application-config-druid-yjb.yml
  55. 1 0
      fs-service/src/main/resources/application-config-druid-yzt.yml
  56. 1 0
      fs-service/src/main/resources/application-config-druid-zsjk.yml
  57. 1 1
      fs-service/src/main/resources/application-config-myhk.yml
  58. 1 0
      fs-service/src/main/resources/application-config-zkzh.yml
  59. 162 0
      fs-service/src/main/resources/application-druid-knt.yml
  60. 1 0
      fs-service/src/main/resources/application-druid-lmjy.yml
  61. 6 0
      fs-service/src/main/resources/mapper/his/FsStoreOrderItemMapper.xml
  62. 4 3
      fs-service/src/main/resources/mapper/his/FsStoreOrderMapper.xml
  63. 1 1
      fs-service/src/main/resources/mapper/qw/QwUserVoiceLogMapper.xml
  64. 9 1
      fs-user-app/src/main/java/com/fs/app/controller/CompanyUserController.java

+ 47 - 6
fs-admin/src/main/java/com/fs/his/controller/FsStoreOrderController.java

@@ -11,10 +11,7 @@ import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.entity.SysRole;
 import com.fs.common.core.domain.entity.SysUser;
 import com.fs.common.core.domain.model.LoginUser;
-import com.fs.common.utils.ParseUtils;
-import com.fs.common.utils.SecurityUtils;
-import com.fs.common.utils.ServletUtils;
-import com.fs.common.utils.StringUtils;
+import com.fs.common.utils.*;
 import com.fs.company.param.CompanyStoreOrderMoneyLogsListParam;
 import com.fs.company.service.ICompanyMoneyLogsService;
 import com.fs.company.vo.CompanyStoreOrderMoneyLogsVO;
@@ -35,6 +32,7 @@ import com.fs.his.dto.ExpressInfoDTO;
 import com.fs.his.dto.StoreOrderExpressExportDTO;
 import com.fs.his.dto.TracesDTO;
 import com.fs.his.enums.FsStoreOrderLogEnum;
+import com.fs.his.enums.FsStoreOrderStatusEnum;
 import com.fs.his.enums.ShipperCodeEnum;
 import com.fs.his.param.FsFollowMsgParam;
 import com.fs.his.param.FsStoreOrderParam;
@@ -364,7 +362,11 @@ public class FsStoreOrderController extends BaseController
             moneyLogsMap.setBusinessId(order.getOrderId());
             tuiMoneyLogs=moneyLogsService.selectCompanyStoreOrderMoneyLogsList(moneyLogsMap);
         }
-        return R.ok().put("data",order).put("tuiMoneyLogs",tuiMoneyLogs);
+        if ((CloudHostUtils.hasCloudHostName("金牛明医"))){
+            return R.ok().put("data",order).put("tuiMoneyLogs",tuiMoneyLogs).put("isUpdateRefund",1).put("isUpdatePayRemain",1);
+        } else {
+            return R.ok().put("data",order).put("tuiMoneyLogs",tuiMoneyLogs).put("isUpdateRefund",0).put("isUpdatePayRemain",0);
+        }
     }
 
     @GetMapping(value = "/queryPhone/{orderId}")
@@ -420,9 +422,40 @@ public class FsStoreOrderController extends BaseController
     @PutMapping
     public AjaxResult edit(@RequestBody FsStoreOrder fsStoreOrder)
     {
+        AjaxResult error = moneyCheck(fsStoreOrder);
+        if (error != null) return error;
         return toAjax(fsStoreOrderService.updateFsStoreOrder(fsStoreOrder));
     }
 
+    private AjaxResult moneyCheck(FsStoreOrder fsStoreOrder) {
+        BigDecimal payRemain = fsStoreOrder.getPayRemain();
+        BigDecimal payPrice = fsStoreOrder.getPayPrice();
+        if (payRemain != null && payPrice == null){
+            return AjaxResult.error("订单应收金额不正确!");
+        }
+        if (payRemain == null && payPrice != null){
+            return AjaxResult.error("订单物流代收金额不正确!");
+        }
+        if (payRemain != null && payPrice != null){
+            FsStoreOrder temp = fsStoreOrderService.selectFsStoreOrderByOrderId(fsStoreOrder.getOrderId());
+            if (!((Objects.equals(temp.getStatus(), FsStoreOrderStatusEnum.STATUS_2.getValue())
+                    || (Objects.equals(temp.getStatus(), FsStoreOrderStatusEnum.STATUS_1.getValue())))
+                    || (StringUtils.isNotBlank(temp.getExtendOrderId())))
+            ){
+
+                BigDecimal payMoney = temp.getPayMoney();
+                if (fsStoreOrder.getPayMoney()!=null){
+                    fsStoreOrder.setPayMoney(payMoney);
+                }
+                BigDecimal tempPayPrice = payMoney.add(payRemain);
+                if(0 != tempPayPrice.compareTo(fsStoreOrder.getPayPrice())){
+                    return AjaxResult.error("订单金额不正确!");
+                }
+            }
+        }
+        return null;
+    }
+
     /**
      * 修改订单
      */
@@ -583,7 +616,15 @@ public class FsStoreOrderController extends BaseController
     {
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         fsStoreOrder.setOperator(loginUser.getUser().getNickName());
-        return toAjax(fsStoreOrderService.afterSales(fsStoreOrder));
+        if (fsStoreOrder.getRefundAmount() != null){
+            if (fsStoreOrder.getRefundList()!=null && !fsStoreOrder.getRefundList().isEmpty()){
+                return toAjax(fsStoreOrderService.afterSalesByProduct(fsStoreOrder));
+            } else {
+                return AjaxResult.error("没有选择需要退款的商品!");
+            }
+        } else {
+            return toAjax(fsStoreOrderService.afterSales(fsStoreOrder));
+        }
     }
 
     /**

+ 7 - 1
fs-admin/src/main/java/com/fs/his/task/Task.java

@@ -62,6 +62,7 @@ import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 
 import java.util.*;
+import java.util.concurrent.CompletableFuture;
 
 @Slf4j
 @Component("task")
@@ -555,9 +556,14 @@ public class Task {
         if (erpOrderService !=null && erpOrderService == dfOrderService){
             orders = fsStoreOrderMapper.selectShippedOrder();
             if(orders!=null&& !orders.isEmpty()){
+                List<CompletableFuture<Void>> futures = new ArrayList<>();
                 for(FsStoreOrder order:orders){
-                    erpOrderService.getOrderDeliveryStatus(order);
+                    CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
+                        erpOrderService.getOrderDeliveryStatus(order);
+                    });
+                    futures.add(future);
                 }
+                CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
             }
         }
     }

+ 6 - 0
fs-service/src/main/java/com/fs/config/ai/AiHostProper.java

@@ -16,4 +16,10 @@ public class AiHostProper {
     @Value("${ipad.voiceApi}")
     private String voiceApi;
 
+
+    @Value("${ipad.commonApi}")
+    private String commonApi;
+
+
+
 }

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

@@ -701,7 +701,7 @@ public class DfOrderServiceImpl implements IErpOrderService
                                             order.setDeliveryName(proCode);
                                             order.setDeliveryCode("SF");
                                             order.setStatus(3);
-                                            order.setDeliverySendTime(DateUtils.getNowDate());
+                                            order.setDeliverySendTime(DateUtils.getNowDate()); //更新发货时间
                                             fsStoreOrderMapper.updateFsStoreOrder(order);
                                             fsStoreOrderLogsService.create(order.getOrderId(), FsStoreOrderLogEnum.DELIVERY_GOODS.getValue(), FsStoreOrderLogEnum.DELIVERY_GOODS.getDesc());
                                             if (order.getCompanyId() != null && order.getCompanyId() > 0) {

+ 1 - 1
fs-service/src/main/java/com/fs/fastgptApi/util/AudioUtils.java

@@ -731,7 +731,7 @@ public class AudioUtils {
             URL url = new URL(fileUrl);
             HttpURLConnection connection = (HttpURLConnection) url.openConnection();
             // 设置Referer请求头
-            connection.setRequestProperty("Referer", "cos.his.cdwjyyh.com");
+//            connection.setRequestProperty("Referer", "cos.his.cdwjyyh.com");
             connection.setRequestMethod("GET");
             connection.connect();
 

+ 5 - 1
fs-service/src/main/java/com/fs/his/mapper/FsInquiryOrderMapper.java

@@ -69,10 +69,14 @@ public interface FsInquiryOrderMapper
     public int deleteFsInquiryOrderByOrderIds(Long[] orderIds);
 
     @Select({"<script> " +
-            "select io.*,dc.doctor_name,dc.account as doctor_account,det.dept_name,c.company_name,cu.nick_name company_user_name ,io.patient_json->>'$.patientName'as  patient_name,syu.nick_name user_name from fs_inquiry_order io  LEFT JOIN fs_doctor dc ON io.doctor_id =dc.doctor_id LEFT JOIN fs_department det ON det.dept_id =io.department_id  LEFT JOIN sys_user syu ON syu.user_id =io.audit_user_id  LEFT JOIN company c ON c.company_id= io.company_id LEFT JOIN company_user cu ON cu.user_id=io.company_user_id  "+
+            "select io.*,dc.doctor_name,dc.account as doctor_account,det.dept_name,c.company_name,cu.nick_name company_user_name ,io.patient_json->>'$.patientName'as  patient_name,syu.nick_name user_name,csc.name miniProgramName from fs_inquiry_order io  LEFT JOIN fs_doctor dc ON io.doctor_id =dc.doctor_id LEFT JOIN fs_department det ON det.dept_id =io.department_id  LEFT JOIN sys_user syu ON syu.user_id =io.audit_user_id  LEFT JOIN company c ON c.company_id= io.company_id LEFT JOIN company_user cu ON cu.user_id=io.company_user_id  "+
             "            <if test=\"maps.phone != null  and maps.phone != ''\"> LEFT JOIN fs_user fu ON fu.user_id=io.user_id</if>\n" +
+            "LEFT JOIN (SELECT sp.*,ROW_NUMBER() OVER (PARTITION BY sp.pay_code ORDER BY sp.create_time DESC) as rn\n" +
+            "        FROM fs_store_payment sp) sp_latest ON sp_latest.business_code = io.order_sn AND sp_latest.rn = 1\n" +
+            "        LEFT JOIN fs_course_play_source_config csc ON csc.appid = sp_latest.app_id" +
             " where 1=1 " +
             "            <if test=\"maps.orderSn != null  and maps.orderSn != ''\"> and io.order_sn = #{maps.orderSn}</if>\n" +
+            "            <if test=\"maps.coursePlaySourceConfigId != null\"> and csc.id = #{maps.coursePlaySourceConfigId}</if>\n" +
             "            <if test=\"maps.title != null  and maps.title != ''\"> and io.title = #{maps.title}</if>\n" +
             "            <if test=\"maps.userId != null \"> and io.user_id = #{maps.userId}</if>\n" +
             "            <if test=\"maps.doctorName != null \">  and dc.doctor_name like concat('%', #{maps.doctorName}, '%')</if>\n" +

+ 5 - 1
fs-service/src/main/java/com/fs/his/mapper/FsInquiryOrderReportMapper.java

@@ -65,7 +65,7 @@ public interface FsInquiryOrderReportMapper
      */
     public int deleteFsInquiryOrderReportByReportIds(Long[] reportIds);
     @Select({"<script> " +
-            "select ior.*,ior.patient_json->>'$.patientName' as  patient_name,u.nick_name,u.phone,d.doctor_name,su.nick_name user_name,send.nick_name send_name,fio.status inquiry_status,fio.inquiry_sub_type,fio.order_sn,c.company_name,cuu.nick_name company_user_name,fz.nick_name fz_name  FROM fs_inquiry_order_report ior  " +
+            "select ior.*,ior.patient_json->>'$.patientName' as  patient_name,u.nick_name,u.phone,d.doctor_name,su.nick_name user_name,send.nick_name send_name,fio.status inquiry_status,fio.inquiry_sub_type,fio.order_sn,c.company_name,cuu.nick_name company_user_name,fz.nick_name fz_name,csc.name miniProgramName  FROM fs_inquiry_order_report ior  " +
             " LEFT JOIN fs_user u ON u.user_id=ior.user_id " +
             " LEFT JOIN fs_doctor d ON d.doctor_id=ior.doctor_id " +
             " LEFT JOIN sys_user su ON su.user_id=ior.audit_user_id " +
@@ -76,8 +76,12 @@ public interface FsInquiryOrderReportMapper
             " LEFT JOIN company_user cuu ON cuu.user_id=fio.company_user_id " +
             " LEFT JOIN company_user fz ON fz.user_id=ior.triage_user_id " +
             " LEFT join fs_patient fp on ior.patient_id = fp.patient_id " +
+            "LEFT JOIN (SELECT sp.*,ROW_NUMBER() OVER (PARTITION BY sp.pay_code ORDER BY sp.create_time DESC) as rn\n" +
+            "        FROM fs_store_payment sp) sp_latest ON sp_latest.business_code = fio.order_sn AND sp_latest.rn = 1\n" +
+            "        LEFT JOIN fs_course_play_source_config csc ON csc.appid = sp_latest.app_id" +
             " WHERE fio.`status`!=1 and fio.inquiry_sub_type!=3"+
             "            <if test=\"maps.orderId != null \"> and fio.order_sn = #{maps.orderId}</if>\n" +
+            "            <if test=\"maps.coursePlaySourceConfigId != null\"> and csc.id = #{maps.coursePlaySourceConfigId}</if>\n" +
             "            <if test=\"maps.doctorName != null \"> and d.doctor_name = #{maps.doctorName}</if>\n" +
             "            <if test=\"maps.reportSn != null  and maps.reportSn != ''\"> and ior.report_sn = #{maps.reportSn}</if>\n" +
             "            <if test=\"maps.sTime != null \">  and DATE(ior.create_time) &gt;= DATE(#{maps.sTime})</if>\n" +

+ 11 - 3
fs-service/src/main/java/com/fs/his/mapper/FsPackageOrderMapper.java

@@ -78,16 +78,20 @@ public interface FsPackageOrderMapper
     @Select({"<script> " +
             "select o.order_id,o.package_second_name,o.source,o.order_sn,o.package_name,o.pay_time,o.is_pay, o.days,o.pay_price, " +
             "o.pay_money,o.pay_type,o.`status`,o.package_sub_type,o.create_time,o.start_time,o.finish_time      " +
-            ",d.doctor_name,u.nick_name,u.phone,c.company_name,cu.nick_name company_user_name, " +
-            "patient_json->>'$.patientName' as patientName,fso.delivery_status,fso.delivery_pay_status  " +
+            ",d.doctor_name,u.nick_name,u.phone,c.company_name,cu.nick_name company_user_name,csc.name miniProgramName," +
+            "JSON_UNQUOTE(JSON_EXTRACT(o.patient_json, '$.patientName')) AS patientName,fso.delivery_status,fso.delivery_pay_status  " +
             "from fs_package_order o " +
             "LEFT JOIN fs_doctor d ON d.doctor_id=o.doctor_id " +
             "LEFT JOIN fs_user u ON u.user_id=o.user_id " +
             "LEFT JOIN company c on c.company_id =o.company_id " +
             "LEFT JOIN company_user cu on cu.user_id=o.company_user_id " +
             "LEFT JOIN fs_store_order fso ON fso.order_id= o.store_order_id "+
+            "LEFT JOIN (SELECT sp.*,ROW_NUMBER() OVER (PARTITION BY sp.business_code ORDER BY sp.create_time DESC) as rn\n" +
+            "        FROM fs_store_payment sp) sp_latest ON sp_latest.business_code = o.order_sn AND sp_latest.rn = 1\n" +
+            "        LEFT JOIN fs_course_play_source_config csc ON csc.appid = sp_latest.app_id" +
             " where 1 = 1 \n" +
             "            <if test=\"maps.orderSn != null  and maps.orderSn != ''\"> and o.order_sn = #{maps.orderSn}</if>\n" +
+            "            <if test=\"maps.coursePlaySourceConfigId != null\"> and csc.id = #{maps.coursePlaySourceConfigId}</if>\n" +
             "            <if test=\"maps.phone != null and maps.phone != '' \">and u.phone = #{maps.phone} </if>\n" +
             "            <if test=\"maps.doctorName != null \">and d.doctor_name like concat('%', #{maps.doctorName}, '%')</if>\n" +
             "            <if test=\"maps.packageName != null  and maps.packageName != ''\"> and o.package_name like concat('%', #{maps.packageName}, '%')</if>\n" +
@@ -146,9 +150,13 @@ public interface FsPackageOrderMapper
     @Select("SELECT * FROM fs_store_payment where business_id=#{orderId} and status=1 and business_type=3")
     List<FsStorePayment> selectFsPackagePaymentByOrderId(Long orderId);
     @Select({"<script> " +
-            "select o.order_id,o.order_sn,o.package_name,o.source,o.pay_time,o.follow_rate,o.cycle,o.follow_num,o.inquiry_cost_price,o.product_cost_price,o.total_cost_price,o.cost_discount_money,o.total_price,o.discount_money,o.pay_delivery,o.is_pay,o.remark, o.days,o.pay_price,o.pay_money,o.pay_type,o.`status`,o.package_sub_type,o.create_time,o.start_time,o.refund_status,o.finish_time,d.doctor_name,u.nick_name,u.phone,c.company_name,cu.nick_name company_user_name,patient_json->>'$.patientName' as patientName,fso.delivery_status,fso.delivery_pay_status from fs_package_order o LEFT JOIN fs_doctor d ON d.doctor_id=o.doctor_id LEFT JOIN fs_user u ON u.user_id=o.user_id LEFT JOIN company c on c.company_id =o.company_id LEFT JOIN company_user cu on cu.user_id=o.company_user_id LEFT JOIN fs_store_order fso ON fso.order_id= o.store_order_id "+
+            "select o.order_id,o.order_sn,o.package_name,o.source,o.pay_time,o.follow_rate,o.cycle,o.follow_num,o.inquiry_cost_price,o.product_cost_price,o.total_cost_price,o.cost_discount_money,o.total_price,o.discount_money,o.pay_delivery,o.is_pay,o.remark, o.days,o.pay_price,o.pay_money,o.pay_type,o.`status`,o.package_sub_type,o.create_time,o.start_time,o.refund_status,o.finish_time,d.doctor_name,u.nick_name,u.phone,c.company_name,cu.nick_name company_user_name,patient_json->>'$.patientName' as patientName,fso.delivery_status,fso.delivery_pay_status ,csc.name miniProgramName from fs_package_order o LEFT JOIN fs_doctor d ON d.doctor_id=o.doctor_id LEFT JOIN fs_user u ON u.user_id=o.user_id LEFT JOIN company c on c.company_id =o.company_id LEFT JOIN company_user cu on cu.user_id=o.company_user_id LEFT JOIN fs_store_order fso ON fso.order_id= o.store_order_id "+
+            "LEFT JOIN (SELECT sp.*,ROW_NUMBER() OVER (PARTITION BY sp.business_code ORDER BY sp.create_time DESC) as rn\n" +
+            "        FROM fs_store_payment sp) sp_latest ON sp_latest.business_code = o.order_sn AND sp_latest.rn = 1\n" +
+            "        LEFT JOIN fs_course_play_source_config csc ON csc.appid = sp_latest.app_id" +
             "  <where>  \n" +
             "            <if test=\"orderSn != null  and orderSn != ''\"> and o.order_sn =#{orderSn}</if>\n" +
+            "            <if test=\"coursePlaySourceConfigId != null\"> and csc.id = #{coursePlaySourceConfigId}</if>\n" +
             "            <if test=\"phone != null \">and u.phone like concat( #{phone}, '%')</if>\n" +
             "            <if test=\"doctorName != null \">and d.doctor_name like concat(#{doctorName}, '%')</if>\n" +
             "            <if test=\"packageName != null  and packageName != ''\"> and o.package_name like concat('%', #{packageName}, '%')</if>\n" +

+ 3 - 0
fs-service/src/main/java/com/fs/his/mapper/FsStoreOrderItemMapper.java

@@ -6,6 +6,7 @@ import com.fs.his.vo.FsStoreOrderItemExcelVO;
 import com.fs.his.vo.FsStoreOrderItemListDVO;
 import com.fs.his.vo.FsStoreOrderItemListUVO;
 import com.fs.his.vo.FsStoreOrderItemVO;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
 /**
@@ -72,4 +73,6 @@ public interface FsStoreOrderItemMapper
     List<FsStoreOrderItemExcelVO> selectFsStoreOrderItemExcelVOListByOrderId(Long orderId);
     @Select("select product_id,json_info,num from fs_store_order_item where order_id=#{orderId}")
     List<FsStoreOrderItemListDVO> selectFsStoreOrderItemListDVOByOrderId(Long orderId);
+
+    List<FsStoreOrderItem> selectFsStoreOrderItemListByItemIds(@Param("itemIds") List<Long> itemIds);
 }

+ 3 - 7
fs-service/src/main/java/com/fs/his/mapper/FsStoreOrderMapper.java

@@ -670,17 +670,13 @@ public interface FsStoreOrderMapper
             " left join company_user cu on cu.user_id=so.company_user_id " +
             " left join company_tcm_schedule cts on cts.id = so.schedule_id " +
             " left join fs_patient pat on pat.patient_id = p.patient_id " +
-            "LEFT JOIN (\n" +
-            "        SELECT\n" +
-            "        sp.*,\n" +
-            "        ROW_NUMBER() OVER (PARTITION BY sp.pay_code ORDER BY sp.create_time DESC) as rn\n" +
-            "        FROM fs_store_payment sp\n" +
-            "        ) sp_latest ON sp_latest.business_code = so.order_code AND sp_latest.rn = 1\n" +
+            "LEFT JOIN (SELECT sp.*,ROW_NUMBER() OVER (PARTITION BY sp.business_code ORDER BY sp.create_time DESC) as rn\n" +
+            "        FROM fs_store_payment sp) sp_latest ON sp_latest.business_code = so.order_code AND sp_latest.rn = 1\n" +
             "        LEFT JOIN fs_course_play_source_config csc ON csc.appid = sp_latest.app_id" +
             " WHERE so.is_del=0 "+
             "            <if test=\"maps.packageSecondName != null and maps.packageSecondName != '' \"> and so.package_second_name like concat('%', #{maps.packageSecondName}, '%')</if>"+
             "            <if test=\"maps.storeId != null \"> and so.store_id = #{maps.storeId}</if>\n" +
-            "            <if test=\"maps.coursePlaySourceConfigId != null\"> and csc.id = #{maps.coursePlaySourceConfigId}</if>" +
+            "            <if test=\"maps.coursePlaySourceConfigId != null\"> and csc.id = #{maps.coursePlaySourceConfigId}</if>\n" +
             "            <if test=\"maps.source != null \"> and so.source = #{maps.source}</if>\n" +
             "            <if test=\"maps.orderCode != null  and maps.orderCode != ''\"> and so.order_code = #{maps.orderCode}</if>\n" +
             "            <if test=\"maps.prescribeCode != null  and maps.prescribeCode != ''\"> and p.prescribe_code = #{maps.prescribeCode}</if>\n" +

+ 13 - 2
fs-service/src/main/java/com/fs/his/mapper/FsStorePaymentMapper.java

@@ -70,12 +70,17 @@ public interface FsStorePaymentMapper
     public int deleteFsStorePaymentByPaymentIds(Long[] paymentIds);
 
     @Select({"<script> " +
-            "SELECT sp.*,u.nick_name,u.phone,s.store_name,c.company_name,cu.nick_name as company_user_nick_name FROM fs_store_payment sp " +
+            "SELECT sp.*,u.nick_name,u.phone,s.store_name,c.company_name,cu.nick_name as company_user_nick_name ,csc.name miniProgramName FROM fs_store_payment sp " +
             " LEFT JOIN  fs_user u ON u.user_id=sp.user_id LEFT JOIN fs_store s ON s.store_id=sp.store_id " +
             " left join company_user cu on sp.company_user_id=cu.user_id " +
             " left join company c on c.company_id=sp.company_id "+
+            "LEFT JOIN (SELECT t.* FROM ( SELECT sp2.*, ROW_NUMBER() OVER (PARTITION BY sp2.business_code ORDER BY sp2.create_time DESC, sp2.payment_id DESC) as rn " +
+            "FROM fs_store_payment sp2) t WHERE t.rn = 1) " +
+            "latest_sp ON latest_sp.business_code = sp.business_code "+
+            "LEFT JOIN fs_course_play_source_config csc ON csc.appid = sp.app_id" +
             " where 1=1 " +
             "            <if test=\"maps.payCode != null  and maps.payCode != ''\"> and sp.pay_code = #{maps.payCode}</if>\n" +
+            "            <if test=\"maps.coursePlaySourceConfigId != null\"> and csc.id = #{maps.coursePlaySourceConfigId}</if>\n" +
             "            <if test=\"maps.payTypeCode != null  and maps.payTypeCode != ''\"> and sp.pay_type_code = #{maps.payTypeCode}</if>\n" +
             "            <if test=\"maps.businessCode != null  and maps.businessCode != ''\"> and sp.business_code = #{maps.businessCode}</if>\n" +
             "            <if test=\"maps.tradeNo != null  and maps.tradeNo != ''\"> and sp.trade_no = #{maps.tradeNo}</if>\n" +
@@ -176,7 +181,8 @@ public interface FsStorePaymentMapper
     @Select("select * from fs_store_payment where business_type=#{type} and  business_id=#{businessId} and (status=1 or starus=-1)")
     List<FsStorePayment> selectFsStorePaymentByPayOrRefund(int i, Long orderId);
     @Select({"<script> " +
-            " SELECT CONCAT('package-', sp.pay_code) AS pay_code,sp.*,u.nick_name,u.phone,s.store_name,c.company_name,cu.nick_name as companyUserName,fso.delivery_name,fso.package_name,fso.package_second_name FROM fs_store_payment sp " +
+            " SELECT CONCAT('package-', sp.pay_code) AS pay_code,sp.*,u.nick_name,u.phone,s.store_name,c.company_name,cu.nick_name as companyUserName,fso.delivery_name,fso.package_name,fso.package_second_name ,csc.name miniProgramName " +
+            " FROM fs_store_payment sp " +
             " LEFT JOIN  fs_user u ON u.user_id=sp.user_id " +
             " LEFT JOIN fs_store s ON s.store_id=sp.store_id " +
             " left join fs_store_order fso on fso.order_code = sp.business_code " +
@@ -187,9 +193,14 @@ public interface FsStorePaymentMapper
             "LEFT JOIN company_user cu ON \n" +
             "    ( cu.user_id = fso.company_user_id) OR\n" +
             "    (cu.user_id = fio.company_user_id) " +
+            "LEFT JOIN (SELECT t.* FROM ( SELECT sp2.*, ROW_NUMBER() OVER (PARTITION BY sp2.business_code ORDER BY sp2.create_time DESC, sp2.payment_id DESC) as rn " +
+            "FROM fs_store_payment sp2) t WHERE t.rn = 1) " +
+            "latest_sp ON latest_sp.business_code = sp.business_code "+
+            "LEFT JOIN fs_course_play_source_config csc ON csc.appid = sp.app_id" +
             " where 1=1 " +
             "            <if test=\"maps.payCode != null  and maps.payCode != ''\"> and sp.pay_code = #{maps.payCode}</if>\n" +
             "            <if test=\"maps.payTypeCode != null  and maps.payTypeCode != ''\"> and sp.pay_type_code = #{maps.payTypeCode}</if>\n" +
+            "            <if test=\"maps.coursePlaySourceConfigId != null\"> and csc.id = #{maps.coursePlaySourceConfigId}</if>\n" +
             "            <if test=\"maps.businessCode != null  and maps.businessCode != ''\"> and sp.business_code = #{maps.businessCode}</if>\n" +
             "            <if test=\"maps.tradeNo != null  and maps.tradeNo != ''\"> and sp.trade_no = #{maps.tradeNo}</if>\n" +
             "            <if test=\"maps.userId != null \"> and sp.user_id = #{maps.userId}</if>\n" +

+ 2 - 1
fs-service/src/main/java/com/fs/his/param/FsInquiryOrderParam.java

@@ -129,7 +129,8 @@ public class FsInquiryOrderParam {
     private String payTimeRange;
 
     private String[] payTimeList;
-
+    //小程序id
+    private  Long coursePlaySourceConfigId;
     //部门id
     private Long deptId;
     //公司员工昵称

+ 2 - 0
fs-service/src/main/java/com/fs/his/param/FsInquiryOrderReportParam.java

@@ -46,4 +46,6 @@ public class FsInquiryOrderReportParam {
     private String patientMobile;
     private  String fzName;
     private Long taskId;//任务ID
+    // 小程序id
+    private Long coursePlaySourceConfigId;
 }

+ 2 - 0
fs-service/src/main/java/com/fs/his/param/FsPackageOrderParam.java

@@ -103,5 +103,7 @@ public class FsPackageOrderParam  extends BaseEntity{
 
     private String source;
 
+    //小程序id
+    private Long coursePlaySourceConfigId;
     private Long taskId;//任务ID
 }

+ 10 - 0
fs-service/src/main/java/com/fs/his/param/FsStoreOrderSalesParam.java

@@ -1,7 +1,13 @@
 package com.fs.his.param;
 
+import com.fs.hisStore.param.FsStoreOrderRefundByProductParam;
+import com.fs.hisStore.param.FsStoreOrderRefundParam;
+import com.fs.tzBankPay.doman.RefundParam;
 import lombok.Data;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 @Data
 public class FsStoreOrderSalesParam {
 
@@ -14,4 +20,8 @@ public class FsStoreOrderSalesParam {
     private String operator;
 
     private Long companyId;
+
+    private BigDecimal refundAmount;
+
+    private List<FsStoreOrderRefundByProductParam> refundList;
 }

+ 2 - 0
fs-service/src/main/java/com/fs/his/param/FsStorePaymentParam.java

@@ -116,6 +116,8 @@ public class FsStorePaymentParam extends BaseEntity {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
+    // 小程序ID
+    private Long coursePlaySourceConfigId;
     private String appId;
 
 }

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

@@ -265,4 +265,6 @@ public interface IFsStoreOrderService
     Map<String,BigDecimal> selectFsStoreOrderStatistics(FsStoreOrderParam fsStoreOrder);
 
     String selectFsStoreOrderProductStatistics(FsStoreOrderParam fsStoreOrder);
+
+    int afterSalesByProduct(FsStoreOrderSalesParam fsStoreOrder);
 }

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

@@ -456,6 +456,9 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
         }
         if (payments != null && payments.size() > 0) {
             FsStorePayment payment = payments.get(0);
+            if (reMoney.compareTo(payment.getPayMoney())>0) {
+                return 0; //退款金额不能大于实际支付金额
+            }
             String json = configService.selectConfigByKey("his.pay");
             if (payment.getPayMode().equals("wx")) {
                 WxPayConfig payConfig = new WxPayConfig();
@@ -481,7 +484,7 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
                         paymentMap.setPaymentId(payment.getPaymentId());
                         paymentMap.setStatus(-1);
                         paymentMap.setRefundTime(DateUtils.getNowDate());
-                        paymentMap.setRefundMoney(payment.getPayMoney());
+                        paymentMap.setRefundMoney(reMoney);
                         fsStorePaymentMapper.updateFsStorePayment(paymentMap);
                     } else {
                         throw new CustomException("退款请求失败" + refundQueryResult.getReturnMsg());
@@ -492,7 +495,7 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
             } else if (payment.getPayMode().equals("yb")) {
                 //易宝
                 RefundDTO refundDTO = new RefundDTO();
-                refundDTO.setRefundMoney(payment.getPayMoney().toString());
+                refundDTO.setRefundMoney(reMoney.toString());
                 refundDTO.setLowRefundNo(orderType + "-" + payment.getPayCode());
                 refundDTO.setUpOrderId(payment.getTradeNo());
                 com.fs.ybPay.domain.RefundResult result = payService.refund(refundDTO);
@@ -502,7 +505,7 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
                     paymentMap.setPaymentId(payment.getPaymentId());
                     paymentMap.setStatus(-1);
                     paymentMap.setRefundTime(DateUtils.getNowDate());
-                    paymentMap.setRefundMoney(payment.getPayMoney());
+                    paymentMap.setRefundMoney(reMoney);
                     fsStorePaymentMapper.updateFsStorePayment(paymentMap);
                 } else {
                     throw new CustomException("退款请求失败" + result.getMessage());
@@ -518,7 +521,7 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
                 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
                 tzBankResult.setTrxSendTime(sdf.format(new Date()));
                 // 退款金额
-                tzBankResult.setRefundOrdTransAmt(payment.getPayMoney().doubleValue());
+                tzBankResult.setRefundOrdTransAmt(reMoney.doubleValue());
                 TzBankResult<RefundResult> result = tzBankService.refund(tzBankResult);
                 logger.info("订单退款返回结果:退款订单id:" + order.getOrderId() + result);
                 if (result.getBody().getRefundOrdStatus().equals("90") || result.getBody().getRefundOrdStatus().equals("60")) {
@@ -526,31 +529,32 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService {
                     paymentMap.setPaymentId(payment.getPaymentId());
                     paymentMap.setStatus(-1);
                     paymentMap.setRefundTime(DateUtils.getNowDate());
-                    paymentMap.setRefundMoney(payment.getPayMoney());
+                    paymentMap.setRefundMoney(reMoney);
                     fsStorePaymentMapper.updateFsStorePayment(paymentMap);
                 } else {
                     throw new CustomException("退款请求失败" + result.getRetMsg());
                 }
             } else if (payment.getPayMode().equals("hf")) {
                 V2TradePaymentScanpayRefundRequest request = new V2TradePaymentScanpayRefundRequest();
-                request.setOrdAmt(payment.getPayMoney().toString());
+//                request.setOrdAmt(payment.getPayMoney().toString());
+                request.setOrdAmt(reMoney.toString());
                 request.setOrgReqDate(new SimpleDateFormat("yyyyMMdd").format(payment.getCreateTime()));
                 request.setReqSeqId("refund-" + payment.getPayCode());
                 Map<String, Object> extendInfoMap = new HashMap<>();
                 extendInfoMap.put("org_req_seq_id", orderType + "-" + payment.getPayCode());
                 request.setExtendInfo(extendInfoMap);
-                HuiFuRefundResult refund = huiFuService.refund(request);
-                logger.info("订单退款返回结果:退款订单id:" + order.getOrderId() + refund);
-                if ((refund.getResp_code().equals("00000000") || refund.getResp_code().equals("00000100")) && (refund.getTrans_stat().equals("S") || refund.getTrans_stat().equals("P"))) {
-                    FsStorePayment paymentMap = new FsStorePayment();
-                    paymentMap.setPaymentId(payment.getPaymentId());
-                    paymentMap.setStatus(-1);
-                    paymentMap.setRefundTime(DateUtils.getNowDate());
-                    paymentMap.setRefundMoney(payment.getPayMoney());
-                    fsStorePaymentMapper.updateFsStorePayment(paymentMap);
-                } else {
-                    throw new CustomException("退款请求失败" + refund.getResp_desc());
-                }
+//                HuiFuRefundResult refund = huiFuService.refund(request);
+//                logger.info("订单退款返回结果:退款订单id:" + order.getOrderId() + refund);
+//                if ((refund.getResp_code().equals("00000000") || refund.getResp_code().equals("00000100")) && (refund.getTrans_stat().equals("S") || refund.getTrans_stat().equals("P"))) {
+//                    FsStorePayment paymentMap = new FsStorePayment();
+//                    paymentMap.setPaymentId(payment.getPaymentId());
+//                    paymentMap.setStatus(-1);
+//                    paymentMap.setRefundTime(DateUtils.getNowDate());
+//                    paymentMap.setRefundMoney(payment.getPayMoney());
+//                    fsStorePaymentMapper.updateFsStorePayment(paymentMap);
+//                } else {
+//                    throw new CustomException("退款请求失败" + refund.getResp_desc());
+//                }
             }
             //管易作废
             if (StringUtils.isNotEmpty(fsStoreOrder.getExtendOrderId())) {

+ 139 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsStoreOrderServiceImpl.java

@@ -49,6 +49,7 @@ import com.fs.hisStore.domain.FsStoreOrderScrm;
 import com.fs.hisStore.domain.FsStorePaymentScrm;
 import com.fs.hisStore.mapper.FsStoreOrderScrmMapper;
 import com.fs.hisStore.mapper.FsStorePaymentScrmMapper;
+import com.fs.hisStore.param.FsStoreOrderRefundByProductParam;
 import com.fs.hisapi.domain.ApiResponse;
 import com.fs.hisapi.param.CreateOrderParam;
 import com.fs.hisapi.param.RecipeDetailParam;
@@ -3726,6 +3727,16 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
                 param.setDeliveryStatus((vo.getDeliveryStatus()==null|| vo.getDeliveryStatus().isEmpty())?null:Integer.valueOf(vo.getDeliveryStatus()));
                 param.setDeliveryType(vo.getDeliveryType().isEmpty()?null:vo.getDeliveryType());
                 param.setUpdateTime(DateUtils.getNowDate());
+
+                //修改订单金额
+                BigDecimal payRemain = vo.getPayRemain();
+                if (payRemain != null){
+                    if (!payRemain.equals(o.getPayRemain())){
+                        BigDecimal payMoney = o.getPayMoney(); //实收金额
+                        param.setPayPrice(payMoney.add(payRemain)); //应收金额
+                        param.setPayRemain(vo.getPayRemain());
+                    }
+                }
                 fsStoreOrderMapper.updateFsStoreOrder(param);
 
                 successNum++;
@@ -3762,4 +3773,132 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
         return fsStoreOrderMapper.selectFsStoreOrderProductStatistics(fsStoreOrder);
     }
 
+    @Override
+    public int afterSalesByProduct(FsStoreOrderSalesParam param) {
+        FsStoreOrder order = fsStoreOrderMapper.selectFsStoreOrderByOrderId(param.getOrderId());
+        if (order.getStatus() < 0) {
+            throw new CustomException("订单不可提交售后");
+        }
+        //判断总退款金额是否小于等于实付金额
+        BigDecimal refundAmount = param.getRefundAmount();
+        if (refundAmount.compareTo(order.getPayMoney())>0){
+            throw new CustomException("退款金额不能大于实付金额");
+        }
+        List<FsStoreOrderRefundByProductParam> refundList = param.getRefundList();
+        List<Long> itemIds = refundList.stream().filter(item->item.getNum()>0).map(FsStoreOrderRefundByProductParam::getItemId).collect(Collectors.toList());
+        if (itemIds.isEmpty()){
+            throw new CustomException("没有选择需要退款的商品/选择退款商品数量不能为0");
+        }
+        List<FsStoreOrderItem> fsStoreOrderItems = fsStoreOrderItemMapper.selectFsStoreOrderItemListByItemIds(itemIds);
+        if (fsStoreOrderItems.size() != itemIds.size()){
+            throw new CustomException("所退商品明细不存在");
+        }
+        FsStoreAfterSales fsStoreAfterSales = new FsStoreAfterSales();
+        fsStoreAfterSales.setOrderId(order.getOrderId());
+        fsStoreAfterSales.setStoreId(order.getStoreId());
+        fsStoreAfterSales.setRefundAmount(refundAmount);
+        fsStoreAfterSales.setCreateTime(DateUtils.getNowDate());
+        if (order.getStatus() == 2 || order.getStatus() == 3) {
+            fsStoreAfterSales.setRefundType(0);
+        }
+        if (order.getStatus() == 4) {
+            FsStore fsStore = fsStoreMapper.selectFsStoreByStoreId(order.getStoreId());
+            fsStoreAfterSales.setRefundType(1);
+            fsStoreAfterSales.setPhoneNumber(fsStore.getRefundPhone());
+            fsStoreAfterSales.setAddress(fsStore.getRefundAddress());
+            fsStoreAfterSales.setConsignee(fsStore.getRefundConsignee());
+        }
+        fsStoreAfterSales.setStatus(0);
+        fsStoreAfterSales.setDeptId(order.getDeptId());
+        fsStoreAfterSales.setSalesStatus(0);
+        fsStoreAfterSales.setOrderStatus(order.getStatus());
+        fsStoreAfterSales.setUserId(order.getUserId());
+        fsStoreAfterSales.setCompanyId(order.getCompanyId());
+        fsStoreAfterSales.setCompanyUserId(order.getCompanyUserId());
+        fsStoreAfterSales.setIsDel(0);
+        fsStoreAfterSalesService.insertFsStoreAfterSales(fsStoreAfterSales);
+
+        for (FsStoreOrderItem fsStoreOrderItem : fsStoreOrderItems) {
+            for (FsStoreOrderRefundByProductParam fsStoreOrderRefundByProductParam : refundList) {
+                if (Objects.equals(fsStoreOrderRefundByProductParam.getItemId(), fsStoreOrderItem.getItemId())) {
+                    FsStoreAfterSalesItem item = new FsStoreAfterSalesItem();
+                    item.setAfterSalesId(fsStoreAfterSales.getId());
+                    item.setProductId(fsStoreOrderItem.getProductId());
+                    String jsonInfo = fsStoreOrderItem.getJsonInfo();
+                    FsProdItemDTO fsProdItemDTO = JSON.parseObject(jsonInfo, FsProdItemDTO.class);
+                    fsProdItemDTO.setPrice(fsStoreOrderRefundByProductParam.getMoney());
+                    fsProdItemDTO.setNum(fsStoreOrderRefundByProductParam.getNum());
+                    item.setJsonInfo(JSONUtil.toJsonStr(fsProdItemDTO));
+                    fsStoreAfterSalesItemMapper.insertFsStoreAfterSalesItem(item);
+                    break;
+                }
+            }
+        }
+        //增加操作日志
+        FsStoreAfterSalesLogs logs = new FsStoreAfterSalesLogs();
+        logs.setChangeTime(new DateTime());
+        logs.setChangeType(0);
+        logs.setStoreAfterSalesId(fsStoreAfterSales.getId());
+        logs.setOperator(param.getOperator());
+        logs.setCompanyId(param.getCompanyId());
+        logs.setChangeMessage("平台提交售后");
+        fsStoreAfterSalesLogsMapper.insertFsStoreAfterSalesLogs(logs);
+        //添加订单日志
+        fsStoreOrderLogsService.create(order.getOrderId(), FsStoreOrderLogEnum.REFUND_ORDER_PLATFORM.getValue(),
+                param.getOperator() + " " +FsStoreOrderLogEnum.REFUND_ORDER_PLATFORM.getDesc());
+        //判断是否开启erp
+        FsSysConfig sysConfig = configUtil.getSysConfig();
+        Integer erpOpen = sysConfig.getErpOpen();
+        if (erpOpen != null && erpOpen == 1) {
+            //判断erp类型
+            Integer erpType = sysConfig.getErpType();
+            if (erpType != null) {
+
+                IErpOrderService erpOrderService = null;
+                if (erpType == 1) {
+                    //管易
+                    erpOrderService = gyOrderService;
+                } else if (erpType == 2) {
+                    //旺店通
+                    erpOrderService = wdtOrderService;
+                } else if (erpType == 3) {
+                    //瀚智
+                    erpOrderService = hzOMSOrderService;
+                } else if (erpType == 4) {
+                    //瀚智
+                    erpOrderService = dfOrderService;
+                } else if (erpType == 5) {
+                    erpOrderService = jSTOrderService;
+                }else if (erpType == 6) {
+                    erpOrderService = k9OrderService;
+                }
+                if (erpOrderService != null && StringUtils.isNotEmpty(order.getExtendOrderId())) {
+                    if (!order.getExtendOrderId().equals("HIS")) {
+                        if (erpType != 3) {
+                            ErpRefundUpdateRequest request = new ErpRefundUpdateRequest();
+                            request.setTid(order.getOrderCode());
+                            request.setOid(order.getOrderCode());
+                            request.setRefund_state(1);
+                            erpOrderService.refundUpdate(request);
+                        } else {
+                            ErpRefundOrder erpRefundOrder = new ErpRefundOrder();
+                            erpRefundOrder.setOrderCode(order.getOrderCode());
+                            erpRefundOrder.setAfterSalesId(fsStoreAfterSales.getId());
+                            erpOrderService.refundOrder(erpRefundOrder);
+                        }
+                    }
+                }
+            }
+        }
+        order.setStatus(-1);
+        order.setRefundStatus(1 + "");
+        fsStoreOrderMapper.updateFsStoreOrder(order);
+        if (order.getPackageOrderId() != null) {
+            FsPackageOrder fsPackageOrder = fsPackageOrderMapper.selectFsPackageOrderByOrderId(order.getPackageOrderId());
+            fsPackageOrder.setRefundStatus(1);
+            fsPackageOrderMapper.updateFsPackageOrder(fsPackageOrder);
+        }
+        return 1;
+    }
+
 }

+ 3 - 1
fs-service/src/main/java/com/fs/his/vo/FsInquiryOrderListVO.java

@@ -107,7 +107,9 @@ public class FsInquiryOrderListVO {
     /** 问诊类型 */
     @Excel(name = "问诊类型")
     private Integer inquiryType;
-
+    //小程序名称
+    @Excel(name = "小程序名称")
+    private String miniProgramName;
     private Integer inquirySubType;
     /** 创建时间 */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

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

@@ -101,6 +101,8 @@ public class FsInquiryOrderReportListVO {
     private  String DiseaseName;
     @Excel(name = "分诊人名称")
     private  String fzName;
+    @Excel(name = "小程序姓名")
+    private String miniProgramName;
 
 
 }

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

@@ -117,4 +117,6 @@ public class FsPackageOrderExcelVO {
     private Integer deliveryPayStatus;
     @Excel(name = "来源",dictType="sys_order_source")
     private Integer source;
+    @Excel(name = "微信小程序姓名")
+    private String miniProgramName;
 }

+ 3 - 0
fs-service/src/main/java/com/fs/his/vo/FsPackageOrderListVO.java

@@ -83,6 +83,9 @@ public class FsPackageOrderListVO {
     private Integer deliveryStatus;
     @Excel(name = "物流状态")
     private Integer deliveryPayStatus;
+    //小程序名称
+    @Excel(name = "小程序名称")
+    private String miniProgramName;
     private Integer packageSubType;
     private BigDecimal inquiryPrice;
     private BigDecimal productPrice;

+ 4 - 0
fs-service/src/main/java/com/fs/his/vo/FsStoreOrderStatusExcelVO.java

@@ -3,6 +3,8 @@ package com.fs.his.vo;
 import com.fs.common.annotation.Excel;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 @Data
 public class FsStoreOrderStatusExcelVO {
 
@@ -12,6 +14,8 @@ public class FsStoreOrderStatusExcelVO {
     @Excel(name = "订单状态",dictType = "sys_order_status")
     private String status;
 
+    @Excel(name = "物流代收金额")
+    private BigDecimal payRemain;
 
     /** 物流状态 */
     @Excel(name = "物流状态",dictType = "sys_store_order_delivery_status")

+ 8 - 0
fs-service/src/main/java/com/fs/his/vo/FsStorePaymentExcelVO.java

@@ -84,4 +84,12 @@ public class FsStorePaymentExcelVO {
 
     @Excel(name = "套餐包别名")
     private String packageSecondName;
+
+    // 小程序名称
+    @Excel(name = "小程序名称")
+    private String miniProgramName;
+
+
+
+
 }

+ 4 - 2
fs-service/src/main/java/com/fs/his/vo/FsStorePaymentVO.java

@@ -85,8 +85,8 @@ public class FsStorePaymentVO {
     /** 创建时间 */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
-
-
+   // 小程序id
+    private Long coursePlaySourceConfigId;
     /** 更新时间 */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
@@ -103,4 +103,6 @@ public class FsStorePaymentVO {
     private Integer shareStatus;
     private String shareCode;
     private BigDecimal shareMoney;
+    // 小程序名称
+    private String miniProgramName;
 }

+ 19 - 0
fs-service/src/main/java/com/fs/hisStore/param/FsStoreOrderRefundByProductParam.java

@@ -0,0 +1,19 @@
+package com.fs.hisStore.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+public class FsStoreOrderRefundByProductParam implements Serializable
+{
+    private Long itemId; //订单明细id
+
+    private Integer num; //退款数量
+
+    private BigDecimal money; //退款单价
+
+
+}

+ 1 - 1
fs-service/src/main/resources/application-config-druid-bjczwh.yml

@@ -86,7 +86,7 @@ ipad:
   ipadUrl: http://ipad.cdwjyyh.com
   aiApi: 1212121212
   voiceApi:
-
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-bnkc.yml

@@ -85,6 +85,7 @@ ipad:
   ipadUrl: http://ipad.cdwjyyh.com
   aiApi: 1212121212
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-cqtyt.yml

@@ -86,6 +86,7 @@ ipad:
   ipadUrl: http://qwipad.nmghysmytdyf.com
   aiApi: http://127.0.0.1:3000/api
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id: V
   inquiry_temp_id: 9

+ 5 - 4
fs-service/src/main/resources/application-config-druid-czt.yml

@@ -10,8 +10,8 @@ logging:
 wx:
   miniapp:
     configs:
-      - appid: wx94951f52d3ac5e25   #北京存在文化
-        secret: bfe27b20c6e3c4232a1d4ef36228e84b #北京存在文化
+      - appid: wxa6a215ad7353fd8a   #纯正堂药速通
+        secret: 4aa21869d9ed5bfc9477afb231a30f05 #纯正堂药速通
         token: Ncbnd7lJvkripxxna6NAWCxCrvC
         aesKey: HlEiBB55eaWUaeBVAQO3cWKWPYv1vOVQSq7nFNICw4E
         msgDataFormat: JSON
@@ -83,9 +83,10 @@ headerImg:
   imgUrl:
 
 ipad:
-  ipadUrl: http://ipad.cdwjyyh.com
+  ipadUrl: http://ipad.cykbja.cn
   aiApi: 1212121212
-
+  commonApi:
+  voiceApi:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-drk-test.yml

@@ -85,6 +85,7 @@ ipad:
   ipadUrl: http://ipad.cdwjyyh.com
   aiApi: 1212121212
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-drk.yml

@@ -85,6 +85,7 @@ ipad:
   ipadUrl: http://ipad.cdwjyyh.com
   aiApi: 1212121212
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-fby.yml

@@ -106,6 +106,7 @@ ipad:
   ipadUrl: http://ipad.jiuzhouzaixian.com
   aiApi:
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id: VXEvKaGNPFuJmhWK9O_QPrTZxe9umDCukq-maI8Vdek
   inquiry_temp_id: 9POPYeqhI48LOPvq-Rfoklze7H-9SlunJKh10Qt4_2I

+ 1 - 0
fs-service/src/main/resources/application-config-druid-hcl.yml

@@ -91,6 +91,7 @@ ipad:
   ipadUrl: http://ipad.cdwjyyh.com
   aiApi:
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-hdt.yml

@@ -87,6 +87,7 @@ ipad:
 #  aiApi: http://152.136.202.157:3000/api
   aiApi: http://49.232.181.28:3000/api
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-hst.yml

@@ -83,6 +83,7 @@ ipad:
   ipadUrl: http://ipad.schstyl.cn
   aiApi:
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-hyt.yml

@@ -78,6 +78,7 @@ ipad:
   ipadUrl:
   aiApi:
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id: -SjnK9K6cNKASa6AD9Q_c0YT7J1lPTEpPIpqbMJF8F0
   inquiry_temp_id: hwFXVh0AWqeasBsZpa0-urb3CrPeYEwBiy3P6AMMGFQ

+ 1 - 0
fs-service/src/main/resources/application-config-druid-hzyy.yml

@@ -91,6 +91,7 @@ ipad:
   ipadUrl: http://139.159.133.223:8667
   aiApi: http://1.95.196.10:3000/api
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-jkj.yml

@@ -84,6 +84,7 @@ headerImg:
 ipad:
   ipadUrl: http://ipad.cdwjyyh.com
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-jnlzjk.yml

@@ -86,6 +86,7 @@ ipad:
   ipadUrl: http://ipadjnlzjk.ylrztop.com
   aiApi: http://49.232.181.28:3000/
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-jnmy.yml

@@ -88,6 +88,7 @@ ipad:
   ipadUrl: http://qwipad.jnmyunl.com
   aiApi: http://49.232.181.28:3000/api
   voiceApi: http://139.186.176.122:8009
+  commonApi: http://139.186.176.122:7771
 wx_miniapp_temp:
   pay_order_temp_id: -SjnK9K6cNKASa6AD9Q_c0YT7J1lPTEpPIpqbMJF8F0
   inquiry_temp_id: hwFXVh0AWqeasBsZpa0-urb3CrPeYEwBiy3P6AMMGFQ

+ 1 - 0
fs-service/src/main/resources/application-config-druid-jzzx.yml

@@ -90,6 +90,7 @@ ipad:
   ipadUrl: http://ipad.jiuzhouzaixian.com
   aiApi: http://1.95.196.10:3000/api
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id: VXEvKaGNPFuJmhWK9O_QPrTZxe9umDCukq-maI8Vdek
   inquiry_temp_id: 9POPYeqhI48LOPvq-Rfoklze7H-9SlunJKh10Qt4_2I

+ 96 - 0
fs-service/src/main/resources/application-config-druid-knt.yml

@@ -0,0 +1,96 @@
+baidu:
+  token: 12313231232
+  back-domain: https://www.xxxx.com
+#配置
+logging:
+  level:
+    org.springframework.web: INFO
+    com.github.binarywang.demo.wx.cp: DEBUG
+    me.chanjar.weixin: DEBUG
+wx:
+  miniapp:
+    configs:
+      - appid:
+        secret:
+        token:
+        aesKey: HlEiBB55eaWUaeBVAQO3cWKWPYv1vOVQSq7nFNICw4E
+        msgDataFormat: JSON
+  cp:
+    corpId: wwb2a1055fb6c9a7c2
+    appConfigs:
+      - agentId: 1000005
+        secret: ec7okROXJqkNafq66-L6aKNv0asTzQIG0CYrj3vyBbo
+        token: PPKOdAlCoMO
+        aesKey: PKvaxtpSv8NGpfTDm7VUHIK8Wok2ESyYX24qpXJAdMP
+  pay:
+    appId: wx7cf96953a4be5181 #微信公众号或者小程序等的appid
+    mchId: 1611402045 #微信支付商户号
+    mchKey: 8cab128997a3547c1363b0898b877f38 #微信支付商户密钥
+    subAppId:  #服务商模式下的子商户公众账号ID
+    subMchId:  #服务商模式下的子商户号
+    keyPath: c:\\cert\\apiclient_cert.p12 # p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头)
+    notifyUrl: https://userapp.his.runtzh.com/app/wxpay/wxPayNotify
+  mp:
+    useRedis: false
+    redisConfig:
+      host: 127.0.0.1
+      port: 6379
+      timeout: 2000
+    configs:
+      - appId: wx6ee517a8d8743f88  # 第一个公众号的appid
+        secret: 1fac75465a61f9259a0fe19795d9e80d # 公众号的appsecret
+        token: PPKOdAlCoMO # 接口配置里的Token值
+        aesKey: Eswa6VjwtVMCcw03qZy6fWllgrv5aytIA1SZPEU0kU2 # 接口配置里的EncodingAESKey值
+  open:
+    appId: wxda2eb168e5b09e56
+    secret: dde09b45d0f6d5b0925965b964b6ab48
+aifabu:  #爱链接
+  appKey: 7b471be905ab17e00f3b858c6710dd117601d008
+watch:
+  watchUrl: watch.ylrzcloud.com/prod-api
+  #  account: tcloud
+  #  password: mdf-m2h_6yw2$hq
+  account1: ccif #866655060138751
+  password1: cp-t5or_6xw7$mt
+  account2: tcloud #rt500台
+  password2: mdf-m2h_6yw2$hq
+  account3: whr
+  password3: v9xsKuqn_$d2y
+
+fs :
+  commonApi: http://192.168.0.18:7771
+  h5CommonApi: http://192.168.0.18:7771
+nuonuo:
+  key: 10924508
+  secret: A2EB20764D304D16
+
+# 存储捅配置
+tencent_cloud_config:
+  secret_id: AKIDiMq9lDf2EOM9lIfqqfKo7FNgM5meD0sT
+  secret_key: u5SuS80342xzx8FRBukza9lVNHKNMSaB
+  bucket: jnmy-1323137866
+  app_id: 1323137866
+  region: ap-chongqing
+  proxy: jnmy
+tmp_secret_config:
+  secret_id: AKIDCj7NSNAovtqeJpBau8GZ4CGB71thXIx
+  secret_key: lTB5zwqqz7CNhzDOWivFWedgfTBgxgB
+  bucket: fs-131972100
+  app_id: 1319721001
+  region: ap-chongqing
+  proxy: fs
+cloud_host:
+  company_name: 康年堂
+  projectCode: KNT
+headerImg:
+  imgUrl: https
+ipad:
+  ipadUrl: http://qwipad.jnmyunl.com
+  aiApi: http://49.232.181.28:3000/api
+  voiceApi: http://139.186.176.122:8009
+  commonApi:
+wx_miniapp_temp:
+  pay_order_temp_id: -SjnK9K6cNKASa6AD9Q_c0YT7J1lPTEpPIpqbMJF8F0
+  inquiry_temp_id: hwFXVh0AWqeasBsZpa0-urb3CrPeYEwBiy3P6AMMGFQ
+
+

+ 1 - 0
fs-service/src/main/resources/application-config-druid-kyt.yml

@@ -83,6 +83,7 @@ ipad:
   ipadUrl: http://kytIpad.ylrzcloud.com
   aiApi:
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-nmgyt.yml

@@ -86,6 +86,7 @@ ipad:
   ipadUrl: http://qwipad.nmghysmytdyf.com
   aiApi: http://127.0.0.1:3000/api
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id: V
   inquiry_temp_id: 9

+ 1 - 0
fs-service/src/main/resources/application-config-druid-qdtst.yml

@@ -91,6 +91,7 @@ ipad:
   ipadUrl:
   aiApi:
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-sft.yml

@@ -83,6 +83,7 @@ ipad:
   ipadUrl: http://qwipad.cqsft.vip
   aiApi:
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id: V
   inquiry_temp_id: 9

+ 1 - 0
fs-service/src/main/resources/application-config-druid-sxjz.yml

@@ -87,6 +87,7 @@ ipad:
   ipadUrl: http://ipad.xintaihl.cn
   aiApi: http://1.95.196.10:3000/api
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-syysy.yml

@@ -83,6 +83,7 @@ ipad:
   ipadUrl: http://ipad.ysya.top
   aiApi: http://49.232.181.28:3000/api
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-whhm.yml

@@ -85,6 +85,7 @@ ipad:
   ipadUrl: http://ipad.cdwjyyh.com
   aiApi: 1212121212
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-xfk.yml

@@ -90,6 +90,7 @@ ipad:
   ipadUrl: http://ipad.cdwjyyh.com
   aiApi:
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id: VXEvKaGNPFuJmhWK9O_QPrTZxe9umDCukq-maI8Vdek
   inquiry_temp_id: 9POPYeqhI48LOPvq-Rfoklze7H-9SlunJKh10Qt4_2I

+ 1 - 0
fs-service/src/main/resources/application-config-druid-xzt.yml

@@ -85,6 +85,7 @@ ipad:
   ipadUrl: http://ipad.cdwjyyh.com
   aiApi: 1212121212
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-yjb.yml

@@ -86,6 +86,7 @@ ipad:
   ipadUrl: http://ipad.bjyjbao.com
   aiApi: http://152.136.202.157:3000/api
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-yzt.yml

@@ -82,6 +82,7 @@ headerImg:
 ipad:
   ipadUrl: http://ipad.cdwjyyh.com
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-zsjk.yml

@@ -71,6 +71,7 @@ headerImg:
 ipad:
   ipadUrl: http://ipad.cdwjyyh.com
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 1
fs-service/src/main/resources/application-config-myhk.yml

@@ -89,7 +89,7 @@ ipad:
 #  aiApi: http://152.136.202.157:3000/api
   aiApi: http://49.232.181.28:3000/api
   voiceApi:
-
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id: VXEvKaGNPFuJmhWK9O_QPrTZxe9umDCukq-maI8Vdek
   inquiry_temp_id: 9POPYeqhI48LOPvq-Rfoklze7H-9SlunJKh10Qt4_2I

+ 1 - 0
fs-service/src/main/resources/application-config-zkzh.yml

@@ -141,6 +141,7 @@ ipad:
   ipadUrl: http://qwipad.muyi88.com
   aiApi: http://152.136.202.157:3000/api
   voiceApi:
+  commonApi:
 wx_miniapp_temp:
   pay_order_temp_id: VXEvKaGNPFuJmhWK9O_QPrTZxe9umDCukq-maI8Vdek
   inquiry_temp_id: 9POPYeqhI48LOPvq-Rfoklze7H-9SlunJKh10Qt4_2I

+ 162 - 0
fs-service/src/main/resources/application-druid-knt.yml

@@ -0,0 +1,162 @@
+# 数据源配置
+spring:
+    profiles:
+        include: config-druid-knt,common
+    # redis 配置
+    redis:
+        # 地址
+        host: 192.168.0.131
+        # 端口,默认为6379
+        port: 6379
+        # 数据库索引
+        database: 1
+        # 密码
+        password: Ylrztek250218!3@.
+        # 连接超时时间
+        timeout: 20s
+        lettuce:
+            pool:
+                # 连接池中的最小空闲连接
+                min-idle: 0
+                # 连接池中的最大空闲连接
+                max-idle: 8
+                # 连接池的最大数据库连接数
+                max-active: 8
+                # #连接池最大阻塞等待时间(使用负值表示没有限制)
+                max-wait: -1ms
+    datasource:
+        #        clickhouse:
+        #            type: com.alibaba.druid.pool.DruidDataSource
+        #            driverClassName: com.clickhouse.jdbc.ClickHouseDriver
+        #            url: jdbc:clickhouse://cc-2vc8zzo26w0l7m2l6.public.clickhouse.ads.aliyuncs.com/sop?compress=0&use_server_time_zone=true&use_client_time_zone=false&timezone=Asia/Shanghai
+        #            username: rt_2024
+        #            password: Yzx_19860213
+        #            initialSize: 10
+        #            maxActive: 100
+        #            minIdle: 10
+        #            maxWait: 6000
+        mysql:
+            type: com.alibaba.druid.pool.DruidDataSource
+            driverClassName: com.mysql.cj.jdbc.Driver
+            druid:
+                # 主库数据源
+                master:
+                    url: jdbc:mysql://192.168.0.171:3306/fs_knt_his?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    username: root
+                    password: Ylrztek250218!3@.
+                # 从库数据源
+                slave:
+                    # 从数据源开关/默认关闭
+                    enabled: false
+                    url:
+                    username:
+                    password:
+                # 初始连接数
+                initialSize: 5
+                # 最小连接池数量
+                minIdle: 10
+                # 最大连接池数量
+                maxActive: 20
+                # 配置获取连接等待超时的时间
+                maxWait: 60000
+                # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+                timeBetweenEvictionRunsMillis: 60000
+                # 配置一个连接在池中最小生存的时间,单位是毫秒
+                minEvictableIdleTimeMillis: 300000
+                # 配置一个连接在池中最大生存的时间,单位是毫秒
+                maxEvictableIdleTimeMillis: 900000
+                # 配置检测连接是否有效
+                validationQuery: SELECT 1 FROM DUAL
+                testWhileIdle: true
+                testOnBorrow: false
+                testOnReturn: false
+                webStatFilter:
+                    enabled: true
+                statViewServlet:
+                    enabled: true
+                    # 设置白名单,不填则允许所有访问
+                    allow:
+                    url-pattern: /druid/*
+                    # 控制台管理用户名和密码
+                    login-username: fs
+                    login-password: 123456
+                filter:
+                    stat:
+                        enabled: true
+                        # 慢SQL记录
+                        log-slow-sql: true
+                        slow-sql-millis: 1000
+                        merge-sql: true
+                    wall:
+                        config:
+                            multi-statement-allow: true
+        sop:
+            type: com.alibaba.druid.pool.DruidDataSource
+            driverClassName: com.mysql.cj.jdbc.Driver
+            druid:
+                # 主库数据源
+                master:
+                    url: jdbc:mysql://192.168.0.171:3306/sop?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    username: root
+                    password: Ylrztek250218!3@.
+                read:
+                    url: jdbc:mysql://192.168.0.171:3306/sop?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    username: root
+                    password: Ylrztek250218!3@.
+                # 初始连接数
+                initialSize: 5
+                # 最小连接池数量
+                minIdle: 10
+                # 最大连接池数量
+                maxActive: 20
+                # 配置获取连接等待超时的时间
+                maxWait: 60000
+                # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+                timeBetweenEvictionRunsMillis: 60000
+                # 配置一个连接在池中最小生存的时间,单位是毫秒
+                minEvictableIdleTimeMillis: 300000
+                # 配置一个连接在池中最大生存的时间,单位是毫秒
+                maxEvictableIdleTimeMillis: 900000
+                # 配置检测连接是否有效
+                validationQuery: SELECT 1 FROM DUAL
+                testWhileIdle: true
+                testOnBorrow: false
+                testOnReturn: false
+                webStatFilter:
+                    enabled: true
+                statViewServlet:
+                    enabled: true
+                    # 设置白名单,不填则允许所有访问
+                    allow:
+                    url-pattern: /druid/*
+                    # 控制台管理用户名和密码
+                    login-username: fs
+                    login-password: 123456
+                filter:
+                    stat:
+                        enabled: true
+                        # 慢SQL记录
+                        log-slow-sql: true
+                        slow-sql-millis: 1000
+                        merge-sql: true
+                    wall:
+                        config:
+                            multi-statement-allow: true
+rocketmq:
+    name-server: 192.168.0.176:8100 # RocketMQ NameServer 地址
+    producer:
+        group: my-producer-group
+        access-key: jnmyunl # 替换为实际的 accessKey
+        secret-key: 73a!ul~xQl@-6u1 # 替换为实际的 secretKey
+        tls-enable: false
+    consumer:
+        topic: course-finish-notes
+        group: course-finish-group
+        access-key: jnmyunl # 替换为实际的 accessKey
+        secret-key: 73a!ul~xQl@-6u1 # 替换为实际的 secretKey
+        tls-enable: false
+openIM:
+    secret: openIM123
+    userID: imAdmin
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 1 - 0
fs-service/src/main/resources/application-druid-lmjy.yml

@@ -152,6 +152,7 @@ ipad:
     ipadUrl:
     aiApi:
     voiceApi:
+    commonApi:
 openIM:
     secret:
     userID:

+ 6 - 0
fs-service/src/main/resources/mapper/his/FsStoreOrderItemMapper.xml

@@ -41,6 +41,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectFsStoreOrderItemVo"/>
         where item_id = #{itemId}
     </select>
+    <select id="selectFsStoreOrderItemListByItemIds" resultType="com.fs.his.domain.FsStoreOrderItem">
+        select * from fs_store_order_item where  item_id in
+        <foreach collection="itemIds" item="itemId" open="(" separator="," close=")">
+            #{itemId}
+        </foreach>
+    </select>
 
     <insert id="insertFsStoreOrderItem" parameterType="FsStoreOrderItem" useGeneratedKeys="true" keyProperty="itemId">
         insert into fs_store_order_item

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

@@ -720,8 +720,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LEFT JOIN (
         SELECT
         sp.*,
-        ROW_NUMBER() OVER (PARTITION BY sp.pay_code ORDER BY sp.create_time DESC) as rn
+        ROW_NUMBER() OVER (PARTITION BY sp.business_code ORDER BY sp.create_time DESC) as rn
         FROM fs_store_payment sp
+        WHERE sp.business_code IS NOT NULL
         ) sp_latest ON sp_latest.business_code = so.order_code AND sp_latest.rn = 1
         LEFT JOIN fs_course_play_source_config csc ON csc.appid = sp_latest.app_id
         <where>
@@ -938,7 +939,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LEFT JOIN (
         SELECT
         sp.*,
-        ROW_NUMBER() OVER (PARTITION BY sp.pay_code ORDER BY sp.create_time DESC) as rn
+        ROW_NUMBER() OVER (PARTITION BY sp.business_code ORDER BY sp.create_time DESC) as rn
         FROM fs_store_payment sp
         ) sp_latest ON sp_latest.business_code = so.order_code AND sp_latest.rn = 1
         LEFT JOIN fs_course_play_source_config csc ON csc.appid = sp_latest.app_id
@@ -1389,7 +1390,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LEFT JOIN (
         SELECT
         sp.*,
-        ROW_NUMBER() OVER (PARTITION BY sp.pay_code ORDER BY sp.create_time DESC) as rn
+        ROW_NUMBER() OVER (PARTITION BY sp.business_code ORDER BY sp.create_time DESC) as rn
         FROM fs_store_payment sp
         ) sp_latest ON sp_latest.business_code = so.order_code AND sp_latest.rn = 1
         LEFT JOIN fs_course_play_source_config csc ON csc.appid = sp_latest.app_id

+ 1 - 1
fs-service/src/main/resources/mapper/qw/QwUserVoiceLogMapper.xml

@@ -101,7 +101,7 @@
         where id = #{id}
     </select>
     <select id="selectQwUserVoiceLogTotalList" resultMap="QwUserVoiceLogVoTotalResult">
-        SELECT uvl.id, ext_id, uvl.qw_user_id, duration, title, uvl.status, uvl.corp_id,
+        SELECT uvl.id, ext_id, uvl.qw_user_id, title, uvl.status, uvl.corp_id,
                uvl.company_id, uvl.company_user_id, uvl.create_time,qec.`name`,qec.tag_ids tagIds,qu.qw_user_name,
         SUM(duration) duration,
         COUNT(CASE WHEN uvl.status=1 THEN 1 END) AS connectCount,

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

@@ -25,6 +25,7 @@ import com.fs.company.param.companyUserAddPrintParam;
 import com.fs.company.service.ICompanyUserCardService;
 import com.fs.company.service.ICompanyUserService;
 import com.fs.company.service.ICompanyUserUserService;
+import com.fs.config.ai.AiHostProper;
 import com.fs.fastGpt.domain.FastgptChatVoiceHomo;
 import com.fs.fastGpt.mapper.FastgptChatVoiceHomoMapper;
 import com.fs.fastgptApi.util.AudioUtils;
@@ -75,6 +76,8 @@ public class CompanyUserController extends  AppBaseController {
     private IQwSopTempVoiceService voiceService;
     @Autowired
     private FastgptChatVoiceHomoMapper fastgptChatVoiceHomoMapper;
+    @Autowired
+    AiHostProper aiHostProper;
 
     public static final String SOP_TEMP_VOICE_KEY = "sop:tempVoice";
     @PostMapping("/login")
@@ -149,18 +152,23 @@ public class CompanyUserController extends  AppBaseController {
         companyUser.setUserId(userId);
         companyUser.setVoicePrintUrl(param.getVoicePrintUrl());
 
+        //转换音频格式 mp3-wav
         String s = AudioUtils.audioWAVFromUrl(param.getVoicePrintUrl());
 
+        //保存文件并且上传存储桶
         System.out.println(s);
         File file = new File(s);
         FileInputStream fileInputStream = new FileInputStream(file);
         CloudStorageService storage = OSSFactory.build();
         String wavUrl = storage.uploadSuffix(fileInputStream, ".wav");
+
+        //更新销售员工声纹
         companyUser.setVoicePrintUrl(wavUrl);
         companyUserMapper.updateCompanyUser(companyUser);
+
         try {
             CloseableHttpClient httpClient = HttpClients.createDefault();
-            HttpPost httpPost = new HttpPost("http://118.24.209.192:7771/app/common/addCompanyAudio");
+            HttpPost httpPost = new HttpPost(aiHostProper.getCommonApi()+"/app/common/addCompanyAudio");
             String json = "{\"url\":\""+wavUrl+"\",\"id\":\""+userId+"\"}";
             StringEntity entity = new StringEntity(json);
             httpPost.setEntity(entity);