فهرست منبع

Merge branch 'master' of http://1.14.104.71:10880/root/ylrz_his_scrm_java

caoliqin 2 روز پیش
والد
کامیت
0197d85c0e
41فایلهای تغییر یافته به همراه1343 افزوده شده و 286 حذف شده
  1. 15 2
      fs-admin/src/main/java/com/fs/his/task/Task.java
  2. 13 1
      fs-company-app/src/main/java/com/fs/app/controller/UserController.java
  3. 3 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyDeptMapper.java
  4. 8 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyPostMapper.java
  5. 7 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyRoleMapper.java
  6. 6 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyUserMapper.java
  7. 15 0
      fs-service/src/main/java/com/fs/company/service/ICompanyRoleService.java
  8. 6 1
      fs-service/src/main/java/com/fs/company/service/ICompanyUserService.java
  9. 10 0
      fs-service/src/main/java/com/fs/company/service/impl/CompanyRoleServiceImpl.java
  10. 32 3
      fs-service/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java
  11. 65 2
      fs-service/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java
  12. 3 1
      fs-service/src/main/java/com/fs/course/mapper/FsUserCourseMapper.java
  13. 6 0
      fs-service/src/main/java/com/fs/course/param/FsUserCourseParam.java
  14. 13 0
      fs-service/src/main/java/com/fs/course/param/SendXfkParam.java
  15. 55 0
      fs-service/src/main/java/com/fs/course/service/impl/AsyncIsAddKfXfkService.java
  16. 5 5
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseOrderServiceImpl.java
  17. 27 11
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java
  18. 5 5
      fs-service/src/main/java/com/fs/course/service/impl/FsUserVipOrderServiceImpl.java
  19. 3 0
      fs-service/src/main/java/com/fs/his/mapper/FsDoctorMapper.java
  20. 4 0
      fs-service/src/main/java/com/fs/his/service/IFsStoreOrderService.java
  21. 4 4
      fs-service/src/main/java/com/fs/his/service/impl/FsInquiryOrderServiceImpl.java
  22. 7 10
      fs-service/src/main/java/com/fs/his/service/impl/FsPackageOrderServiceImpl.java
  23. 78 208
      fs-service/src/main/java/com/fs/his/service/impl/FsStoreOrderServiceImpl.java
  24. 5 1
      fs-service/src/main/java/com/fs/qw/mapper/QwExternalContactMapper.java
  25. 2 2
      fs-service/src/main/java/com/fs/tzBankPay/RequestController.java
  26. 1 1
      fs-service/src/main/java/com/fs/tzBankPay/TzBankService/TzBankServiceImpl/TzBankServiceImpl.java
  27. 21 22
      fs-service/src/main/java/com/fs/tzBankPay/doman/PayType.java
  28. 2 0
      fs-service/src/main/resources/application-common.yml
  29. 1 1
      fs-service/src/main/resources/application-config-druid-sft.yml
  30. 1 1
      fs-service/src/main/resources/application-config-druid-yzt.yml
  31. 148 0
      fs-service/src/main/resources/application-druid-sxjz-test.yml
  32. 4 0
      fs-service/src/main/resources/mapper/company/CompanyPostMapper.xml
  33. 4 0
      fs-service/src/main/resources/mapper/company/CompanyRoleMapper.xml
  34. 13 0
      fs-service/src/main/resources/mapper/company/CompanyUserMapper.xml
  35. 1 1
      fs-user-app/src/main/java/com/fs/app/controller/InquiryOrderController.java
  36. 0 3
      fs-user-app/src/main/java/com/fs/app/controller/StoreOrderController.java
  37. 604 0
      fs-user-course/src/main/java/com/fs/course/controller/CommonController.java
  38. 44 0
      fs-user-course/src/main/java/com/fs/course/controller/IndexController.java
  39. 3 1
      fs-user-course/src/main/java/com/fs/course/controller/WxCompanyUserController.java
  40. 14 0
      fs-user-course/src/main/java/com/fs/course/param/SignParam.java
  41. 85 0
      fs-user-course/src/main/java/com/fs/course/utils/CityTreeUtil.java

+ 15 - 2
fs-admin/src/main/java/com/fs/his/task/Task.java

@@ -38,8 +38,8 @@ import com.fs.his.utils.ConfigUtil;
 import com.fs.his.vo.FsSubOrderResultVO;
 import com.fs.im.dto.*;
 import com.fs.im.service.IImService;
-import com.fs.qw.service.IQwAppContactWayService;
-import com.fs.qw.service.IQwExternalContactTransferLogService;
+import com.fs.qw.domain.QwCompany;
+import com.fs.qw.service.*;
 import com.fs.qwApi.service.QwApiService;
 import com.fs.system.domain.SysConfig;
 import com.fs.system.mapper.SysConfigMapper;
@@ -144,6 +144,19 @@ public class Task {
     ITencentCloudCosService tencentCloudCosService;
     @Autowired
     private ConfigUtil configUtil;
+    @Autowired
+    private IQwCompanyService qwCompanyService;
+    @Autowired
+    private IQwUserService qwUserService;
+
+    public void addQwUserName(){
+        QwCompany qwCompany = new QwCompany();
+        List<QwCompany> companyList = qwCompanyService.selectQwCompanyList(qwCompany);
+        for (QwCompany company : companyList) {
+            qwUserService.syncQwUserName(company.getCorpId());
+        }
+    }
+
     public void videoTranscode() throws Exception
     {
 

+ 13 - 1
fs-company-app/src/main/java/com/fs/app/controller/UserController.java

@@ -1,6 +1,7 @@
 package com.fs.app.controller;
 
 import cn.hutool.core.lang.Validator;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.fs.app.annotation.Login;
@@ -681,7 +682,18 @@ public class UserController extends AppBaseController {
     @PostMapping("/audit")
     public R auditUser(@RequestParam List<Long> userIds) {
         log.debug("批量审核用户 userIds :{}", userIds);
-        companyUserService.auditUsers(userIds);
+        if(ObjectUtil.isNotNull(userIds) && !userIds.isEmpty() && userIds.size() > 20){
+            return R.error("审核用户一次性不能大于20人!");
+        }
+
+        CompanyUser companyUser = companyUserService.selectCompanyUserByUserId(Long.parseLong(getUserId()));
+        if (ObjectUtil.isEmpty(companyUser)) {
+            return R.error("当前操作用户不存在!");
+        }else if (!companyUser.isAdmin()) {
+            return R.error("没有权限");
+        }
+
+        companyUserService.auditUsers(userIds,companyUser.getCompanyId());
         return R.ok();
     }
 

+ 3 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyDeptMapper.java

@@ -113,4 +113,7 @@ public interface CompanyDeptMapper
 
     @Select("select dept_name from company_dept where dept_id=${deptId} limit 1")
     String selectDeptNameById(@Param("deptId") Long deptId);
+
+    @Select("select dept_id,dept_name from company_dept where dept_name=#{deptName} limit 1")
+    CompanyDept selectDeptNameBydeptName(@Param("deptName") String deptName);
 }

+ 8 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyPostMapper.java

@@ -83,4 +83,12 @@ public interface CompanyPostMapper
      */
     List<CompanyPost> selectCompanyPostByIds(@Param("postIds") List<Long> postIds);
 
+
+    /**
+     * 获取默认岗位
+     * @param postCode 岗位编码
+     * @return 信息
+     * **/
+    CompanyPost selectCompanyPostCode(@Param("postCode") String postCode,@Param("companyId") Long companyId);
+
 }

+ 7 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyRoleMapper.java

@@ -77,4 +77,11 @@ public interface CompanyRoleMapper
      * @return  list
      */
     List<CompanyRole> selectRoleListByIds(@Param("roleIds") List<Long> roleIds);
+
+    /**
+     * 获取默认角色
+     * @param roleKey 角色key
+     * @return 角色信息
+     * **/
+    CompanyRole selectCompanyRoleByRoleKey(@Param("roleKey") String roleKey);
 }

+ 6 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyUserMapper.java

@@ -295,4 +295,10 @@ public interface CompanyUserMapper
     void batchUpdateUserDomain(@Param("ids") List<Long> ids,@Param("domain") String domain);
 
     List<QwOptionsVO> selectQwUserListLikeName(@Param("params") Map<String, Object> params);
+
+    /**
+     * 批量更新用户部门数据
+     * @param companyUserList 用户信息
+     * **/
+    void batchUpdateUserDept(@Param("companyUserList") List<CompanyUser> companyUserList);
 }

+ 15 - 0
fs-service/src/main/java/com/fs/company/service/ICompanyRoleService.java

@@ -94,4 +94,19 @@ public interface ICompanyRoleService
      * @return  list
      */
     List<CompanyRole> selectCompanyRoleByIds(List<Long> roleIds);
+
+    /**
+     * 获取默认角色
+     * @param roleKey 角色key
+     * @return 角色信息
+     * **/
+    CompanyRole selectCompanyRoleByRoleKey(String roleKey);
+
+
+    /**
+     * 插入默认角色
+     * @param role 角色对象
+     * @return
+     * **/
+    int insertDefaultRole(CompanyRole role);
 }

+ 6 - 1
fs-service/src/main/java/com/fs/company/service/ICompanyUserService.java

@@ -194,7 +194,12 @@ public interface ICompanyUserService {
      */
     Boolean setIsRegisterMember(boolean status,  List<Long> userIds);
 
-    void auditUsers(List<Long> userIds);
+    /**
+     * 批量审核接口
+     * @param companyId 企业ID
+     * @param userIds 用户Id
+     * **/
+    void auditUsers(List<Long> userIds,Long companyId);
 
     CompanyUser selectCompanyUserByPhone(String phone);
 

+ 10 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyRoleServiceImpl.java

@@ -271,4 +271,14 @@ public class CompanyRoleServiceImpl implements ICompanyRoleService
     public List<CompanyRole> selectCompanyRoleByIds(List<Long> roleIds) {
         return companyRoleMapper.selectRoleListByIds(roleIds);
     }
+
+    @Override
+    public CompanyRole selectCompanyRoleByRoleKey(String roleKey) {
+        return companyRoleMapper.selectCompanyRoleByRoleKey(roleKey);
+    }
+
+    @Override
+    public int insertDefaultRole(CompanyRole role) {
+        return companyRoleMapper.insertCompanyRole(role);
+    }
 }

+ 32 - 3
fs-service/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java

@@ -139,6 +139,18 @@ public class CompanyServiceImpl implements ICompanyService
             dept.setCreateTime(new Date());
             dept.setDeptName(company.getCompanyName());
             deptMapper.insertCompanyDept(dept);
+
+            //创建销售部门
+            CompanyDept saleDept=new CompanyDept();
+            saleDept.setParentId(0l);
+            saleDept.setAncestors("0");
+            saleDept.setStatus("0");
+            saleDept.setDeptName("销售(默认部门)");
+            saleDept.setCreateTime(new Date());
+            saleDept.setParentId(dept.getDeptId());
+            saleDept.setCompanyId(company.getCompanyId());
+            deptMapper.insertCompanyDept(saleDept);
+
             //创建岗位
             CompanyPost post=new CompanyPost();
             post.setCompanyId(company.getCompanyId());
@@ -147,6 +159,16 @@ public class CompanyServiceImpl implements ICompanyService
             post.setPostSort(0);
             post.setStatus("0");
             postMapper.insertCompanyPost(post);
+
+            //创建销售岗位
+            CompanyPost salePost=new CompanyPost();
+            salePost.setCompanyId(company.getCompanyId());
+            salePost.setPostCode("default_sale");
+            salePost.setPostName("销售");
+            salePost.setPostSort(0);
+            salePost.setStatus("0");
+            postMapper.insertCompanyPost(salePost);
+
             //创建角色
             // 创建管理员角色(拥有全部权限)
             CompanyRole adminRole = new CompanyRole();
@@ -165,18 +187,25 @@ public class CompanyServiceImpl implements ICompanyService
             salesRole.setRoleSort(1);
             salesRole.setDataScope("5");
             salesRole.setStatus("0");
-
             //增加销售角色菜单权限
             try {
                 String json = configService.selectConfigByKey("companymenu.config");
-                if (StringUtils.isNotEmpty(json)) {
+                if (StringUtils.isNotEmpty(json) && !json.equals("")) {
                     CompanyMenuConfig config = JSONUtil.toBean(json, CompanyMenuConfig.class);
                     salesRole.setMenuIds(config.getMenuIds());
-                    roleService.insertRole(salesRole);
+                    if(config.getMenuIds().length > 0){
+                        roleService.insertRole(salesRole);
+                    }else {
+                        roleService.insertDefaultRole(salesRole);
+                    }
+                }else {
+                    roleService.insertDefaultRole(salesRole);
                 }
+
             } catch (Exception e) {
                 logger.error("获取菜单配置失败", e);
             }
+
             //添加用户
             CompanyUser user=new CompanyUser();
             user.setCompanyId(company.getCompanyId());

+ 65 - 2
fs-service/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fs.company.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.fs.common.annotation.DataScope;
 import com.fs.common.core.domain.R;
@@ -56,6 +57,9 @@ public class CompanyUserServiceImpl implements ICompanyUserService
     @Autowired
     private QwUserMapper qwUserMapper;
 
+    @Autowired
+    private CompanyDeptMapper companyDeptMapper;
+
     @Autowired
     private CompanyUserRoleMapper userRoleMapper;
 
@@ -517,11 +521,70 @@ public class CompanyUserServiceImpl implements ICompanyUserService
     }
 
     @Override
-    public void auditUsers(List<Long> userIds) {
+    public void auditUsers(List<Long> userIds,Long companyId) {
         if (userIds.isEmpty()) {
             return;
         }
-        companyUserMapper.auditUsers(userIds);
+        //获取用户信息
+        List<CompanyUser> companyUserList=companyUserMapper.getUserInfoByUserIds(userIds);
+
+        if(ObjectUtil.isNotNull(companyUserList) && !companyUserList.isEmpty()){
+
+            //获取默认角色信息
+            CompanyRole role=roleMapper.selectCompanyRoleByRoleKey(companyId+"_sales");
+
+            //获取默认部门
+            CompanyDept dept= companyDeptMapper.selectDeptNameBydeptName("销售(默认部门)");
+
+            //获取默认岗位
+            CompanyPost companyPost= postMapper.selectCompanyPostCode("default_sale",companyId);
+
+            //存储用户角色中间表
+            List<CompanyUserRole> companyUserRoleList=new LinkedList<>();
+
+            //存储岗位
+            List<CompanyUserPost> companyUserPosts=new LinkedList<>();
+            companyUserList.stream().forEach(c->{
+                //判断角色是否为空
+                if(ObjectUtil.isNotNull(role)){
+                    CompanyUserRole userRole=new CompanyUserRole();
+                    userRole.setRoleId(role.getRoleId());
+                    userRole.setUserId(c.getUserId());
+                    companyUserRoleList.add(userRole);
+                }
+
+                //判断部门
+                if(ObjectUtil.isNotNull(dept)){
+                    c.setDeptId(dept.getDeptId());
+                }
+
+                //判断岗位
+                if(ObjectUtil.isNotNull(companyPost)){
+                    //添加用户岗位表
+                    CompanyUserPost userPost=new CompanyUserPost();
+                    userPost.setPostId(companyPost.getPostId());
+                    userPost.setUserId(c.getUserId());
+                    companyUserPosts.add(userPost);
+                }
+
+            });
+
+            //批量插入角色用户中间表
+            if(!companyUserRoleList.isEmpty()){
+                userRoleMapper.batchUserRole(companyUserRoleList);
+            }
+
+            //批量插入用户岗位中间表
+            if(!companyUserPosts.isEmpty()){
+                userPostMapper.batchUserPost(companyUserPosts);
+            }
+
+            //批量更新用户部门信息
+            companyUserMapper.batchUpdateUserDept(companyUserList);
+
+            companyUserMapper.auditUsers(userIds);
+        }
+
     }
 
     @Override

+ 3 - 1
fs-service/src/main/java/com/fs/course/mapper/FsUserCourseMapper.java

@@ -220,7 +220,9 @@ public interface FsUserCourseMapper
             "<if test = ' maps.isShow !=null '> " +
             "and c.is_show = #{maps.isShow} " +
             "</if>" +
-
+            "<if test ='maps.companyIdsList != null and maps.companyIdsList.length !=0 '> " +
+            " and <foreach collection='maps.companyIdsList'  item='item' index='index'  open='( 1=2 ' separator='' close=')'> or find_in_set(  #{item} , REGEXP_REPLACE ( c.company_ids, '[\"\\\\[\\\\]]', '' ) )  </foreach> " +
+            "</if> " +
             " order by c.sort,c.course_id  "+
             "</script>"})
     List<FsUserCourseListPVO> selectFsUserCourseListCompanyPVO(@Param("maps")FsUserCourseParam fsUserCourse);

+ 6 - 0
fs-service/src/main/java/com/fs/course/param/FsUserCourseParam.java

@@ -1,5 +1,6 @@
 package com.fs.course.param;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fs.common.annotation.Excel;
 import lombok.Data;
 
@@ -137,4 +138,9 @@ public class FsUserCourseParam {
     private Integer isPrivate; //是否私域
 
     private Long companyId;
+
+    private String companyIds;
+
+    @TableField(exist = false)
+    private Long[] companyIdsList;
 }

+ 13 - 0
fs-service/src/main/java/com/fs/course/param/SendXfkParam.java

@@ -0,0 +1,13 @@
+package com.fs.course.param;
+
+import lombok.Data;
+
+@Data
+public class SendXfkParam {
+    private String corpId;
+    private String userId;
+    private String name;
+    private Integer addWay;
+    private String state;
+    private String createTime;
+}

+ 55 - 0
fs-service/src/main/java/com/fs/course/service/impl/AsyncIsAddKfXfkService.java

@@ -0,0 +1,55 @@
+package com.fs.course.service.impl;
+
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson.JSON;
+import com.fs.common.utils.PubFun;
+import com.fs.course.param.SendXfkParam;
+import com.fs.qw.domain.QwUser;
+import com.fs.qw.mapper.QwExternalContactMapper;
+import com.fs.qw.result.QwFilterSopCustomersResult;
+import com.fs.qw.vo.QwSopRuleTimeVO;
+import com.fs.sop.domain.*;
+import com.fs.sop.mapper.QwSopLogsMapper;
+import com.fs.sop.mapper.QwSopMapper;
+import com.fs.sop.mapper.QwSopTempMapper;
+import com.fs.sop.mapper.SopUserLogsInfoMapper;
+import com.fs.sop.params.DeleteQwSopParam;
+import com.fs.sop.params.QwSopTagsParam;
+import com.fs.sop.params.SopUserLogsArray;
+import com.fs.sop.params.SopUserLogsList;
+import com.fs.sop.service.IQwSopTempVoiceService;
+import com.fs.sop.service.ISopUserLogsService;
+import com.fs.voice.utils.StringUtil;
+import com.fs.wxUser.domain.CompanyWxUser;
+import com.fs.wxUser.mapper.CompanyWxUserMapper;
+import com.fs.wxUser.param.CompanyWxUserSopParam;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+@AllArgsConstructor
+public class AsyncIsAddKfXfkService {
+
+    private static final String domainXFKName = "https://workapi.dazhengnet.cn/api.php/Home/XfkWork/bindMember";
+
+    /**
+     * 异步推送
+     */
+    @Async("scheduledExecutorService")
+    public void executeSopByIds(SendXfkParam xfkParam) {
+
+        HttpRequest.post(domainXFKName)
+                .body(JSON.toJSONString(xfkParam),"application/json;charset=UTF-8")
+                .execute().body();
+
+
+    }
+
+}

+ 5 - 5
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseOrderServiceImpl.java

@@ -542,7 +542,7 @@ public class FsUserCourseOrderServiceImpl implements IFsUserCourseOrderService
 //                        o.setOpenId(user.getMpOpenId());
                         o.setOrderType(4);
                         o.setOrderId(order.getOrderId().toString());
-                        o.setPayType(Arrays.asList(PayType.支付宝条码支付.getCode()));
+                        o.setPayType(Arrays.asList(PayType.ALIPAY_BARCODE_PAYMENT.getCode()));
                         TzBankResult<PayCreateOrderResult> result = tzBankService.createOrder(o);
                         FsStorePayment mt=new FsStorePayment();
                         mt.setPaymentId(storePayment.getPaymentId());
@@ -591,11 +591,11 @@ public class FsUserCourseOrderServiceImpl implements IFsUserCourseOrderService
                         paymentMap.setStatus(1);
                         paymentMap.setPayTime(new Date());
                         paymentMap.setTradeNo(tradeNo);
-                        if(payType.equals(PayType.微信小程序支付.getCode())){
-                            paymentMap.setPayTypeCode(PayType.微信小程序支付.name());
+                        if(payType.equals(PayType.WECHAT_MINI_PROGRAM_PAYMENT.getCode())){
+                            paymentMap.setPayTypeCode(PayType.WECHAT_MINI_PROGRAM_PAYMENT.name());
                         }
-                        else if(payType.equals(PayType.支付宝条码支付.getCode())){
-                            paymentMap.setPayTypeCode(PayType.支付宝条码支付.name());
+                        else if(payType.equals(PayType.ALIPAY_BARCODE_PAYMENT.getCode())){
+                            paymentMap.setPayTypeCode(PayType.ALIPAY_BARCODE_PAYMENT.name());
                         }
                         fsStorePaymentMapper.updateFsStorePayment(paymentMap);
                         order=fsUserCourseOrderMapper.selectFsUserCourseOrderByOrderId(Long.parseLong(storePayment.getBusinessId()));

+ 27 - 11
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fs.course.service.impl;
 
+import cn.hutool.http.HttpRequest;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
@@ -103,6 +104,7 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
     private static final String miniappRealLink = "/pages_course/video.html?course=";
     private static final String REAL_LINK_PREFIX = "/courseH5/pages/course/learning?course=";
     private static final String SHORT_LINK_PREFIX = "/courseH5/pages/course/learning?s=";
+
     @Autowired
     private CompanyMoneyLogsMapper moneyLogsMapper;
     @Autowired
@@ -128,6 +130,9 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
     @Autowired
     private FsCourseLinkMapper fsCourseLinkMapper;
 
+    @Autowired
+    private AsyncIsAddKfXfkService xfkService;
+
 
     @Autowired
     private QwExternalContactMapper qwExternalContactMapper;
@@ -408,17 +413,17 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
 
         String msg = "<div style=\"color: red;margin-bottom: 15px;font-weight: bold;\">本课程为会员独享<br>请长按二维码</div>\n" +
                 "\t\t\t\t\t<div style=\"color: #999;font-size: 14px;font-weight: bold;\">添加伴学助手免费领取会员权限</div>";
-        try {
-            new Thread(() -> {
-                try {
-                    rocketMQTemplate.syncSend("repeat-upload", JSON.toJSONString(RepeatUploadVo.builder().type(1).fsUserId(param.getUserId()).build()));
-                }catch (Exception e){
-                    logger.error("看课重粉提交mq失败", e);
-                }
-            }).start();
-        }catch (Exception e){
-            logger.error("看课重粉提交mq失败", e);
-        }
+//        try {
+//            new Thread(() -> {
+//                try {
+//                    rocketMQTemplate.syncSend("repeat-upload", JSON.toJSONString(RepeatUploadVo.builder().type(1).fsUserId(param.getUserId()).build()));
+//                }catch (Exception e){
+//                    logger.error("看课重粉提交mq失败", e);
+//                }
+//            }).start();
+//        }catch (Exception e){
+//            logger.error("看课重粉提交mq失败", e);
+//        }
 
         Integer isRoom = param.getIsRoom();
 
@@ -659,6 +664,17 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
             user.setQwExtId(param.getQwExternalId());
             fsUserMapper.updateFsUser(user);
 
+
+            //小访客特有
+//            SendXfkParam xfkParam=new SendXfkParam();
+//            xfkParam.setCorpId(externalContact.getCorpId());
+//            xfkParam.setUserId(externalContact.getUserId());
+//            xfkParam.setName(externalContact.getName());
+//            xfkParam.setAddWay(externalContact.getAddWay());
+//            xfkParam.setState(externalContact.getState());
+//            xfkParam.setCreateTime(externalContact.getCreateTime().toString());
+//            xfkService.executeSopByIds(xfkParam);
+
             iSopUserLogsInfoService.updateSopUserInfoByExternalId(qwExternalId,param.getUserId());
 
             //绑定上之后 更新观看记录

+ 5 - 5
fs-service/src/main/java/com/fs/course/service/impl/FsUserVipOrderServiceImpl.java

@@ -394,7 +394,7 @@ public class FsUserVipOrderServiceImpl implements IFsUserVipOrderService
 //                        o.setOpenId(user.getMpOpenId());
                         o.setOrderType(5);
                         o.setOrderId(order.getOrderId().toString());
-                        o.setPayType(Arrays.asList(PayType.支付宝条码支付.getCode()));
+                        o.setPayType(Arrays.asList(PayType.ALIPAY_BARCODE_PAYMENT.getCode()));
                         TzBankResult<PayCreateOrderResult> result = tzBankService.createOrder(o);
                         FsStorePayment mt=new FsStorePayment();
                         mt.setPaymentId(storePayment.getPaymentId());
@@ -443,11 +443,11 @@ public class FsUserVipOrderServiceImpl implements IFsUserVipOrderService
                         paymentMap.setStatus(1);
                         paymentMap.setPayTime(new Date());
                         paymentMap.setTradeNo(tradeNo);
-                        if(payType.equals(PayType.微信小程序支付.getCode())){
-                            paymentMap.setPayTypeCode(PayType.微信小程序支付.name());
+                        if(payType.equals(PayType.WECHAT_MINI_PROGRAM_PAYMENT.getCode())){
+                            paymentMap.setPayTypeCode(PayType.WECHAT_MINI_PROGRAM_PAYMENT.name());
                         }
-                        else if(payType.equals(PayType.支付宝条码支付.getCode())){
-                            paymentMap.setPayTypeCode(PayType.支付宝条码支付.name());
+                        else if(payType.equals(PayType.ALIPAY_BARCODE_PAYMENT.getCode())){
+                            paymentMap.setPayTypeCode(PayType.ALIPAY_BARCODE_PAYMENT.name());
                         }
                         fsStorePaymentMapper.updateFsStorePayment(paymentMap);
                         order=fsUserVipOrderMapper.selectFsUserVipOrderByOrderId(Long.parseLong(storePayment.getBusinessId()));

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

@@ -175,10 +175,13 @@ public interface FsDoctorMapper
     Long selectFsDoctorType2Ids(Integer type);
     @Select("select * from fs_doctor where doctor_id=#{doctorId} for update")
     FsDoctor selectFsDoctorByDoctorIdForUpdate(Long doctorId);
+
     @Select("select * from fs_doctor where doctor_type=2 and  `status`=1 and is_audit=1 and sign_url is not null and audit_type LIKE CONCAT('%', #{type}, '%')  ORDER BY RAND() LIMIT 1")
     FsDoctor selectPackageFsDoctorType2Ids(Integer type);
+
     @Select("select doctor_id from fs_doctor where doctor_type=1 and  `status`=1 and is_audit=1 and is_agreement_prescribe_doctor=1  and sign_url is not null")
     List<Long>  selectFsDoctorDoctorByPackage();
+
     @Select("select doctor_id from fs_doctor where doctor_type=1 and  `status`=1 and is_audit=1 and dept_id=39 and is_follow=1  ORDER BY RAND() LIMIT 1")
     Long selectFollowDoctorDoctorByPackage();
     @Select("select * from fs_doctor where doctor_type=1 and  `status`=1 and is_audit=1 and dept_id=39 ")

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

@@ -16,6 +16,7 @@ import com.fs.his.dto.ExpressResultDTO;
 import com.fs.his.dto.StoreOrderExpressExportDTO;
 import com.fs.his.param.*;
 import com.fs.his.vo.*;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 订单Service接口
@@ -150,6 +151,9 @@ public interface IFsStoreOrderService
 
     void addFsFollowByStoreOrder(FsStoreOrder order);
 
+    @Transactional
+    R finishStoreOrder(Long orderId);
+
     List<FsStoreOrderExportVO> selectFsStoreOrderListVOByExport(FsStoreOrderParam param);
 
     List<FsInquiryOrderMsg> selectFsInquiryOrderMsgByStoreOrderId(FsFollowMsgParam fsFollowMsgParam);

+ 4 - 4
fs-service/src/main/java/com/fs/his/service/impl/FsInquiryOrderServiceImpl.java

@@ -733,11 +733,11 @@ public class FsInquiryOrderServiceImpl implements IFsInquiryOrderService
                         paymentMap.setStatus(1);
                         paymentMap.setPayTime(new Date());
                         paymentMap.setTradeNo(tradeNo);
-                        if(payType.equals(PayType.微信小程序支付.getCode())){
-                            paymentMap.setPayTypeCode(PayType.微信小程序支付.name());
+                        if(payType.equals(PayType.WECHAT_MINI_PROGRAM_PAYMENT.getCode())){
+                            paymentMap.setPayTypeCode(PayType.WECHAT_MINI_PROGRAM_PAYMENT.name());
                         }
-                        else if(payType.equals(PayType.支付宝条码支付.getCode())){
-                            paymentMap.setPayTypeCode(PayType.支付宝条码支付.name());
+                        else if(payType.equals(PayType.ALIPAY_BARCODE_PAYMENT.getCode())){
+                            paymentMap.setPayTypeCode(PayType.ALIPAY_BARCODE_PAYMENT.name());
                         }
                         if (storePayment.getPayMode().equals("yb")){
                             OrderQueryDTO orderQueryDTO = new OrderQueryDTO();

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

@@ -655,11 +655,11 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
                     paymentMap.setStatus(1);
                     paymentMap.setPayTime(new Date());
                     paymentMap.setTradeNo(tradeNo);
-                    if(payType.equals(PayType.微信小程序支付.getCode())){
-                        paymentMap.setPayTypeCode(PayType.微信小程序支付.name());
+                    if(payType.equals(PayType.WECHAT_MINI_PROGRAM_PAYMENT.getCode())){
+                        paymentMap.setPayTypeCode(PayType.WECHAT_MINI_PROGRAM_PAYMENT.name());
                     }
-                    else if(payType.equals(PayType.支付宝条码支付.getCode())){
-                        paymentMap.setPayTypeCode(PayType.支付宝条码支付.name());
+                    else if(payType.equals(PayType.ALIPAY_BARCODE_PAYMENT.getCode())){
+                        paymentMap.setPayTypeCode(PayType.ALIPAY_BARCODE_PAYMENT.name());
                     }
                     if (storePayment.getPayMode().equals("yb")){
                         OrderQueryDTO orderQueryDTO = new OrderQueryDTO();
@@ -881,9 +881,6 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
     @Override
     @Transactional
     public R payment(FsPackageOrderDoPayParam param) {
-        //回滚事务
-        //     TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-        //     return return R.error("");
         //更新订单状态
         FsPackageOrder fsPackageOrder=fsPackageOrderMapper.selectFsPackageOrderByOrderId(param.getOrderId());
         if(!fsPackageOrder.getStatus().equals(FsPackageOrderStatusEnum.STATUS_1.getValue())){
@@ -1127,7 +1124,7 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
 //                        o.setOpenId(user.getMpOpenId());
                         o.setOrderType(3);
                         o.setOrderId(fsPackageOrder.getOrderId().toString());
-                        o.setPayType(Arrays.asList(PayType.支付宝条码支付.getCode()));
+                        o.setPayType(Arrays.asList(PayType.ALIPAY_BARCODE_PAYMENT.getCode()));
                         TzBankResult<PayCreateOrderResult> result = tzBankService.createOrder(o);
                         FsStorePayment mt=new FsStorePayment();
                         mt.setPaymentId(storePayment.getPaymentId());
@@ -1212,7 +1209,7 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
                         o.setOpenId(user.getMpOpenId());
                         o.setOrderType(3);
                         o.setOrderId(fsPackageOrder.getOrderId().toString());
-                        o.setPayType(Arrays.asList(PayType.微信公众号.getCode()));
+                        o.setPayType(Arrays.asList(PayType.WECHAT_PUBLIC_ACCOUNT.getCode()));
                         TzBankResult<PayCreateOrderResult> result = tzBankService.createOrder(o);
                         FsStorePayment mt=new FsStorePayment();
                         mt.setPaymentId(storePayment.getPaymentId());
@@ -1300,7 +1297,7 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
                         o.setOpenId(user.getMpOpenId());
                         o.setOrderType(3);
                         o.setOrderId(fsPackageOrder.getOrderId().toString());
-                        o.setPayType(Arrays.asList(PayType.支付宝条码支付.getCode()));
+                        o.setPayType(Arrays.asList(PayType.ALIPAY_BARCODE_PAYMENT.getCode()));
                         TzBankResult<PayCreateOrderResult> result = tzBankService.createOrder(o);
                         FsStorePayment mt=new FsStorePayment();
                         mt.setPaymentId(storePayment.getPaymentId());

+ 78 - 208
fs-service/src/main/java/com/fs/his/service/impl/FsStoreOrderServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fs.his.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.net.URLDecoder;
 import cn.hutool.core.util.StrUtil;
@@ -62,7 +63,6 @@ import com.fs.im.service.IImService;
 import com.fs.qw.domain.QwExternalContact;
 import com.fs.qw.domain.QwUser;
 import com.fs.qw.mapper.QwExternalContactMapper;
-import com.fs.sop.mapper.QwSopLogsMapper;
 import com.fs.qw.service.impl.QwUserServiceImpl;
 import com.fs.system.domain.SysConfig;
 import com.fs.tzBankPay.doman.*;
@@ -83,16 +83,18 @@ import com.google.gson.Gson;
 import lombok.Synchronized;
 import lombok.extern.slf4j.Slf4j;
 import org.json.JSONObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.springframework.aop.framework.AopContext;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
+import org.springframework.util.CollectionUtils;
 
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
@@ -114,9 +116,9 @@ import static com.fs.his.utils.PhoneUtil.decryptPhone;
 @Lazy
 @Service
 @Slf4j
+@EnableAspectJAutoProxy(exposeProxy = true,proxyTargetClass = true)
 public class FsStoreOrderServiceImpl implements IFsStoreOrderService
 {
-    Logger logger= LoggerFactory.getLogger(getClass());
     @Autowired
     private WxPayService wxPayService;
     @Autowired
@@ -157,15 +159,15 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
     @Autowired
     private IFsExpressService expressService;
     @Autowired
-    HisApiService hisApiService;
+    private HisApiService hisApiService;
     @Autowired
-    FsInquiryOrderMapper fsInquiryOrderMapper;
+    private FsInquiryOrderMapper fsInquiryOrderMapper;
     @Autowired
     private ICompanyService companyService;
     @Autowired
     private CompanyMapper companyMapper;
     @Autowired
-    ICompanyUserService companyUserService;
+    private ICompanyUserService companyUserService;
     @Autowired
     private IFsUserService userService;
     @Autowired
@@ -227,28 +229,28 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
     @Autowired
     private IFsInquiryOrderService inquiryOrderService;
     @Autowired
-    FsFollowReportMapper fsFollowReportMapper;
+    private FsFollowReportMapper fsFollowReportMapper;
     @Autowired
-    FsStoreSubOrderServiceImpl storeSubOrderService;
+    private FsStoreSubOrderServiceImpl storeSubOrderService;
     @Autowired
-    ApplicationEventPublisher publisher;
+    private ApplicationEventPublisher publisher;
 
     @Autowired
-    IFsUserWatchService fsUserWatchService;
+    private IFsUserWatchService fsUserWatchService;
     @Autowired
-    QwExternalContactMapper qwExternalContactMapper;
-    @Autowired
-    QwSopLogsMapper qwSopLogsMapper;
-
-    @Autowired
-    private IFsExportTaskService exportTaskService;
+    private QwExternalContactMapper qwExternalContactMapper;
     @Autowired
     private QwUserServiceImpl qwUserServiceImpl;
     @Autowired
     private IFsStoreProductGroupService storeProductGroupService;
     @Autowired
-    CloudHostProper cloudHostProper;
+    private CloudHostProper cloudHostProper;
+    @Autowired
+    private IFsPrescribeService fsPrescribeService;
+
 
+    @Value("${express.omsCode}")
+    private String expressOmsCode;
     /**
      * 查询订单
      *
@@ -391,9 +393,9 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         o1.setFinishTime(new Date());
         o1.setOrderId(orderId);
         o1.setStatus(FsStoreOrderStatusEnum.STATUS_4.getValue());
-        logger.info("确认收货:"+orderId);
+        log.info("确认收货:"+orderId);
         if (order.getCompanyId()!=null&&order.getTuiMoneyStatus()==0&&order.getPayType()==1){
-            logger.info("分佣:"+orderId);
+            log.info("分佣:"+orderId);
             companyService.addCompanyMoney(order);
             o1.setTuiMoneyTime(new Date());
         }
@@ -441,19 +443,11 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                 userCouponService.updateFsUserCoupon(userCoupon);
             }
             //退回库存
-//            this.refundStock(order);
             fsStoreOrderMapper.cancelOrder(orderId);
             //添加记录
             fsStoreOrderLogsService.create(order.getOrderId(), FsStoreOrderLogEnum.CANCEL_ORDER.getValue(),
                     FsStoreOrderLogEnum.CANCEL_ORDER.getDesc());
 
-//            TemplateBean templateBean = TemplateBean.builder()
-//                    .orderId(order.getOrderId().toString())
-//                    .remark("您的订单已取消")
-//                    .uid(order.getUserId())
-//                    .templateType(TemplateListenEnum.TYPE_1.getValue())
-//                    .build();
-//            publisher.publishEvent(new TemplateEvent(this, templateBean));
             return R.ok("操作成功");
         }
         else{
@@ -477,7 +471,8 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                         //判断完成时间是否超过指定时间
                         Calendar calendar = new GregorianCalendar();
                         calendar.setTime(vo.getFinishTime());
-                        calendar.add(calendar.DATE,storeConfig.getStoreAfterSalesDay()); //把日期往后增加一天,整数  往后推,负数往前移动
+                        //把日期往后增加一天,整数  往后推,负数往前移动
+                        calendar.add(calendar.DATE,storeConfig.getStoreAfterSalesDay());
                         if(calendar.getTime().getTime()<new Date().getTime()){
                             vo.setIsAfterSales(0);
                         }
@@ -601,24 +596,17 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         FsPackage fsPackage=fsPackageMapper.selectFsPackageByPackageId(packageOrder.getPackageId());
         JSONArray objects =JSONUtil.parseArray(fsPackage.getProductJson());
         List<FsPackagePruductDTO> products=JSONUtil.toList(objects,FsPackagePruductDTO.class);
-//        boolean isDrug=false;
-//        for (FsPackagePruductDTO product : products) {
-//            if (product.getIsDrug()==1){
-//                isDrug=true;
-//            }
-//        }
-//        Long prescribeId=null;
 
         Map<String,Object> packageJson = (Map)JSON.parse(packageOrder.getPackageJson());
         Integer packageSubType = (Integer)packageJson.get("packageSubType");
         if (packageSubType==3){
-            R orderByPackageOrderStatus4 = inquiryOrderService.createOrderByPackageOrderStatus4(packageOrder);
+            inquiryOrderService.createOrderByPackageOrderStatus4(packageOrder);
         }
         Long  prescribeId= fsPrescribeService.insertFsPrescribeByPackageOrder(packageOrder);
 
         FsStoreOrder order=new FsStoreOrder();
         List<FsStoreOrderItem> items=new ArrayList<>();
-        logger.info("套餐包生成药品订单:"+packageOrder.getOrderSn());
+        log.info("套餐包生成药品订单:{}",packageOrder.getOrderSn());
         order.setOrderCode(packageOrder.getOrderSn());
         order.setUserId(packageOrder.getUserId());
         order.setStoreId(fsPackage.getStoreId());
@@ -778,10 +766,6 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             }
         }
 
-
-
-
-
         order.setOrderType(fsPackage.getProductType());
         order.setTotalNum(totalNum);
         order.setTotalPrice(totalPrice);
@@ -822,7 +806,6 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                 fsFollow.setCompanyUserId(packageOrder.getCompanyUserId());
                 fsFollow.setDeptId(packageOrder.getDeptId());
                 fsFollow.setNum(1);
-//            fsFollow.setPackageOrderId(order.getOrderId());
                 fsFollow.setInquiryOrderId(packageOrder.getInquiryOrderId());
                 fsFollow.setPlanTime(DateUtils.getNowDate());
                 fsFollow.setPushStatus(1);
@@ -883,21 +866,8 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             try {
                 storeSubOrderService.insertFsStoreSubOrderByStoreOrder(order.getOrderId());
             }catch (Exception e){
-                logger.info("拆分订单错误:"+order.getOrderId());
-            }
-//            try {
-//                if (fsPackage.getProductType()==2){
-//                    fsStoreOrderService.tuiOrder(order.getOrderId());
-//                }else if (fsPackage.getProductType()==1){
-//                    fsStoreOrderService.createOmsOrder(order.getOrderId());
-//                }else {
-//
-//                }
-//
-//            } catch (ParseException e) {
-//                throw new RuntimeException(e);
-//            }
-//            tuiOrderUtil.TuiOrderByPackage(order);
+                log.info("拆分订单错误:{}",order.getOrderId());
+            }
         }
 
         return R.ok();
@@ -938,10 +908,6 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                     throw new CustomException("订单编号为空");
                 }
 
-//                if (vo.getDeliveryCode() == null || vo.getDeliveryCode().isEmpty()) {
-//                    throw new CustomException("快递公司编号为空");
-//                }
-
                 if (vo.getDeliveryName() == null || vo.getDeliveryName().isEmpty()) {
                     throw new CustomException("快递名称为空");
                 }
@@ -1023,10 +989,6 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         }
     }
 
-
-
-
-
     @Override
     public int tuiOrder(Long orderId) {
 
@@ -1054,7 +1016,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         FsStoreOrderItem item = new FsStoreOrderItem();
         item.setOrderId(o.getOrderId());
         List<FsStoreOrderItem> fsStoreOrderItems = fsStoreOrderItemMapper.selectFsStoreOrderItemList(item);
-        logger.info(""+fsStoreOrderItems);
+        log.info(""+fsStoreOrderItems);
         ArrayList<RecipeDetailParam> list = new ArrayList<>();
         Integer i=1;
         BigDecimal dprice = new BigDecimal(0);
@@ -1065,7 +1027,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             FsProdItemDTO fsProdItemDTO = JSON.parseObject(json, FsProdItemDTO.class);
             String barCode = fsProdItemDTO.getBarCode();
 
-            logger.info(""+fsProdItemDTO);
+            log.info(""+fsProdItemDTO);
             if(fsStoreOrderItem.getIsGift()!=null&&fsStoreOrderItem.getIsGift()==1){
                 continue;
             }
@@ -1131,11 +1093,6 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         op.setAttention(remark);//医嘱
         op.setSymptoms(fp.getDiagnose());
         op.setRecipe_time(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(fp.getCreateTime()));
-//        op.setOperation_time("Jane");
-//        op.setOperation_time("2023-08-22 11:00:00");
-//        op.setPricing_id("pricing123");
-//        op.setPricing_cashier("Alice");
-//        op.setPricing_time("2023-08-22 12:00:00");
         op.setPrice(dprice.toString());
         op.setPrice_total(dprice.multiply(new BigDecimal(usage.getCounts())).toString());
         op.setRecipe_sale_price(o.getPayMoney().toString()); //实际收款
@@ -1149,10 +1106,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             op.setPatient_id(fp.getPatientId().toString());
         }
 
-        //op.setVisit_id("visit789");
-     //   op.setUsage_desc("备用字段描述");
         op.setAddress(o.getUserAddress());
-       // op.setRefund_name("");
         op.setRecipe_detail_list(list);
         ApiResponse order = hisApiService.createOrder(op);
         if (order.getState().equals("error")){
@@ -1165,8 +1119,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
 
         return 1;
     }
-    @Autowired
-    IFsPrescribeService fsPrescribeService;
+
     @Override
     public FsPrescribeVO selectFsPrescribeByPrescribeIdVO(Long prescribeId) {
         return  prescribeMapper.selectFsPrescribeByPrescribeIdVO(prescribeId);
@@ -1262,16 +1215,6 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                     storeOrder.setUserName(address.getRealName().trim());
                     storeOrder.setUserPhone(address.getPhone().trim());
                     storeOrder.setUserAddress(address.getProvince()+" "+address.getCity()+" "+address.getDistrict()+" "+address.getDetail());
-//                    String noAdd="南通市,镇江市,淮安市,江阴市,金华市,驻马店市";
-//                    String[] split = noAdd.split(",");
-//                    for (String s : split) {
-//                        if (s.equals(address.getCity())){
-//                            return R.error("此地区暂不支持配送");
-//                        }
-//                    }
-//                    if ("民权县".equals(address.getDistrict())){
-//                        return R.error("此地区暂不支持配送");
-//                    }
                 }
             }
             else{
@@ -1417,7 +1360,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         return fsStoreOrderVOS;
     }
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Throwable.class,propagation = Propagation.REQUIRED)
     public R payConfirm(String orderCode,String payCode, String tradeNo,String payType,Integer type) {
         try {
             FsStoreOrder order=null;
@@ -1426,17 +1369,17 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                 FsStorePayment storePayment = fsStorePaymentMapper.selectFsStorePaymentByPaymentCode(payCode);
                 if (storePayment!=null){
                     if(storePayment.getStatus().equals(0)){
-                        logger.info(payCode+"待支付");
+                        log.info(payCode+"待支付");
                         FsStorePayment paymentMap=new FsStorePayment();
                         paymentMap.setPaymentId(storePayment.getPaymentId());
                         paymentMap.setStatus(1);
                         paymentMap.setPayTime(new Date());
                         paymentMap.setTradeNo(tradeNo);
-                        if(payType.equals(PayType.微信小程序支付.getCode())){
-                            paymentMap.setPayTypeCode(PayType.微信小程序支付.name());
+                        if(payType.equals(PayType.WECHAT_MINI_PROGRAM_PAYMENT.getCode())){
+                            paymentMap.setPayTypeCode(PayType.WECHAT_MINI_PROGRAM_PAYMENT.name());
                         }
-                        else if(payType.equals(PayType.支付宝条码支付.getCode())){
-                            paymentMap.setPayTypeCode(PayType.支付宝条码支付.name());
+                        else if(payType.equals(PayType.ALIPAY_BARCODE_PAYMENT.getCode())){
+                            paymentMap.setPayTypeCode(PayType.ALIPAY_BARCODE_PAYMENT.name());
                         }
                         if (storePayment.getPayMode().equals("yb")){
                             OrderQueryDTO orderQueryDTO = new OrderQueryDTO();
@@ -1446,12 +1389,12 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                             paymentMap.setBankTransactionId(orderResult.getBankTrxId());
                         }
                         fsStorePaymentMapper.updateFsStorePayment(paymentMap);
-                        logger.info(payCode+"已支付");
+                        log.info(payCode+"已支付");
                         order=fsStoreOrderMapper.selectFsStoreOrderByOrderId(Long.parseLong(storePayment.getBusinessId()));
                     }
                 }
                 else{
-                    logger.info(payCode+"支付单号不存在");
+                    log.info(payCode+"支付单号不存在");
                     return R.error("支付单号不存在");
                 }
             }
@@ -1459,12 +1402,12 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                 order=fsStoreOrderMapper.selectFsStoreOrderByOrderCode(orderCode);
             }
             if(order!=null&&!order.getStatus().equals(FsStoreOrderStatusEnum.STATUS_1.getValue())){
-                logger.info(payCode+"订单号不为待支付回退");
+                log.info(payCode+"订单号不为待支付回退");
                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                 return R.error();
             }
             if(order!=null&&!order.getIsPay().equals(0)){
-                logger.info(payCode+"订单号支付不为待支付回退");
+                log.info(payCode+"订单号支付不为待支付回退");
                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                 return R.error();
             }
@@ -1507,7 +1450,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             }
             return R.ok();
         }catch (Exception e){
-            logger.info(payCode+"异常了"+e.getMessage());
+            log.info(payCode+"异常了"+e.getMessage());
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             FsStorePaymentError err = new FsStorePaymentError();
             err.setOrderNo(orderCode);
@@ -1563,7 +1506,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
     public int afterSales(FsStoreOrderSalesParam fsStoreOrderSalesParam) {
         FsStoreOrder order = fsStoreOrderMapper.selectFsStoreOrderByOrderId(fsStoreOrderSalesParam.getOrderId());
         if (order.getStatus()<0){
@@ -1700,11 +1643,6 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             erpOrder.setVip_code(order.getUserId().toString());
         }
         erpOrder.setPlatform_code(order.getOrderCode());
-//        if(order.getStoreHouseCode()==null){
-//            erpOrder.setWarehouse_code("CQDS001");
-//        }else{
-//            erpOrder.setWarehouse_code(order.getStoreHouseCode());
-//        }
 
         erpOrder.setShop_code(sysConfig.getErpShopCode());
         erpOrder.setSeller_memo(order.getRemark());
@@ -1871,9 +1809,8 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         String s = fsPrescribeService.PrescribeImg(order.getPrescribeId());
         erpOrder.setSeller_memo(erpOrder.getSeller_memo()+"||"+s+"||");
         ErpOrderResponse response= erpOrderService.addOrder(erpOrder);
-        logger.info("ErpCreate:"+order.getOrderCode()+":"+JSONUtil.toJsonStr(response));
-        if(response.getSuccess()){
-
+        log.info("ErpCreate:"+order.getOrderCode()+":"+JSONUtil.toJsonStr(response));
+        if(Boolean.TRUE.equals(response.getSuccess())){
             //支付成功后 将订单号写入待发货的REDIS中
             redisCache.setCacheObject("delivery"+":"+response.getCode(),order.getOrderCode());
             //写入外部订单号
@@ -1883,34 +1820,16 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                 order.setExtendOrderId(response.getCode());
             }
             fsStoreOrderMapper.updateFsStoreOrder(order);
-        }else {
-//            if (response.getErrorDesc().equals("该订单已创建")){
-//                ErpOrderQueryRequert erpOrderQueryRequert = new ErpOrderQueryRequert();
-//                erpOrderQueryRequert.setPlatform_code(order.getOrderCode());
-//                ErpOrderQueryResponse erp = erpOrderService.getOrder(erpOrderQueryRequert);
-//                logger.info("ErpCreate:"+order.getOrderCode()+":"+JSONUtil.toJsonStr(response));
-//
-//                if (erp.getOrders()!=null&&erp.getOrders().size()>0){
-//                    ErpOrderQuery epr = erp.getOrders().get(0);
-//                    redisCache.setCacheObject("delivery"+":"+epr.getCode(),order.getOrderCode());
-//                    order.setExtendOrderId(epr.getCode());
-//                    fsStoreOrderMapper.updateFsStoreOrder(order);
-//                }
-//            }
         }
         //写入日志
 
-
     }
 
-
-
-
     @Override
     public ExpressResultDTO updateDeliveryItem(ExpressNotifyDTO notifyDTO) {
         String data= URLDecoder.decode(notifyDTO.getRequestData(), Charset.forName("UTF-8"));
         //ExpressInfoDTO
-        logger.info("快递根踪回调:"+data);
+        log.info("快递根踪回调: {}",data);
         FsSysConfig sysConfig = configUtil.getSysConfig();
         ExpressDataDTO expressDataDTO=JSONUtil.toBean(data,ExpressDataDTO.class);
         if(expressDataDTO!=null&&expressDataDTO.getData()!=null){
@@ -1918,8 +1837,8 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                 List<FsStoreOrder> orders=this.selectFsStoreOrderListByDeliveryId(dto.getLogisticCode());
                 if(orders!=null){
                     for(FsStoreOrder order:orders){
-                        logger.info("订单信息:"+JSONUtil.toJsonStr(order));
-                        logger.info("运单号:"+dto.getLogisticCode());
+                        log.info("订单信息: {}",JSONUtil.toJsonStr(order));
+                        log.info("运单号: {}",dto.getLogisticCode());
                         if(order!=null && (order.getDeliveryStatus()==null||order.getDeliveryStatus()!=3)){
                             if (dto.getState()!=null&&dto.getStateEx()!=null){
                                 FsStoreOrder map=new FsStoreOrder();
@@ -1934,7 +1853,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                                 }
                             }
                             if (!dto.isSuccess()){
-                                logger.info("物流状态异常:{}"+dto);
+                                log.info("物流状态异常:{}",dto);
                             }
                             if ((!dto.isSuccess()&&dto.getReason()!=null&&dto.getReason().equals("三天无轨迹"))||(!dto.isSuccess()&&dto.getReason()!=null&&dto.getReason().equals("七天内无轨迹变化"))){
                                 //订阅物流回调
@@ -1946,7 +1865,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                                     }
                                 }
                                 expressService.subscribeEspress(order.getOrderCode(),order.getDeliveryCode(),order.getDeliverySn(),lastFourNumber);
-                                logger.info("物流重新订阅:{}",order.getDeliverySn());
+                                log.info("物流重新订阅:{}",order.getDeliverySn());
                             }
 
                         }
@@ -1965,7 +1884,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
     public R syncExpress(Long id) {
 
         FsStoreOrder order = fsStoreOrderMapper.selectFsStoreOrderByOrderId(id);
@@ -2058,7 +1977,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Throwable.class,propagation = Propagation.REQUIRED)
     public R editTuiMoney(Long id) {
         FsStoreOrder order= fsStoreOrderMapper.selectFsStoreOrderByOrderId(id);
         if(order.getStatus()==4){
@@ -2131,8 +2050,6 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
 
         for (StoreOrderExpressExportDTO dto : list)
         {
-//            try
-//            {
                 FsStoreOrder order=fsStoreOrderMapper.selectFsStoreOrderListByDeliverySnLOne(dto.getDeliverySn());
                 if (StringUtils.isNull(order))
                 {
@@ -2168,13 +2085,6 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                     }
                 }
             }
-//            catch (Exception e)
-//            {
-//                String msg = "<br/>" + failureNum + "、快递单号 " + dto.getDeliverySn() + " 导入异常:";
-//                importErrorMsg.append(msg+e.getMessage());
-//                failureNum++;
-//            }
-//        }
         importMsg.insert(0, "导入完成!成功" + successNum + " 条,失败"+failureNum+"条。");
         importMsg.append(importErrorMsg.toString());
         importMsg.append(importSuccessMsg.toString());
@@ -2201,7 +2111,8 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
 
     @Override
     public synchronized  R finishOrder(Long orderId) {
-        return finishStoreOrder(orderId);
+        IFsStoreOrderService iFsStoreOrderService = (IFsStoreOrderService) AopContext.currentProxy();
+        return iFsStoreOrderService.finishStoreOrder(orderId);
     }
 
     @Override
@@ -2262,26 +2173,16 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         }
     }
 
-    @Transactional
+    @Override
+    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
     public R finishStoreOrder(Long orderId){
         FsStoreOrder order= fsStoreOrderMapper.selectFsStoreOrderByOrderId(orderId);
-        if(order.getStatus()==FsStoreOrderStatusEnum.STATUS_3.getValue()){
+        if(Objects.equals(order.getStatus(), FsStoreOrderStatusEnum.STATUS_3.getValue())){
             order.setFinishTime(new Date());
             order.setStatus(4);
             fsStoreOrderMapper.updateFsStoreOrder(order);
             fsStoreOrderLogsService.create(order.getOrderId(), FsStoreOrderLogEnum.FINISH_ORDER.getValue(),
                     FsStoreOrderLogEnum.FINISH_ORDER.getDesc());
-
-            //模板消息支付成功发布事件
-//            TemplateBean templateBean = TemplateBean.builder()
-//                    .orderId(order.getOrderId().toString())
-//                    .title(order.getOrderCode().toString())
-//                    .remark("您的订单已签收成功")
-//                    .time(order.getFinishTime())
-//                    .uid(order.getUserId())
-//                    .templateType(TemplateListenEnum.TYPE_3.getValue())
-//                    .build();
-//            publisher.publishEvent(new TemplateEvent(this, templateBean));
             return R.ok("操作成功");
         }
         else {
@@ -2306,7 +2207,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
     public void addIntegralAndShareByStoreOrder(FsStoreOrder fsStoreOrder) {
         fsUserService.addUserIntegral(fsStoreOrder.getPayMoney(),fsStoreOrder.getUserId(),fsStoreOrder.getOrderId(),2);
         FsStoreOrder order = new FsStoreOrder();
@@ -2357,10 +2258,10 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                             sharePayment.setShareMoney(new BigDecimal(r.getBody().getTrxAmt()));
                             fsStorePaymentMapper.updateFsStorePayment(sharePayment);
                         }else {
-                            logger.info("分账失败:"+fsStorePayment);
+                            log.error("分账失败: {}",fsStorePayment);
                         }
                     }else {
-                        logger.info("分账请求失败:"+fsStorePayment+r.getRetMsg());
+                        log.error("分账请求失败: {}",fsStorePayment+r.getRetMsg());
                     }
 
             }
@@ -2378,7 +2279,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             Long followDoctorId = fsStoreOrder.getFollowDoctorId();
             List<FsStoreOrder> orders = fsStoreOrderMapper.selectFsStoreOrderEndFollowByUserIdAndDocId(userId,followDoctorId);
 
-            if (orders==null||orders.size()==0){
+            if (CollectionUtils.isEmpty(orders)){
                 Long l = fsStoreOrderMapper.selectFsStoreOrderFollow(userId, followDoctorId);
                 MsgDTO msgDTO=new MsgDTO();
                 MsgCustomDTO customDTO=new MsgCustomDTO();
@@ -2396,10 +2297,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                 msgs1.add(msg1);
                 msgDTO.setMsgBody(msgs1);
                 MsgResponseDTO msgResponseDTO = imService.sendMsg(msgDTO);
-                logger.info("医生结束随访"+msgResponseDTO);
-
-
-
+                log.info("医生结束随访"+msgResponseDTO);
             }
             FsStoreOrder o = new FsStoreOrder();
             o.setOrderId(fsStoreOrder.getOrderId());
@@ -2432,8 +2330,9 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             }
         }
     }
-    @Transactional
+
     @Override
+    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
     public void endDeliveryOrder() {
         List<FsStoreOrder> fsStoreOrders = fsStoreOrderMapper.selectEndDeliveryOrder();
         for (FsStoreOrder fsStoreOrder : fsStoreOrders) {
@@ -2465,7 +2364,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
     public R returnCost(Long orderId) {
         FsStoreOrder order = fsStoreOrderMapper.selectFsStoreOrderByOrderId(orderId);
         if (order!=null){
@@ -2488,7 +2387,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                                     continue;
                                 }
                                 BigDecimal money = logs.getMoney().multiply(new BigDecimal(-1));
-                                logger.info("退款佣金扣除:"+company.getCompanyId()+":"+money);
+                                log.info("退款佣金扣除:"+company.getCompanyId()+":"+money);
                                 company.setMoney(company.getMoney().subtract(logs.getMoney()));
                                 companyMapper.updateCompany(company);
                                 CompanyMoneyLogs log=new CompanyMoneyLogs();
@@ -2505,7 +2404,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                         if (!doesNotContain6){
                             if(logs.getLogsType()==5){
                                 BigDecimal money = logs.getMoney().multiply(new BigDecimal(-1));
-                                logger.info("退款成本返还:"+company.getCompanyId()+":"+money);
+                                log.info("退款成本返还:"+company.getCompanyId()+":"+money);
                                 company.setMoney(company.getMoney().add(money));
                                 companyMapper.updateCompany(company);
                                 CompanyMoneyLogs log=new CompanyMoneyLogs();
@@ -2629,7 +2528,6 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
 
             if(order.getPayMoney().compareTo(new BigDecimal(0))==0){
                 this.payConfirm(order.getOrderCode(),"","","",2);
-                // tuiOrderUtil.TuiOrder(order.getOrderId());
                 return R.ok().put("data",param.getOrderId()).put("isPay","1");
             }
             else {
@@ -2762,7 +2660,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         if(order==null){
             return R.error("订单不存在");
         }
-        if(order.getStatus()!= FsStoreOrderStatusEnum.STATUS_1.getValue()){
+        if(!Objects.equals(order.getStatus(), FsStoreOrderStatusEnum.STATUS_1.getValue())){
             return R.error("订单状态不正确");
         }
 
@@ -2770,7 +2668,8 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         if(user!=null&& StringUtils.isNotEmpty(user.getMaOpenId())){
 
             if(order.getPayMoney().compareTo(new BigDecimal(0))==0){
-                this.payConfirm(order.getOrderCode(),"","","",2);
+                IFsStoreOrderService fsStoreOrderService1 = (IFsStoreOrderService) AopContext.currentProxy();
+                fsStoreOrderService1.payConfirm(order.getOrderCode(),"","","",2);
                 return R.ok().put("data",param.getOrderId()).put("isPay","1");
             }
             else {
@@ -2813,7 +2712,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                         o.setGoodsInfo("药品订单支付"); // 订单信息
                         o.setOrderType(2);
                         o.setOrderId(order.getOrderId().toString());
-                        o.setPayType(Arrays.asList(PayType.支付宝条码支付.getCode()));
+                        o.setPayType(Arrays.asList(PayType.ALIPAY_BARCODE_PAYMENT.getCode()));
                         TzBankResult<PayCreateOrderResult> result = tzBankService.createOrder(o);
                         FsStorePayment mt=new FsStorePayment();
                         mt.setPaymentId(storePayment.getPaymentId());
@@ -2923,16 +2822,8 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             erpOrder.setVip_code(order.getUserId().toString());
         }
         erpOrder.setPlatform_code(order.getOrderCode());
-//        if(order.getStoreHouseCode()==null){
-//            erpOrder.setWarehouse_code("CQDS001");
-//        }
-//        else{
+
         erpOrder.setWarehouse_code(configUtil.getSysConfig().getErpWarehouseCode());
-//        }
-//        if(order.getStoreHouseCode().equals("YDSP001")){
-//            erpOrder.setShop_code("RunDayWuHan");
-//        }
-//        else{
         //判断是否开启erp
         FsSysConfig sysConfig = configUtil.getSysConfig();
         Integer erpOpen = sysConfig.getErpOpen();
@@ -2950,15 +2841,11 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             }
         }
 
-//        }
-//      erpOrder.setPost_fee(order.getTotalPostage().doubleValue());
         erpOrder.setSeller_memo(order.getRemark());
-        // order.setCurrency_code("JCZD");
         List<ErpOrderPayment> payments=new ArrayList<>();
         ErpOrderPayment payment=new ErpOrderPayment();
         payment.setPay_type_code("weixin");
         payment.setPayment(order.getPayMoney().doubleValue());
-        //payment.setPaytime(new Timestamp(System.currentTimeMillis()));
         if(order.getPayTime()!=null){
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
             String timeString = sdf.format(order.getPayTime());
@@ -2994,18 +2881,12 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             Company company = companyService.selectCompanyById(order.getCompanyId());
             if (order.getPayDelivery().compareTo(new BigDecimal(0)) == 0) {  //没有物流代收(全款订单)
                 FsExpress express = new FsExpress();
-                //express=expressService.selectFsExpressByOmsCode("SF.0235402855");
                 if(order.getPayPrice().compareTo(new BigDecimal(100))<=0){
                     express=expressService.selectFsExpressByOmsCode("ZTPDD");
                 }
                 else{
                     boolean found = containsAddress(order.getUserAddress());
-                    if(found){
-                        express=expressService.selectFsExpressByOmsCode("SF.0235402855");
-                    }
-                    else{
-                        express=expressService.selectFsExpressByOmsCode("SF.0235402855");
-                    }
+                    express=expressService.selectFsExpressByOmsCode(expressOmsCode);
                 }
                 erpOrder.setExpress_code(express.getOmsCode());
                 order.setDeliveryName(express.getName());
@@ -3025,7 +2906,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                     if(StringUtils.isNotEmpty(company.getOmsCode())){
                         express = expressService.selectFsExpressByOmsCode(company.getOmsCode());
                     }else{
-                        express = expressService.selectFsExpressByOmsCode("SF.0235402855");
+                        express = expressService.selectFsExpressByOmsCode(expressOmsCode);
                     }
                 }
                 erpOrder.setExpress_code(express.getOmsCode());
@@ -3046,12 +2927,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                     express=expressService.selectFsExpressByOmsCode("ZTPDD");
                 }else{
                     boolean found = containsAddress(order.getUserAddress());
-                    if(found){
-                        express=expressService.selectFsExpressByOmsCode("SF.0235402855");
-                    }
-                    else{
-                        express=expressService.selectFsExpressByOmsCode("SF.0235402855");
-                    }
+                    express=expressService.selectFsExpressByOmsCode(expressOmsCode);
                 }
                 erpOrder.setExpress_code(express.getOmsCode());
                 order.setDeliveryName(express.getName());
@@ -3069,7 +2945,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                     express=expressService.selectFsExpressByOmsCode("EMS.1");
                 }
                 else {
-                    express=expressService.selectFsExpressByOmsCode("SF.0235402855");
+                    express=expressService.selectFsExpressByOmsCode(expressOmsCode);
                 }
                 erpOrder.setExpress_code(express.getOmsCode());
                 order.setDeliveryName(express.getName());
@@ -3089,9 +2965,9 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                 CompanyDept dept=companyDeptService.selectCompanyDeptById(companyUser.getDeptId());
                 if(dept!=null){
                     List<String> names=companyDeptService.selectCompanyDeptNamesByIds(dept.getAncestors());
-                    if(names!=null&&names.size()>0){
+                    if(CollectionUtil.isNotEmpty(names)){
                         //写备注
-                        erpOrder.setSeller_memo(erpOrder.getSeller_memo()+"-"+StringUtils.join(names, ",")+","+dept.getDeptName() );
+                        erpOrder.setSeller_memo(erpOrder.getSeller_memo()+"-"+ StringUtils.join(names, ",")+","+dept.getDeptName() );
                     }
                 }
                 erpOrder.setSeller_memo(erpOrder.getSeller_memo()+"-"+companyUser.getNickName());
@@ -3100,7 +2976,6 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
 
         if("WHSP001".equals(order.getStoreHouseCode())){
             //武汉不备注快递史
-            //erpOrder.setSeller_memo(erpOrder.getSeller_memo()+"-"+order.getDeliveryName());
         }
         else{
             erpOrder.setSeller_memo(erpOrder.getSeller_memo()+"-"+ order.getDeliveryName());
@@ -3113,11 +2988,6 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         remarkDTO.setCouponMoney(order.getCouponPrice());
         remarkDTO.setOrderId(order.getOrderCode());
         remarkDTO.setYdMoney(order.getPayPrice().subtract(order.getPayMoney().subtract(order.getPayDelivery())));
-//        //套餐标题也传过去
-//        if (order.getOrderCreateType() == 2){
-//            JSONObject jsonStr = JSONObject.parseObject(order.getPackageJson());
-//            remarkDTO.setPackageTitle(jsonStr.getString("title"));
-//        }
 
         if(order.getPayTime()!=null){
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

+ 5 - 1
fs-service/src/main/java/com/fs/qw/mapper/QwExternalContactMapper.java

@@ -233,7 +233,11 @@ public interface QwExternalContactMapper extends BaseMapper<QwExternalContact> {
             "            <if test=\"description != null  and description != ''\"> and ec.description = #{description}</if>\n" +
 
             "<if test ='tagIds!=null and tagIds.size()!=0 '> " +
-            " and <foreach collection='tagIds'  item='item' index='index'  open='( 1=2 ' separator='' close=')'> or find_in_set(  #{item} , REGEXP_REPLACE ( ec.tag_ids, '[\"\\\\[\\\\]]', '' ) )  </foreach> " +
+            "    and (\n" +
+            "    <foreach collection='tagIds' item='item' index='index' separator=' AND '>\n" +
+            "        find_in_set(#{item}, REGEXP_REPLACE(ec.tag_ids, '[\"\\\\[\\\\]]', ''))\n" +
+            "    </foreach>\n" +
+            "    )"+
             "</if> " +
 
             "            <if test=\"remarkMobiles != null  and remarkMobiles != ''\"> and ec.remark_mobiles like concat( #{remarkMobiles}, '%')</if>\n" +

+ 2 - 2
fs-service/src/main/java/com/fs/tzBankPay/RequestController.java

@@ -43,7 +43,7 @@ public class RequestController {
         o.setPayCertType("22"); // 证件类型
         o.setPayCertNo("520321199801300897"); // 证件号码
 
-        List<String> payType = Arrays.asList(PayType.微信二维码支付.getCode(),PayType.支付宝条码支付.getCode());
+        List<String> payType = Arrays.asList(PayType.WECHAT_QR_CODE_PAYMENT.getCode(),PayType.ALIPAY_BARCODE_PAYMENT.getCode());
         //    o.setPayType(payType); // 支付方式
         //o.setClientIp("YourClientIp"); // 客户端 IP
 //        o.setRiskClientImei("1582220"); // 手机 Imei 数字人民币支付必传
@@ -121,7 +121,7 @@ public class RequestController {
         o.setPayCertType("22"); // 证件类型
         o.setPayCertNo("520321199801300897"); // 证件号码
 
-        List<String> payType = Arrays.asList(PayType.微信二维码支付.getCode(),PayType.支付宝条码支付.getCode());
+        List<String> payType = Arrays.asList(PayType.WECHAT_QR_CODE_PAYMENT.getCode(),PayType.ALIPAY_BARCODE_PAYMENT.getCode());
     //    o.setPayType(payType); // 支付方式
         //o.setClientIp("YourClientIp"); // 客户端 IP
 //        o.setRiskClientImei("1582220"); // 手机 Imei 数字人民币支付必传

+ 1 - 1
fs-service/src/main/java/com/fs/tzBankPay/TzBankService/TzBankServiceImpl/TzBankServiceImpl.java

@@ -47,7 +47,7 @@ public class TzBankServiceImpl implements TzBankService {
         // 增加一个小时
         Instant oneHourLater = currentTimestamp.plusSeconds(3600);
         order.setExpiredTime(oneHourLater.toEpochMilli()+""); // 订单过期时间
-        List<String> payType = Arrays.asList(PayType.微信小程序支付.getCode(),PayType.支付宝条码支付.getCode());
+        List<String> payType = Arrays.asList(PayType.WECHAT_MINI_PROGRAM_PAYMENT.getCode(),PayType.ALIPAY_BARCODE_PAYMENT.getCode());
         if(order.getPayType()==null){
             order.setPayType(payType);
         }

+ 21 - 22
fs-service/src/main/java/com/fs/tzBankPay/doman/PayType.java

@@ -1,27 +1,27 @@
 package com.fs.tzBankPay.doman;
 
 public enum PayType {
-    账户支付("01"),
-    B2C网关("02"),
-    B2B网关("03"),
-    快捷支付("04"),
-    企业白条支付("06"),
-    e购贷支付("08"),
-    数字人民币支付("09"),
-    微信小程序支付("14"),
-    微信公众号("15"),
-    微信二维码支付("16"),
-    支付宝条码支付("27"),
-    云闪付("44"),
-    台行及村镇卡支付("45"),
-    B2B网银("46"),
-    B2C网银("47"),
-    钱包支付("48"),
-    台行及村镇企业账户支付("49"),
-    供应链白条支付("51"),
-    银联支付("53"),
-    银联签约支付("55"),
-    代付("99");
+    ACCOUNT_PAYMENT("01"),
+    B2C_GATEWAY("02"),
+    B2B_GATEWAY("03"),
+    QUICK_PAYMENT("04"),
+    ENTERPRISE_CREDIT_PAYMENT("06"),
+    E_PURCHASE_LOAN_PAYMENT("08"),
+    DIGITAL_RMB_PAYMENT("09"),
+    WECHAT_MINI_PROGRAM_PAYMENT("14"),
+    WECHAT_PUBLIC_ACCOUNT("15"),
+    WECHAT_QR_CODE_PAYMENT("16"),
+    ALIPAY_BARCODE_PAYMENT("27"),
+    CLOUD_QUICK_PASS("44"),
+    TAIWAN_AND_VILLAGE_BANK_CARD_PAYMENT("45"),
+    B2B_ONLINE_BANKING("46"),
+    B2C_ONLINE_BANKING("47"),
+    WALLET_PAYMENT("48"),
+    TAIWAN_AND_VILLAGE_ENTERPRISE_ACCOUNT_PAYMENT("49"),
+    SUPPLY_CHAIN_CREDIT_PAYMENT("51"),
+    UNIONPAY_PAYMENT("53"),
+    UNIONPAY_CONTRACT_PAYMENT("55"),
+    PAYMENT_ON_BEHALF("99");
 
     private final String code;
 
@@ -33,4 +33,3 @@ public enum PayType {
         return code;
     }
 }
-

+ 2 - 0
fs-service/src/main/resources/application-common.yml

@@ -39,6 +39,8 @@ logging:
     com.fs: info
     org.springframework: warn
 
+express:
+  omsCode: "SF.0235402855"
 # Spring配置
 spring:
   cache:

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

@@ -77,7 +77,7 @@ cloud_host:
   company_name: 四福堂
 #看课授权时显示的头像
 headerImg:
-  imgUrl: https://cos.his.cdwjyyh.com/fs/20250606/fdf4b41abc0741758ab6c2c70dafb5be.png
+  imgUrl: https://sft-1361917636.cos.ap-chongqing.myqcloud.com/sft/20250606/b08b1a6212f44f2998423c8c5d7712ee.png
 ipad:
   ipadUrl: http://ipad.cdwjyyh.com
 wx_miniapp_temp:

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

@@ -77,7 +77,7 @@ cloud_host:
   company_name: 易诊通
 #看课授权时显示的头像
 headerImg:
-  imgUrl: https://cos.his.cdwjyyh.com/fs/20250522/28c3d8d5c42a4bcdb85292c2e5eb2a37.png
+  imgUrl: https://yztcourse-1325300895.cos.ap-guangzhou.myqcloud.com/yztcourse/20250523/e04871a98cc84be39a7f60c084698e21.jpg
 ipad:
   ipadUrl: http://ipad.cdwjyyh.com
 wx_miniapp_temp:

+ 148 - 0
fs-service/src/main/resources/application-druid-sxjz-test.yml

@@ -0,0 +1,148 @@
+# 数据源配置
+spring:
+    profiles:
+        include: config-druid-sxjz,common
+    # redis 配置
+    redis:
+        host: 127.0.0.1
+        port: 6379
+        # 数据库索引
+        database: 0
+        # 密码
+        password:
+        # 连接超时时间
+        timeout: 10s
+        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://1.14.104.71:8123/sop_test?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://139.155.247.58:2345/fs_his?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    username: root
+                    password: Sxdtcbm@#+!2025
+                # 从库数据源
+                slave:
+                    # 从数据源开关/默认关闭
+                    enabled: false
+                    url:
+                    username:
+                    password:
+                # 初始连接数
+                initialSize: 5
+                # 最小连接池数量
+                minIdle: 10
+                # 最大连接池数量
+                maxActive: 2000
+                # 配置获取连接等待超时的时间
+                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://139.155.247.58:2345/fs_his_sop?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    username: root
+                    password: Sxdtcbm@#+!2025
+                # 初始连接数
+                initialSize: 5
+                # 最小连接池数量
+                minIdle: 10
+                # 最大连接池数量
+                maxActive: 200
+                # 配置获取连接等待超时的时间
+                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: rmq-1243b25nj.rocketmq.gz.public.tencenttdmq.com:8080 # RocketMQ NameServer 地址
+    producer:
+        group: my-producer-group
+        access-key: ak1243b25nj17d4b2dc1a03 # 替换为实际的 accessKey
+        secret-key: sk08a7ea1f9f4b0237 # 替换为实际的 secretKey
+    consumer:
+        group: voice-group
+        access-key: ak1243b25nj17d4b2dc1a03 # 替换为实际的 accessKey
+        secret-key: sk08a7ea1f9f4b0237 # 替换为实际的 secretKey

+ 4 - 0
fs-service/src/main/resources/mapper/company/CompanyPostMapper.xml

@@ -129,4 +129,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             </if>
         </where>
     </select>
+    <select id="selectCompanyPostCode" resultType="com.fs.company.domain.CompanyPost">
+        <include refid="selectCompanyPostVo"/>
+        where post_code=#{postCode} AND company_id = #{companyId}
+    </select>
 </mapper>

+ 4 - 0
fs-service/src/main/resources/mapper/company/CompanyRoleMapper.xml

@@ -177,4 +177,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{roleId}
         </foreach>
     </select>
+
+    <select id="selectCompanyRoleByRoleKey" resultType="com.fs.company.domain.CompanyRole">
+        SELECT * FROM company_role WHERE del_flag=0 AND role_key = #{roleKey}
+    </select>
 </mapper>

+ 13 - 0
fs-service/src/main/resources/mapper/company/CompanyUserMapper.xml

@@ -510,4 +510,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <update id="batchUpdateUserDomain">
         update company_user set domain=#{domain} where user_id in <foreach collection="ids"  item="item" index="index" open="(" separator="," close=")">#{item}</foreach>
     </update>
+
+    <update id="batchUpdateUserDept">
+        UPDATE company_user
+        SET dept_id = CASE user_id
+        <foreach collection="companyUserList" item="item" separator=" ">
+            WHEN #{item.userId} THEN #{item.deptId}
+        </foreach>
+        END
+        WHERE user_id IN
+        <foreach collection="companyUserList" item="item" open="(" separator="," close=")">
+            #{item.userId}
+        </foreach>
+    </update>
 </mapper>

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

@@ -413,7 +413,7 @@ public class InquiryOrderController extends  AppBaseController {
                     o.setGoodsInfo("问诊订单支付"); // 订单信息
                     o.setOrderType(2);
                     o.setOrderId(order.getOrderId().toString());
-                    o.setPayType(Arrays.asList(PayType.支付宝条码支付.getCode()));
+                    o.setPayType(Arrays.asList(PayType.ALIPAY_BARCODE_PAYMENT.getCode()));
                     TzBankResult<PayCreateOrderResult> result = tzBankService.createOrder(o);
                     FsStorePayment mt=new FsStorePayment();
                     mt.setPaymentId(storePayment.getPaymentId());

+ 0 - 3
fs-user-app/src/main/java/com/fs/app/controller/StoreOrderController.java

@@ -74,9 +74,6 @@ public class StoreOrderController extends  AppBaseController {
     @GetMapping("/getMyStoreOrderById")
     public R getMyStoreOrderById(@RequestParam("orderId") Long orderId, HttpServletRequest request){
         FsStoreOrder order=orderService.selectFsStoreOrderByOrderId(orderId);
-//        if(!order.getUserId().equals(Long.parseLong(getUserId()))){
-//            return R.error("非法操作");
-//        }
         order.setUserPhone(ParseUtils.parsePhone(order.getUserPhone()));
         order.setUserAddress(ParseUtils.parseIdCard(order.getUserAddress()));
         List<FsStoreOrderItemListUVO> list=orderItemService.selectFsStoreOrderItemListUVOByOrderId(orderId);

+ 604 - 0
fs-user-course/src/main/java/com/fs/course/controller/CommonController.java

@@ -0,0 +1,604 @@
+package com.fs.course.controller;
+
+
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
+import com.baidubce.appbuilder.model.dataset.DocumentListResponse;
+import com.fs.ai.service.IBaiduAIService;
+import com.fs.ai.vo.BaiduAIMsgResultVO;
+import com.fs.bdAdv.domain.FsAdvSem;
+import com.fs.bdAdv.service.IFsAdvSemService;
+import com.fs.chat.config.WxConfig;
+import com.fs.chat.domain.ChatRole;
+import com.fs.chat.service.IChatRoleService;
+import com.fs.common.config.FSConfig;
+import com.fs.common.constant.Constants;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.R;
+import com.fs.common.core.redis.RedisCache;
+import com.fs.common.exception.file.OssException;
+import com.fs.common.utils.file.FileUploadUtils;
+import com.fs.common.utils.http.HttpUtils;
+import com.fs.common.utils.sign.Md5Utils;
+import com.fs.core.utils.OrderCodeUtils;
+import com.fs.course.config.CourseConfig;
+import com.fs.course.param.SignParam;
+import com.fs.course.service.IHuaweiVodService;
+import com.fs.course.utils.CityTreeUtil;
+import com.fs.course.utils.JwtUtils;
+import com.fs.course.vo.CityVO;
+import com.fs.event.TemplateBean;
+import com.fs.event.TemplateEvent;
+import com.fs.event.TemplateListenEnum;
+import com.fs.event.WeixinTemplateService;
+import com.fs.framework.config.ServerConfig;
+import com.fs.his.config.FsSysConfig;
+import com.fs.his.domain.*;
+import com.fs.his.param.FsInquiryOrderFinishParam;
+import com.fs.his.service.*;
+import com.fs.his.utils.ConfigUtil;
+import com.fs.im.dto.*;
+import com.fs.im.service.IImService;
+import com.fs.qw.service.IQwAppContactWayService;
+import com.fs.system.oss.CloudStorageService;
+import com.fs.system.oss.OSSFactory;
+import com.fs.system.service.ISysConfigService;
+import com.fs.system.service.ISysDictDataService;
+import com.fs.system.vo.DictVO;
+import com.google.common.collect.Lists;
+import com.huaweicloud.sdk.vod.v1.model.BaseInfo;
+import com.tencentyun.TLSSigAPIv2;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import static com.fs.common.utils.SecurityUtils.getUserId;
+
+
+@Api("公共接口")
+@RestController
+@RequestMapping(value="/app/common")
+public class CommonController {
+	@Autowired
+	private RedisCache redisCache;
+	@Autowired
+	private IFsUserService userService;
+	@Autowired
+	private ApplicationEventPublisher publisher;
+	@Autowired
+	JwtUtils jwtUtils;
+	@Autowired
+	private ISysDictDataService dictDataService;
+	@Autowired
+	ConfigUtil configUtil;
+	@Autowired
+	private ISysConfigService configService;
+	@Autowired
+	private IFsCityService cityService;
+	@Autowired
+	private IFsDepartmentService departmentService;
+
+	@Autowired
+	private IFsHospitalService hospitalService;
+	@Autowired
+	private IImService imService;
+	@Autowired
+	private IFsInquiryOrderReportService reportService;
+	@Autowired
+	private IFsInquiryOrderService inquiryOrderService;
+	@Autowired
+	private IFsDoctorService doctorService;
+	@Autowired
+	private IFsFollowService followService;
+	@Autowired
+	private IBaiduAIService baiduAIService;
+	@Autowired
+	private IChatRoleService chatRoleService;
+	@Autowired
+	private WeixinTemplateService weixinTemplateService;
+	@Autowired
+	private ServerConfig serverConfig;
+	@Autowired
+	private IFsAppVersionService appVersionService;
+	@Autowired
+	private IHuaweiVodService huaweiVodService;
+	@Autowired
+	private IFsAdvSemService advSemService;
+
+	@Autowired
+	private IQwAppContactWayService qwAppContactWayService;
+
+//	@Autowired
+//	private RocketMQTemplate rocketMQTemplate;
+//
+//	@ApiOperation("testMqSend")
+//	@GetMapping(value = "/testMqSend")
+//	public R testMqSend()
+//	{
+//		rocketMQTemplate.syncSend("my-topic", MessageBuilder.withPayload(123).build());
+//		return R.ok();
+//	}
+
+
+	@ApiOperation("excel")
+	@GetMapping(value = "/exportExcel")
+	public void exportExcel() throws Exception {
+		String filePath="c://phone.xlsx";
+		FileInputStream inputStream = new FileInputStream(filePath);
+		Workbook workbook = new XSSFWorkbook(inputStream);
+		Sheet sheet = workbook.getSheetAt(0);
+		List<String> phones=new ArrayList<>();
+		// 遍历行
+		Iterator<Row> rowIterator = sheet.iterator();
+		int index1=0;
+		while (rowIterator.hasNext()) {
+			Row row = rowIterator.next();
+
+			// 遍历列
+			if(index1>0){
+				Iterator<Cell> cellIterator = row.iterator();
+				while (cellIterator.hasNext()) {
+					Cell cell = cellIterator.next();
+					// 读取单元格数据
+					try
+					{
+
+						if(StringUtils.isNotEmpty(cell.toString())){
+							String cellValue =cell.toString();
+							phones.add(cellValue);
+						}
+
+					}
+					catch (Exception e){
+
+
+					}
+
+				}
+
+			}
+			index1++;
+
+		}
+		workbook.close();
+		// 写入Excel数据
+		Workbook workbookOut = new XSSFWorkbook();
+		Sheet sheetOut = workbookOut.createSheet("NewSheet");
+		int index=0;
+		for(String p :phones){
+			Row row = sheetOut.createRow(index);
+			Cell cell1 = row.createCell(0);
+			cell1.setCellValue(p);
+			Cell cell2 = row.createCell(1);
+			cell2.setCellValue(Md5Utils.hash(p));
+			index++;
+		}
+
+		// 写入到文件
+		FileOutputStream outputStream = new FileOutputStream("C://output.xlsx");
+		workbookOut.write(outputStream);
+		workbookOut.close();
+		outputStream.close();
+
+	}
+	@ApiOperation("aiAddDocument")
+	@PostMapping("/aiAddDocument")
+	public R aiAddDocument(@RequestParam("file") MultipartFile file) throws Exception
+	{
+
+		if (file.isEmpty())
+		{
+			throw new OssException("上传文件不能为空");
+		}
+		// 上传文件路径
+		String filePath = FSConfig.getUploadPath();
+		// 上传并返回新文件名称
+		String fileName = FileUploadUtils.upload(filePath, file);
+		String url =filePath + fileName.replaceAll("/profile/upload","");
+
+		// 上传文件
+		String[] documentIds =baiduAIService.addDocument("88c6a6b0-0f75-4f47-ab27-fae27c74746d",url);
+
+		return R.ok().put("data",documentIds);
+	}
+	@ApiOperation("aiGetDocments")
+	@GetMapping(value = "/aiGetDocments")
+	public R aiGetDocments()
+	{
+		DocumentListResponse document =baiduAIService.getDocument("88c6a6b0-0f75-4f47-ab27-fae27c74746d",1,10,"");
+		return R.ok().put("data",document);
+//		BaiduAITokenVO vo=baiduAIService.getToken();
+//		BaiduAIMsgVO info=baiduAIService.callAI(msg);
+//		return R.ok().put("data",info);
+	}
+	@ApiOperation("aiRun")
+	@GetMapping(value = "/aiRun")
+	public R aiRun(@RequestParam(value = "msg", required = false) String msg )
+	{
+		ChatRole chatRole=chatRoleService.selectChatRoleByKfId("wkb56IcAAAY3el_KSzhhjslPAATDmd_g");
+		if(chatRole!=null){
+			//获取配置
+			WxConfig wxConfig=JSONUtil.toBean(chatRole.getModeConfigJson(), WxConfig.class);
+			BaiduAIMsgResultVO vo=baiduAIService.run(wxConfig.getAppId(),null,msg);
+			return R.ok().put("data",vo);
+		}
+		else{
+			//未配置客服
+			return R.error();
+		}
+
+
+//		BaiduAITokenVO vo=baiduAIService.getToken();
+//		BaiduAIMsgVO info=baiduAIService.callAI(msg);
+//		return R.ok().put("data",info);
+	}
+	@ApiOperation("测试")
+	@GetMapping(value = "/getTest")
+	public AjaxResult getTest(@RequestParam(value = "fid", required = false) Long fid)
+	{
+		FsFollow follow=followService.selectFsFollowByFollowId(fid);
+		MsgDTO msgDTO3=new MsgDTO();
+		MsgCustomDTO customDTO3=new MsgCustomDTO();
+		customDTO3.setType("startFollow");
+		customDTO3.setOrderType(2);
+		customDTO3.setFollowId(follow.getFollowId().toString());
+		customDTO3.setOrderId(follow.getInquiryOrderId().toString());
+		customDTO3.setImType(2);
+		msgDTO3.setCloudCustomData(JSONUtil.toJsonStr(customDTO3));
+		msgDTO3.setFrom_Account("U-"+follow.getUserId());
+		msgDTO3.setTo_Account("D-"+follow.getDoctorId()	);
+		List<MsgDataDTO> msgs3=new ArrayList<>();
+		MsgDataDTO msg3=new MsgDataDTO();
+		String ext= JSONUtil.toJsonStr(follow);
+		msg3.setMsgContent(new MsgDataFormatDTO("follow",ext,follow.getFollowId().toString()));
+		msg3.setMsgType("TIMCustomElem");//TIMCustomElem
+		msgs3.add(msg3);
+		msgDTO3.setMsgBody(msgs3);
+		MsgResponseDTO msgResponseDTO3 = imService.sendMsg(msgDTO3);
+		return AjaxResult.success("");
+	}
+
+	@GetMapping(value = "/testPush")
+	@ApiOperation("测试推送")
+	public R testPush(@RequestParam(value = "uid", required = false) Long uid)
+	{
+		TemplateBean templateBean = TemplateBean.builder()
+				.orderId("111")
+				.title("订单已取消")
+				.remark("您的订单已取消")
+				.uid(uid)
+				.templateType(TemplateListenEnum.TYPE_1.getValue())
+				.build();
+		publisher.publishEvent(new TemplateEvent(this, templateBean));
+		return  R.ok();
+
+	}
+
+
+	@ApiOperation("获取数据字典")
+	@GetMapping("/getDictByKey")
+    @Cacheable(value="dicts", key="#key")
+	public R getDictByKey(@RequestParam(value = "key", required = false) String key){
+		List<DictVO> dicts=dictDataService.selectDictDataListByType(key);
+		return R.ok().put("data",dicts);
+	}
+
+	@GetMapping(value = "/getConfigByKey")
+	@ApiOperation("获取配置")
+	public R getConfigByKey(@RequestParam(value = "key", required = false) String key)
+	{
+		String config=configService.selectConfigByKey(key);
+		return  R.ok().put("data",config);
+
+	}
+
+
+	@PostMapping("uploadOSS")
+	public R uploadOSS(@RequestParam("file") MultipartFile file) throws Exception
+	{
+
+		if (file.isEmpty())
+		{
+			throw new OssException("上传文件不能为空");
+		}
+		// 上传文件
+		String fileName = file.getOriginalFilename();
+		String suffix = fileName.substring(fileName.lastIndexOf("."));
+		CloudStorageService storage = OSSFactory.build();
+		String url = storage.uploadSuffix(file.getBytes(), suffix);
+		return R.ok().put("url",url);
+	}
+
+	@PostMapping("/uploadHuaWeiVod")
+	public R uploadHuaWeiVod()
+	{
+		// 本地要上传的媒资路径
+		String filePath = "D:\\WeChat\\file\\WeChat Files\\wxid_cnp9jj0rcnr821\\FileStorage\\Video\\2024-07\\4faef56eb3d8c22f33f5d619a20232fb.mp4";
+
+		// 上传媒资文件
+//		huaweiVodService.uploadPartFile(filePath);
+		return R.ok();
+	}
+
+	@GetMapping("/getHuaWeiUrl")
+	public R getHuaWeiUrl()
+	{
+		BaseInfo data = huaweiVodService.getBaseInfo("5117c9850a69ffc7cddd3cb528c546d6");
+		return R.ok().put("data",data);
+	}
+
+	@GetMapping(value = "/testInquiryOrder")
+	@ApiOperation("测试开药结束")
+	public R testInquiryOrder()
+	{
+		FsInquiryOrderFinishParam param=new FsInquiryOrderFinishParam();
+		param.setOrderId(740653l);
+		param.setDoctorId(113l);
+		R  r=inquiryOrderService.finishOrder(param);
+		return r;
+	}
+
+	@GetMapping(value = "/getTlsSig")
+	@ApiOperation("获取腾讯云签名")
+	public R getTlsSig(@Validated SignParam signParam)
+	{
+		FsSysConfig fsConfig = configUtil.getSysConfig();
+		TLSSigAPIv2 api = new TLSSigAPIv2(fsConfig.getSdkAppId(), fsConfig.getSdkAppKey());
+		String sign=api.genUserSig(signParam.getUserId(),180*86400);
+		return R.ok().put("data",sign);
+	}
+	@GetMapping(value = "/testSend")
+	@ApiOperation("testSend")
+	public R testSend( )
+	{
+//		MsgDTO msgDTO=new MsgDTO();
+//		msgDTO.setFrom_Account("D-6");
+//		msgDTO.setTo_Account("U-40487");
+//		List<MsgDataDTO> msgs=new ArrayList<>();
+//		MsgDataDTO msg=new MsgDataDTO();
+//		FsInquiryOrderReport report=reportService.selectFsInquiryOrderReportByOrderId(252l);
+//		String ext= JSONUtil.toJsonStr(report);
+//		String orderId="252";
+//		msg.setMsgContent(new MsgDataFormatDTO("report",ext,orderId));
+//		msg.setMsgType("TIMCustomElem");//TIMCustomElem
+//		msgs.add(msg);
+//		msgDTO.setMsgBody(msgs);
+
+		MsgDTO msgDTO=new MsgDTO();
+
+		MsgCustomDTO customDTO=new MsgCustomDTO();
+		customDTO.setType("startInquiry");
+		customDTO.setOrderId("279");
+		customDTO.setFollowId("1");
+		customDTO.setImType(1);
+		msgDTO.setCloudCustomData(JSONUtil.toJsonStr(customDTO));
+
+
+		msgDTO.setTo_Account("D-63");
+		msgDTO.setFrom_Account("U-40479");
+		List<MsgDataDTO> msgs=new ArrayList<>();
+		MsgDataDTO msg=new MsgDataDTO();
+		InquiryOrderMsgDTO startDTO=new InquiryOrderMsgDTO();
+		startDTO.setTitle("张医生为您服务");
+		String ext= JSONUtil.toJsonStr(startDTO);
+		String orderId="231";
+		msg.setMsgContent(new MsgDataFormatDTO("test"));
+		msg.setMsgType("TIMTextElem");//TIMCustomElem
+		msgs.add(msg);
+		msgDTO.setMsgBody(msgs);
+		imService.sendMsg(msgDTO);
+		return R.ok();
+	}
+
+	@ApiOperation("获取城市数据")
+	@GetMapping("/getCitys")
+	@Cacheable("cityData")
+	public R getCitys(){
+		List<FsCity> list=cityService.selectFsCityList(new FsCity());
+		List<CityVO> cityVOS = Lists.newArrayList();
+		for (FsCity city : list){
+			CityVO cityVO = new CityVO();
+			cityVO.setV(city.getCityId());
+			cityVO.setN(city.getCityName());
+			cityVO.setPid(city.getParentId());
+			cityVOS.add(cityVO);
+		}
+		return R.ok().put("data", CityTreeUtil.list2TreeConverter(cityVOS, "0"));
+
+	}
+
+	@ApiOperation("获取医院列表")
+	@GetMapping("/getHospitalList")
+	public R getHospitalList(){
+		FsHospital map=new FsHospital();
+		map.setStatus(1);
+		List<FsHospital> list=hospitalService.selectFsHospitalList(map);
+		return R.ok().put("data",list);
+	}
+	@ApiOperation("获取科室列表")
+	@GetMapping("/getDepartmentList")
+	public R getDepartmentList(){
+		FsDepartment map=new FsDepartment();
+		map.setStatus(1);
+		List<FsDepartment> list=departmentService.selectFsDepartmentList(map);
+		return R.ok().put("data",list);
+	}
+
+	@ApiOperation("获取最新版本")
+	@GetMapping("/getAppVersion")
+	public R getAppVersion(@RequestParam("type")Integer type)
+	{
+		FsAppVersion version = appVersionService.getNewUserAppVersion(type);
+		return R.ok().put("data",version);
+	}
+	@ApiOperation("test")
+	@GetMapping("/test")
+	public R test()
+	{
+		String orderCode =  OrderCodeUtils.getOrderSn();
+		if(com.fs.common.utils.StringUtils.isEmpty(orderCode)) {
+			return R.error("订单生成失败,请重试");
+		}
+		return R.ok(orderCode);
+
+	}
+
+	@ApiOperation("百度营销监控地址")
+	@GetMapping(value = "/bdNotice")
+	public AjaxResult notice(
+			@RequestParam(name = "imei_md5", required = false) String imeiMd5,
+			@RequestParam(name = "oaid", required = false) String oaid,
+			@RequestParam(name = "ip", required = false) String ip,
+			@RequestParam(name = "ua", required = false) String ua,
+			@RequestParam(name = "model", required = false) String model,
+			@RequestParam(name = "os_version", required = false) String osVersion,
+			@RequestParam(name = "os_type", required = false) String os_type,
+			@RequestParam(name = "userid", required = false) String userId,
+			@RequestParam(name = "android_id_md5", required = false) String androidMd5,
+			@RequestParam(name = "pid", required = false) String planId,
+			@RequestParam(name = "uid", required = false) String userUid,
+			@RequestParam(name = "aid", required = false) String ideaId,
+			@RequestParam(name = "ts", required = false) Long ts,
+			@RequestParam(name = "click_id", required = false) String clickId,
+			@RequestParam(name = "callback_url", required = false) String callbackUrl) {
+		// 处理接收到的参数
+		StringBuilder response = new StringBuilder("");
+		response.append("\nIMEI MD5: ").append(imeiMd5);
+		response.append("\nIP: ").append(ip);
+		response.append("\nTimestamp: ").append(ts);
+		response.append("\nUser ID: ").append(userId);
+		response.append("\nPlan ID: ").append(planId);
+		response.append("\nUser UID: ").append(userUid);
+		response.append("\nIdea ID: ").append(ideaId);
+		response.append("\nClick ID: ").append(clickId);
+		response.append("\nCallback URL: ").append(callbackUrl);
+		System.out.println("---qxj bdNotice params:"+response.toString());
+		//if(StringUtils.isNotEmpty(clickId)){
+		FsAdvSem advSem=new FsAdvSem();
+		advSem.setImei(imeiMd5);
+		advSem.setOaid(oaid);
+		advSem.setIp(ip);
+		advSem.setCmdType(-1);//未操作
+		//advSem.setUa(ua);
+		advSem.setModel(model);
+		advSem.setOsType(Integer.parseInt(os_type));
+		advSem.setCallbackUrl(callbackUrl);
+		advSem.setClickId(clickId);
+		advSemService.insertFsAdvSem(advSem);
+		//}
+		return AjaxResult.success("ok");
+	}
+
+
+	@ApiOperation("百度营销回调")
+	@GetMapping(value = "/bdCallBack")
+	public AjaxResult bdCallBack(
+			@RequestParam(name = "oaid", required = false) String oaid,
+			@RequestParam(name = "ip", required = false) String ip,
+			@RequestParam(name = "ua", required = false) String ua,
+			@RequestParam(name = "aType", required = false) String aType,
+			@RequestParam(name = "aValue", required = false) String aValue,
+			@RequestParam(name = "model", required = false) String model,
+			@RequestParam(name = "osType", required = false) Integer osType,
+			@RequestParam(name = "userId", required = false)Long userId) {
+
+		FsAdvSem advSem=null;
+		String callBackUrl="";
+		String md5Sign;
+		if(StringUtils.isNotEmpty(oaid)){
+			advSem=advSemService.selectFsAdvSemByOaid(oaid);
+			if(advSem==null){
+				advSem=new FsAdvSem();
+			}
+			if(StringUtils.isNotEmpty(advSem.getCallbackUrl())){
+				callBackUrl=advSem.getCallbackUrl()+"&join_type=oaid";
+			}
+		}else{
+			advSem=advSemService.selectFsAdvSemByModel(model,osType);
+			if(advSem==null){
+				advSem=new FsAdvSem();
+			}
+			if(StringUtils.isNotEmpty(advSem.getCallbackUrl())){
+				callBackUrl=advSem.getCallbackUrl()+"&join_type=model";
+			}
+		}
+		if(aType.contentEquals("activate")){
+			advSem.setCmdType(0);//激活
+		}
+		if(aType.contentEquals("register")){
+			advSem.setCmdType(1);//注册
+		}
+		if(aType.contentEquals("orders")){
+			advSem.setCmdType(2); //下单
+		}
+		if(userId!=null){
+			advSem.setUserId(userId);
+		}
+		advSem.setAType(aType);
+		if(advSem!=null && advSem.getId()!=null){
+			advSemService.updateFsAdvSem(advSem);
+			String rspStr="";
+			if(StringUtils.isNotEmpty(callBackUrl)){
+				callBackUrl=callBackUrl.replace("{{ATYPE}}",aType).replace("{{AVALUE}}",aValue);
+				String akey="NTk0ODMyODM=";
+				md5Sign= Md5Utils.hash(callBackUrl+akey);
+				callBackUrl=callBackUrl+"&sign="+md5Sign;
+				rspStr = HttpUtils.sendGet(callBackUrl, "&sign="+md5Sign, Constants.UTF8);
+				//JSONObject obj = JSONObject.parseObject(rspStr);
+				//String errorCode = obj.getString("error_code");
+			}
+		}else{
+			//advSem.setImei(imeiMd5);
+			advSem.setOaid(oaid);
+			advSem.setIp(ip);
+			advSem.setCmdType(0);//未操作
+			//advSem.setUa(ua);
+			advSem.setModel(model);
+			advSem.setOsType(osType);
+			advSemService.insertFsAdvSem(advSem);
+		}
+		return AjaxResult.success("ok");
+	}
+
+
+	@ApiOperation("获取APP客服活码")
+	@GetMapping("/getAppContactWay")
+	public R getAppContactWay()
+	{
+		Long userId = getUserId();
+
+		String appContactWayImgCode = qwAppContactWayService.getAppContactWayImgCode(userId);
+		return R.ok().put("data",appContactWayImgCode);
+	}
+
+	@GetMapping("/getRealLinkDomainName")
+	public R getRealLinkDomainName( )
+	{
+		String json = configService.selectConfigByKey("course.config");
+		CourseConfig config = JSON.parseObject(json, CourseConfig.class);
+		if (config!=null&& com.fs.common.utils.StringUtils.isNotEmpty(config.getRealLinkDomainName())){
+			return R.ok().put("data",config.getRealLinkDomainName());
+		}
+		return R.error("获取域名失败,请检查后台配置!");
+	}
+
+
+
+}

+ 44 - 0
fs-user-course/src/main/java/com/fs/course/controller/IndexController.java

@@ -0,0 +1,44 @@
+package com.fs.course.controller;
+
+
+import cn.hutool.json.JSONUtil;
+import com.fs.common.core.domain.R;
+import com.fs.his.domain.*;
+import com.fs.his.param.*;
+import com.fs.his.service.*;
+import com.fs.his.vo.*;
+import com.fs.store.config.ConceptConfig;
+import com.fs.system.service.ISysConfigService;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+
+@Api("首页接口")
+@RestController
+@RequestMapping(value="/app/index")
+public class IndexController extends AppBaseController {
+	@Autowired
+	private ISysConfigService configService;
+
+	@ApiOperation("企业理念")
+	@GetMapping("/getConcept")
+	@springfox.documentation.annotations.Cacheable("getConcept")
+	public R getConcept(HttpServletRequest request){
+		String json=configService.selectConfigByKey("store.concept");
+		ConceptConfig config = JSONUtil.toBean(json, ConceptConfig.class);
+		return R.ok().put("data",config);
+	}
+
+
+}

+ 3 - 1
fs-user-course/src/main/java/com/fs/course/controller/WxCompanyUserController.java

@@ -47,6 +47,8 @@ import java.util.List;
 import java.util.Map;
 import com.fs.his.domain.FsUserWx;
 
+import static com.fs.his.utils.PhoneUtil.encryptPhone;
+
 @Api("微信小程序相关接口")
 @RestController
 @RequestMapping(value = "/app/wx/miniapp")
@@ -143,7 +145,7 @@ public class WxCompanyUserController extends AppBaseController {
     private FsUser getUserByAuthType(LoginMaWxParam param, WxMaService wxService, WxMaJscode2SessionResult session, WxMaPhoneNumberInfo phoneNoInfo) throws WxErrorException {
         FsUser user = null;
         if (param.getAuthType() == 1) {
-            user = userService.selectFsUserByPhone(phoneNoInfo.getPhoneNumber());
+            user = userService.selectFsUserByPhone(encryptPhone(phoneNoInfo.getPhoneNumber()));
         } else {
             // unionid判定唯一
             if (StringUtils.isNotEmpty(session.getUnionid())) {

+ 14 - 0
fs-user-course/src/main/java/com/fs/course/param/SignParam.java

@@ -0,0 +1,14 @@
+package com.fs.course.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+
+@Data
+public class SignParam {
+    @NotBlank(message = "请填写USERID")
+    @ApiModelProperty(value = "userId")
+    private String userId;
+}

+ 85 - 0
fs-user-course/src/main/java/com/fs/course/utils/CityTreeUtil.java

@@ -0,0 +1,85 @@
+package com.fs.course.utils;
+import com.fs.course.vo.CityVO;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @ClassName 树形工具类
+ **/
+public class CityTreeUtil {
+    /**
+     * 获得指定节点下所有归档
+     *
+     * @param list
+     * @param parentId
+     * @return
+     */
+    public static List<CityVO> list2TreeConverter(List<CityVO> list, String parentId) {
+        List<CityVO> returnList = new ArrayList<>();
+
+        for (CityVO res : list) {
+            //判断对象是否为根节点
+
+            if (res.getPid().equals(parentId)) {
+                //该节点为根节点,开始递归
+
+                //通过递归为节点设置childList
+                recursionFn(list, res);
+
+                returnList.add(res);
+            }
+        }
+
+        return returnList;
+    }
+
+    /**
+     * 递归列表
+     * 通过递归,给指定t节点设置childList
+     *
+     * @param list
+     * @param t
+     */
+    public static void recursionFn(List<CityVO> list, CityVO t) {
+        //只能获取当前t节点的子节点集,并不是所有子节点集
+        List<CityVO> childsList = getChildList(list, t);
+
+        //设置他的子集对象集
+        t.setC(childsList);
+
+        //迭代子集对象集
+
+        //遍历完,则退出递归
+        for (CityVO nextChild : childsList) {
+
+            //判断子集对象是否还有子节点
+            if (!CollectionUtils.isEmpty(childsList)) {
+                //有下一个子节点,继续递归
+                recursionFn(list, nextChild);
+            }
+        }
+    }
+
+    /**
+     * 获得指定节点下的所有子节点
+     *
+     * @param list
+     * @param t
+     * @return
+     */
+    public static List<CityVO> getChildList(List<CityVO> list, CityVO t) {
+        List<CityVO> childsList = new ArrayList<>();
+        //遍历集合元素,如果元素的Parentid==指定元素的id,则说明是该元素的子节点
+        for (CityVO t1 : list) {
+            if (t1.getPid().equals(t.getV())) {
+                childsList.add(t1);
+            }
+        }
+
+        return childsList;
+    }
+
+
+}