瀏覽代碼

Merge remote-tracking branch 'origin/master'

yfh 6 天之前
父節點
當前提交
f961598cb7
共有 37 個文件被更改,包括 492 次插入32 次删除
  1. 38 0
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreHealthOrderScrmController.java
  2. 35 0
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderScrmController.java
  3. 3 0
      fs-admin/src/main/java/com/fs/live/controller/LiveOrderController.java
  4. 2 2
      fs-admin/src/main/java/com/fs/qw/controller/IpadAllocationRecordsController.java
  5. 5 0
      fs-company-app/src/main/java/com/fs/app/param/FsUserLoginByMpParam.java
  6. 8 0
      fs-company/src/main/java/com/fs/company/controller/store/FsPackageOrderController.java
  7. 5 0
      fs-service/src/main/java/com/fs/course/domain/FsCoursePlaySourceConfig.java
  8. 3 0
      fs-service/src/main/java/com/fs/course/param/FsCoursePlaySourceConfigCreateParam.java
  9. 3 0
      fs-service/src/main/java/com/fs/course/param/FsCoursePlaySourceConfigEditParam.java
  10. 3 0
      fs-service/src/main/java/com/fs/course/vo/FsCoursePlaySourceConfigVO.java
  11. 9 4
      fs-service/src/main/java/com/fs/erp/service/impl/DfOrderServiceImpl.java
  12. 5 0
      fs-service/src/main/java/com/fs/his/domain/FsUser.java
  13. 2 0
      fs-service/src/main/java/com/fs/his/service/IFsPackageOrderService.java
  14. 19 0
      fs-service/src/main/java/com/fs/his/service/impl/FsPackageOrderServiceImpl.java
  15. 13 0
      fs-service/src/main/java/com/fs/hisStore/domain/FsUserScrm.java
  16. 2 1
      fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreOrderItemScrmMapper.java
  17. 4 3
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java
  18. 15 0
      fs-service/src/main/java/com/fs/hisStore/vo/FsStoreOrderExportVO.java
  19. 10 0
      fs-service/src/main/java/com/fs/hisStore/vo/FsStoreOrderItemExportVO.java
  20. 13 0
      fs-service/src/main/java/com/fs/hisStore/vo/FsStoreOrderVO.java
  21. 2 0
      fs-service/src/main/java/com/fs/live/service/impl/LiveOrderServiceImpl.java
  22. 3 0
      fs-service/src/main/java/com/fs/live/service/impl/LiveServiceImpl.java
  23. 11 3
      fs-service/src/main/java/com/fs/live/vo/LiveOrderVoZm.java
  24. 2 0
      fs-service/src/main/resources/application-config-druid-jnmy.yml
  25. 1 0
      fs-service/src/main/resources/application-config-druid-knt.yml
  26. 1 0
      fs-service/src/main/resources/application-config-druid-knt2.yml
  27. 73 0
      fs-service/src/main/resources/application-druid-jnmy-test.yml
  28. 0 3
      fs-service/src/main/resources/application-druid-jnmy.yml
  29. 3 6
      fs-service/src/main/resources/mapper/his/FsUserInformationCollectionMapper.xml
  30. 5 1
      fs-service/src/main/resources/mapper/his/FsUserMapper.xml
  31. 7 5
      fs-service/src/main/resources/mapper/hisStore/FsStoreOrderScrmMapper.xml
  32. 5 1
      fs-service/src/main/resources/mapper/hisStore/FsUserScrmMapper.xml
  33. 9 1
      fs-service/src/main/resources/mapper/live/LiveOrderMapper.xml
  34. 41 0
      fs-user-app/src/main/java/com/fs/app/controller/AppLoginController.java
  35. 46 2
      fs-user-app/src/main/java/com/fs/app/controller/WxH5MpController.java
  36. 44 0
      fs-user-app/src/main/java/com/fs/app/controller/WxUserController.java
  37. 42 0
      fs-user-app/src/main/java/com/fs/app/controller/store/WxUserScrmController.java

+ 38 - 0
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreHealthOrderScrmController.java

@@ -7,14 +7,17 @@ import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.domain.R;
+import com.fs.common.core.domain.model.LoginUser;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.CloudHostUtils;
+import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.company.service.ICompanyMoneyLogsService;
 import com.fs.course.dto.FsOrderDeliveryNoteDTO;
 import com.fs.erp.service.IErpOrderService;
+import com.fs.framework.web.service.TokenService;
 import com.fs.his.domain.FsStoreOrderDf;
 import com.fs.his.service.IFsStoreOrderDfService;
 import com.fs.his.service.IFsUserService;
@@ -48,6 +51,8 @@ public class FsStoreHealthOrderScrmController extends BaseController {
 
     @Autowired
     private IFsStoreOrderStatusScrmService orderStatusService;
+    @Autowired
+    private TokenService tokenService;
 
     @Autowired
     IErpOrderService erpOrderService;
@@ -93,6 +98,7 @@ public class FsStoreHealthOrderScrmController extends BaseController {
             dataTable.setMsg("knt");
         }
         if (list != null) {
+            LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
             for (FsStoreOrderVO vo : list) {
                 if(vo.getPhone()!=null){
                     vo.setPhone(vo.getPhone().replaceAll("(\\d{3})\\d*(\\d{4})", "$1****$2"));
@@ -105,6 +111,17 @@ public class FsStoreHealthOrderScrmController extends BaseController {
                         vo.setErpAccount(df.getLoginAccount());
                     }
                 }
+                //
+                if (loginUser.getPermissions().contains("his:storeAfterSales:finance") || loginUser.getPermissions().contains("*:*:*")) {
+                    vo.setFPrice(vo.getCost().multiply(BigDecimal.valueOf(vo.getTotalNum())));
+                } else {
+                    vo.setPayPostage(BigDecimal.ZERO);
+                    vo.setCost(BigDecimal.ZERO);
+                    vo.setFPrice(BigDecimal.ZERO);
+                    vo.setPayDelivery(BigDecimal.ZERO);
+                    vo.setBarCode("");
+                    vo.setCateName("");
+                }
 
             }
         }
@@ -269,6 +286,7 @@ public class FsStoreHealthOrderScrmController extends BaseController {
         List<FsStoreOrderItemExportVO> list = orderItemService.selectFsStoreOrderItemListExportVO(param);
         //对手机号脱敏
         if (list != null) {
+            LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
             for (FsStoreOrderItemExportVO vo : list) {
                 if (vo.getUserPhone() != null) {
                     String phone = vo.getUserPhone().replaceAll("(\\d{3})\\d*(\\d{1})", "$1****$2");
@@ -281,6 +299,16 @@ public class FsStoreHealthOrderScrmController extends BaseController {
                     } catch (Exception e) {
                     }
                 }
+                //
+                if (loginUser.getPermissions().contains("his:storeAfterSales:finance") || loginUser.getPermissions().contains("*:*:*")) {
+                    vo.setFPrice(vo.getCost().multiply(BigDecimal.valueOf(vo.getTotalNum())));
+                } else {
+                    vo.setPayPostage(BigDecimal.ZERO);
+                    vo.setCost(BigDecimal.ZERO);
+                    vo.setFPrice(BigDecimal.ZERO);
+                    vo.setBarCode("");
+                    vo.setCateName("");
+                }
             }
         }
         ExcelUtil<FsStoreOrderItemExportVO> util = new ExcelUtil<FsStoreOrderItemExportVO>(FsStoreOrderItemExportVO.class);
@@ -314,6 +342,7 @@ public class FsStoreHealthOrderScrmController extends BaseController {
         List<FsStoreOrderItemExportVO> list = orderItemService.selectFsStoreOrderItemListExportVO(param);
         //对手机号脱敏
         if (list != null) {
+            LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
             for (FsStoreOrderItemExportVO vo : list) {
                 if (!StringUtils.isEmpty(vo.getJsonInfo())) {
                     try {
@@ -322,6 +351,15 @@ public class FsStoreHealthOrderScrmController extends BaseController {
                     } catch (Exception e) {
                     }
                 }
+                if (loginUser.getPermissions().contains("his:storeAfterSales:finance") || loginUser.getPermissions().contains("*:*:*")) {
+                    vo.setFPrice(vo.getCost().multiply(BigDecimal.valueOf(vo.getTotalNum())));
+                } else {
+                    vo.setPayPostage(BigDecimal.ZERO);
+                    vo.setCost(BigDecimal.ZERO);
+                    vo.setFPrice(BigDecimal.ZERO);
+                    vo.setBarCode("");
+                    vo.setCateName("");
+                }
             }
         }
         ExcelUtil<FsStoreOrderItemExportVO> util = new ExcelUtil<FsStoreOrderItemExportVO>(FsStoreOrderItemExportVO.class);

+ 35 - 0
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderScrmController.java

@@ -194,6 +194,7 @@ public class FsStoreOrderScrmController extends BaseController {
             dataTable.setMsg("knt");
         }
         if (list != null) {
+            LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
             for (FsStoreOrderVO vo : list) {
                 if(vo.getPhone()!=null){
                     vo.setPhone(vo.getPhone().replaceAll("(\\d{3})\\d*(\\d{4})", "$1****$2"));
@@ -206,6 +207,17 @@ public class FsStoreOrderScrmController extends BaseController {
                         vo.setErpAccount(df.getLoginAccount());
                     }
                 }
+                //
+                if (loginUser.getPermissions().contains("his:storeAfterSales:finance") || loginUser.getPermissions().contains("*:*:*")) {
+                    vo.setFPrice(vo.getCost().multiply(BigDecimal.valueOf(vo.getTotalNum())));
+                } else {
+                    vo.setPayPostage(BigDecimal.ZERO);
+                    vo.setCost(BigDecimal.ZERO);
+                    vo.setFPrice(BigDecimal.ZERO);
+                    vo.setPayDelivery(BigDecimal.ZERO);
+                    vo.setBarCode("");
+                    vo.setCateName("");
+                }
             }
         }
         FsStoreOrderListAndStatisticsVo vo = new FsStoreOrderListAndStatisticsVo();
@@ -435,6 +447,8 @@ public class FsStoreOrderScrmController extends BaseController {
         List<FsStoreOrderItemExportVO> list = orderItemService.selectFsStoreOrderItemListExportVO(param);
         //对手机号脱敏
         if (list != null) {
+            LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+
             for (FsStoreOrderItemExportVO vo : list) {
                 if (vo.getUserPhone() != null) {
                     String phone = vo.getUserPhone().replaceAll("(\\d{3})\\d*(\\d{1})", "$1****$2");
@@ -450,6 +464,16 @@ public class FsStoreOrderScrmController extends BaseController {
                     } catch (Exception e) {
                     }
                 }
+                //
+                if (loginUser.getPermissions().contains("his:storeAfterSales:finance") || loginUser.getPermissions().contains("*:*:*")) {
+                    vo.setFPrice(vo.getCost().multiply(BigDecimal.valueOf(vo.getTotalNum())));
+                } else {
+                    vo.setPayPostage(BigDecimal.ZERO);
+                    vo.setCost(BigDecimal.ZERO);
+                    vo.setFPrice(BigDecimal.ZERO);
+                    vo.setBarCode("");
+                    vo.setCateName("");
+                }
             }
         }
         ExcelUtil<FsStoreOrderItemExportVO> util = new ExcelUtil<FsStoreOrderItemExportVO>(FsStoreOrderItemExportVO.class);
@@ -486,6 +510,7 @@ public class FsStoreOrderScrmController extends BaseController {
         List<FsStoreOrderItemExportVO> list = orderItemService.selectFsStoreOrderItemListExportVO(param);
         //对手机号脱敏
         if (list != null) {
+            LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
             for (FsStoreOrderItemExportVO vo : list) {
                 if (!StringUtils.isEmpty(vo.getJsonInfo())) {
                     try {
@@ -494,6 +519,16 @@ public class FsStoreOrderScrmController extends BaseController {
                     } catch (Exception e) {
                     }
                 }
+                //
+                if (loginUser.getPermissions().contains("his:storeAfterSales:finance") || loginUser.getPermissions().contains("*:*:*")) {
+                    vo.setFPrice(vo.getCost().multiply(BigDecimal.valueOf(vo.getTotalNum())));
+                } else {
+                    vo.setPayPostage(BigDecimal.ZERO);
+                    vo.setCost(BigDecimal.ZERO);
+                    vo.setFPrice(BigDecimal.ZERO);
+                    vo.setBarCode("");
+                    vo.setCateName("");
+                }
             }
         }
         ExcelUtil<FsStoreOrderItemExportVO> util = new ExcelUtil<FsStoreOrderItemExportVO>(FsStoreOrderItemExportVO.class);

+ 3 - 0
fs-admin/src/main/java/com/fs/live/controller/LiveOrderController.java

@@ -178,6 +178,9 @@ public class LiveOrderController extends BaseController
             } else {
                 vo.setCostPrice(BigDecimal.ZERO);
                 vo.setFPrice(BigDecimal.ZERO);
+                vo.setPayDelivery(BigDecimal.ZERO);
+                vo.setBarCode("");
+                vo.setCateName("");
             }
             vo.setCost(vo.getCostPrice());
 

+ 2 - 2
fs-admin/src/main/java/com/fs/qw/controller/IpadAllocationRecordsController.java

@@ -52,7 +52,7 @@ public class IpadAllocationRecordsController extends BaseController {
 
     @Autowired
     private IpadAllocationRecordsMapper ipadAllocationRecordsMapper;
-    @Value("${ipad.url}")
+    @Value("${ipad.watchUrl:https://manwatch.ylrzcloud.com/prod-api}")
     private String ipadServerUrl;
 
     /**
@@ -128,7 +128,7 @@ public class IpadAllocationRecordsController extends BaseController {
         return AjaxResult.success(detailsList);
     }
 
-    @Value("${ipad.companyId:13}")
+    @Value("${ipad.fsCompanyId:13}")
     private Long companyId;
     //发起申请ipad服务器
     @GetMapping("/apply")

+ 5 - 0
fs-company-app/src/main/java/com/fs/app/param/FsUserLoginByMpParam.java

@@ -9,4 +9,9 @@ import java.io.Serializable;
 public class FsUserLoginByMpParam implements Serializable {
     @NotBlank(message = "code参数缺失")
     private String code;
+    
+    /**
+     * 小程序appId
+     */
+    private String appId;
 }

+ 8 - 0
fs-company/src/main/java/com/fs/company/controller/store/FsPackageOrderController.java

@@ -20,6 +20,7 @@ import com.fs.his.service.IFsPackageOrderService;
 import com.fs.his.utils.PhoneUtil;
 import com.fs.his.vo.FsPackageOrderListVO;
 import com.fs.his.vo.FsPackageOrderVO;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -260,4 +261,11 @@ public class FsPackageOrderController extends BaseController
         return fsPackageOrderService.getWxaCodePackageOrderUnLimit(orderId);
 
     }
+
+    @ApiOperation("修改或者添加患者首诊图片")
+    @PostMapping("/editPatientImages")
+    public R editPatientImages(@RequestParam("orderId")Long orderId,
+                               @RequestParam("imagesList")String imagesList){
+        return fsPackageOrderService.editPatientImages(orderId,imagesList);
+    }
 }

+ 5 - 0
fs-service/src/main/java/com/fs/course/domain/FsCoursePlaySourceConfig.java

@@ -99,4 +99,9 @@ public class FsCoursePlaySourceConfig {
      * 是否是互医/商城小程序
      */
     private Integer isMall;
+
+    /**
+     * 小程序状态:0正常,1半封禁,2封禁
+     */
+    private Integer status;
 }

+ 3 - 0
fs-service/src/main/java/com/fs/course/param/FsCoursePlaySourceConfigCreateParam.java

@@ -54,4 +54,7 @@ public class FsCoursePlaySourceConfigCreateParam {
     @ApiModelProperty("是否是互医/商城小程序")
     private Integer isMall;
     private Long createDeptId;
+
+    @ApiModelProperty("小程序状态:0正常,1半封禁,2封禁")
+    private Integer status;
 }

+ 3 - 0
fs-service/src/main/java/com/fs/course/param/FsCoursePlaySourceConfigEditParam.java

@@ -52,4 +52,7 @@ public class FsCoursePlaySourceConfigEditParam {
     @ApiModelProperty("是否是互医/商城小程序")
     private Integer isMall;
     private Long createDeptId;
+
+    @ApiModelProperty("小程序状态:0正常,1半封禁,2封禁")
+    private Integer status;
 }

+ 3 - 0
fs-service/src/main/java/com/fs/course/vo/FsCoursePlaySourceConfigVO.java

@@ -61,4 +61,7 @@ public class FsCoursePlaySourceConfigVO {
      */
     private Integer isMall;
     private Long createDeptId;
+
+    @ApiModelProperty("小程序状态:0正常,1半封禁,2封禁")
+    private Integer status;
 }

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

@@ -659,7 +659,7 @@ public class DfOrderServiceImpl implements IErpOrderService {
                     case 9:
                         //已签收
                         deliveryStatus = 3;
-                        stateEx = "301"; //退货签收
+                        stateEx = "301";
                         SysConfig sysConfig = sysConfigMapper.selectConfigByConfigKey("his.store");
                         Map<String, Object> config = (Map<String, Object>) JSON.parse(sysConfig.getConfigValue());
                         Object isUpdateOrder = config.get("isUpdateOrder");
@@ -767,7 +767,7 @@ public class DfOrderServiceImpl implements IErpOrderService {
                                             sBuilder.append("\uD83C\uDF39\uD83C\uDF39\uD83C\uDF39");
                                             break;
                                         case 3:
-                                            if ("202".equals(stateEx)) {
+                                            if ("202".equals(stateEx) || "301".equals(stateEx)) {
                                                 //211
                                                 //你好,这边查询到您购买的XXX(购买套餐)在XXX(时间)已经送到了,送货员电话为XXX(送货员信息)
                                                 ErpDeliverysRequest erpDeliverysRequest = new ErpDeliverysRequest();
@@ -779,8 +779,13 @@ public class DfOrderServiceImpl implements IErpOrderService {
                                                     List<ErpDeliverys> deliverys = express.getDeliverys();
                                                     ErpDeliverys tracesDTO = deliverys.get(deliverys.size() - 1);
                                                     String remark = tracesDTO.getRemark();
-                                                    if ("派送至".equals(remark)) {
-                                                        sBuilder.append(" 在").append(tracesDTO.getAcceptTime()).append("已经送到了\n");
+                                                    if (remark.contains("派送至本人") || remark.contains("签收")) {
+                                                        sBuilder.append(" 在").append(tracesDTO.getAcceptTime()).append("已经签收了\n");
+                                                        sBuilder.append(" 物流单号为:").append(order.getDeliverySn()).append("\n");
+                                                        sBuilder.append("物流信息:").append(remark).append("\n");
+                                                    }
+                                                    if (remark.contains("正在派送")) {
+                                                        sBuilder.append("正在派送中\n");
                                                         sBuilder.append(" 物流单号为:").append(order.getDeliverySn()).append("\n");
                                                         sBuilder.append("物流信息:").append(remark).append("\n");
                                                     }

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

@@ -174,6 +174,11 @@ public class FsUser extends BaseEntity
      * **/
     private Long qwUserId;
 
+    /**
+     * 小程序appId,多个用逗号分隔
+     */
+    private String appId;
+
 
     /** 推广上级用户ID */
     private Long spreadUserId;

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

@@ -144,4 +144,6 @@ public interface IFsPackageOrderService
     R getPackageOrder(String createOrderKey);
 
     List<FsPackageOrder> selectOutTimeOrderList(Integer unPayTime);
+
+    R editPatientImages(Long orderId, String imagesList);
 }

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

@@ -16,6 +16,7 @@ import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.fs.common.constant.FsConstants;
@@ -1851,4 +1852,22 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
     public List<FsPackageOrder> selectOutTimeOrderList(Integer unPayTime) {
         return fsPackageOrderMapper.selectOutTimeOrderList(unPayTime);
     }
+
+    @Override
+    public R editPatientImages(Long orderId, String imagesList) {
+        FsPackageOrder fsPackageOrder = fsPackageOrderMapper.selectFsPackageOrderByOrderId(orderId);
+        if(fsPackageOrder==null){
+            return R.error("订单不存在");
+        }
+        String patientJson = fsPackageOrder.getPatientJson();
+        JSONObject jsonObject = JSONObject.parseObject(patientJson);
+        //后台编辑直接覆盖之前的图片
+        jsonObject.put("firstVisitImages",imagesList);
+        fsPackageOrder.setPatientJson(jsonObject.toJSONString());
+        int i = fsPackageOrderMapper.updateFsPackageOrder(fsPackageOrder);
+        if(i<=0){
+            return R.error("更新失败");
+        }
+        return R.ok();
+    }
 }

+ 13 - 0
fs-service/src/main/java/com/fs/hisStore/domain/FsUserScrm.java

@@ -178,6 +178,19 @@ public class FsUserScrm extends BaseEntity
      * **/
     private Long qwUserId;
 
+    /**
+     * 小程序appId,多个用逗号分隔
+     */
+    private String appId;
+
+    public String getAppId() {
+        return appId;
+    }
+
+    public void setAppId(String appId) {
+        this.appId = appId;
+    }
+
     public void setNickName(String nickname)
     {
         if(StringUtils.isNotEmpty(nickname)){

+ 2 - 1
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreOrderItemScrmMapper.java

@@ -75,9 +75,10 @@ public interface FsStoreOrderItemScrmMapper
     List<FsStoreOrderItemVO> selectFsStoreOrderItemListAndProductByOrderId(Long id);
 
     @Select({"<script> " +
-            "select i.*,o.user_id,o.status, o.real_name,o.user_phone,o.user_address,o.create_time,o.pay_time,o.delivery_sn,o.delivery_name,o.delivery_id, c.company_name ,cu.nick_name as company_user_nick_name ,cu.phonenumber as company_usere_phonenumber,o.upload_time ,CASE WHEN o.certificates IS NULL OR o.certificates = '' THEN 0 ELSE 1 END AS is_upload   " +
+            "select i.*,o.user_id,psps.cost,o.pay_postage,o.total_num,o.status,fspcs.cate_name, o.real_name,o.user_phone,o.user_address,o.create_time,o.pay_time,o.delivery_sn,o.delivery_name,o.delivery_id, c.company_name ,cu.nick_name as company_user_nick_name ,cu.phonenumber as company_usere_phonenumber,o.upload_time ,CASE WHEN o.certificates IS NULL OR o.certificates = '' THEN 0 ELSE 1 END AS is_upload   " +
             " ,p.title as package_name,cts.name as scheduleName from fs_store_order_item_scrm i left join fs_store_order_scrm o on o.id=i.order_id left join fs_user u on o.user_id=u.user_id  " +
             " left join fs_store_product_package_scrm p on o.package_id=p.package_id left join company c on c.company_id=o.company_id left join company_user cu on cu.user_id=o.company_user_id left join company_tcm_schedule cts on cts.id = o.schedule_id " +
+            " left join fs_store_product_scrm psps on i.product_id=psps.product_id left join fs_store_product_category_scrm fspcs on fspcs.cate_id=psps.cate_id " +
             "where 1=1 " +
             "<if test = 'maps.orderCode != null and  maps.orderCode !=\"\"    '> " +
             "and o.order_code like CONCAT('%',#{maps.orderCode},'%') " +

+ 4 - 3
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -2966,9 +2966,8 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         BigDecimal payIntegral = this.getOrderSumPrice(cartInfo, "payIntegral");//获取订单需要的积分
 
         //如果设置满包邮0 表示全局包邮,如果设置大于0表示满这价格包邮,否则走运费模板算法
-        if (storeFreePostage.compareTo(BigDecimal.ZERO) != 0 && totalPrice.compareTo(storeFreePostage) <= 0) {
-            storePostage = this.handlePostage(cartInfo, userAddress);
-        }
+        storePostage = this.handlePostage(cartInfo, userAddress);
+
 
         FsStoreOrderPriceDTO priceGroupDTO = new FsStoreOrderPriceDTO();
         priceGroupDTO.setStorePostage(storePostage);
@@ -4209,6 +4208,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                 user.setStatus(1);
                 user.setMaOpenId(session.getOpenid());
                 user.setUnionId(session.getUnionid());
+                user.setAppId(properties.getConfigs().get(0).getAppid());
                 user.setIsWeixinAuth(0);
                 user.setLastIp(ip);
                 user.setCreateTime(new Date());
@@ -4327,6 +4327,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                 user.setStatus(1);
                 user.setMaOpenId(session.getOpenid());
                 user.setUnionId(session.getUnionid());
+                user.setAppId(properties.getConfigs().get(0).getAppid());
                 user.setIsWeixinAuth(0);
                 user.setLastIp(ip);
                 user.setCreateTime(new Date());

+ 15 - 0
fs-service/src/main/java/com/fs/hisStore/vo/FsStoreOrderExportVO.java

@@ -126,6 +126,21 @@ public class FsStoreOrderExportVO implements Serializable
     @Excel(name = "订单状态", dictType = "store_order_status")
     private String status;
 
+    @Excel(name = "成本价",cellType= Excel.ColumnType.NUMERIC)
+    private BigDecimal cost;
+
+    /** 结算价 */
+    @Excel(name = "结算价",cellType= Excel.ColumnType.NUMERIC)
+    private BigDecimal FPrice;
+
+    /** 商品编码 */
+    @Excel(name = "商品编码")
+    private String barCode;
+
+    /** 商品分类 */
+    @Excel(name = "商品分类")
+    private String cateName;
+
 //    /** 0 未退款 1 申请中 2 已退款 */
 ////    @Excel(name = "0 未退款 1 申请中 2 已退款")
 //    private Integer refundStatus;

+ 10 - 0
fs-service/src/main/java/com/fs/hisStore/vo/FsStoreOrderItemExportVO.java

@@ -41,6 +41,16 @@ public class FsStoreOrderItemExportVO implements Serializable
     @Excel(name = "产品价格")
     private BigDecimal price;
 
+    @Excel(name = "成本价")
+    private BigDecimal cost;
+    @Excel(name = "结算价")
+    private BigDecimal FPrice;
+    @Excel(name = "额外运费")
+    private BigDecimal payPostage;
+    private Integer totalNum;
+    @Excel(name = "商品分类")
+    private String cateName;
+
 
     private String jsonInfo;
 

+ 13 - 0
fs-service/src/main/java/com/fs/hisStore/vo/FsStoreOrderVO.java

@@ -194,8 +194,21 @@ public class FsStoreOrderVO implements Serializable
     private Integer isDel;
 
     /** 成本价 */
+    @Excel(name = "成本价")
     private BigDecimal cost;
 
+    /** 结算价 */
+    @Excel(name = "结算价")
+    private BigDecimal FPrice;
+
+    /** 商品编码 */
+    @Excel(name = "商品编码")
+    private String barCode;
+
+    /** 商品分类 */
+    @Excel(name = "商品分类")
+    private String cateName;
+
     /** 核销码 */
     private String verifyCode;
 

+ 2 - 0
fs-service/src/main/java/com/fs/live/service/impl/LiveOrderServiceImpl.java

@@ -3466,6 +3466,8 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
 
         }
 
+        liveOrder.setPayDelivery(storePostage);
+
         return storePostage;
     }
 

+ 3 - 0
fs-service/src/main/java/com/fs/live/service/impl/LiveServiceImpl.java

@@ -245,6 +245,9 @@ public class LiveServiceImpl implements ILiveService
         notifyTask.setTemplateId((String) param.get("templateId"));
         FsUser fsUser = fsUserMapper.selectFsUserById(Long.valueOf((Integer) param.get("userId")));
         String maOpenId = fsUser.getMaOpenId();
+        if (StringUtils.isEmpty(maOpenId)) {
+            maOpenId = (String) param.get("maOpenId");
+        }
         notifyTask.setTouser(maOpenId);
         notifyTask.setPage(String.valueOf(1));
 

+ 11 - 3
fs-service/src/main/java/com/fs/live/vo/LiveOrderVoZm.java

@@ -98,6 +98,7 @@ public class LiveOrderVoZm{
     @Excel(name = "所属店铺名称")
     private String storeName;
 
+
     @Excel(name = "商品ID")
     private Long productId;
 
@@ -123,6 +124,16 @@ public class LiveOrderVoZm{
     @Excel(name = "结算价格")
     private BigDecimal fPrice;
 
+    /** 支付运费 */
+    @Excel(name = "支付运费")
+    private BigDecimal payDelivery;
+
+    @Excel(name = "商品编码")
+    private String barCode;
+
+    @Excel(name = "商品分类")
+    private String cateName;
+
     /** 支付金额 */
     @Excel(name = "支付金额")
     private BigDecimal payMoney;
@@ -311,9 +322,6 @@ public class LiveOrderVoZm{
 //    @Excel(name = "扩展订单ID")
     private String extendOrderId;
 
-    /** 支付运费 */
-//    @Excel(name = "支付运费")
-    private BigDecimal payDelivery;
 
     /** 剩余金额 */
 //    @Excel(name = "剩余金额")

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

@@ -95,6 +95,8 @@ ipad:
   aiApi: http://49.232.181.28:3000/api
   voiceApi: http://139.186.176.122:8009
   commonApi: http://139.186.176.122:7771
+  watchUrl: https://manwatch.ylrzcloud.com/prod-api
+  fsCompanyId: 13
 wx_miniapp_temp:
   pay_order_temp_id: -SjnK9K6cNKASa6AD9Q_c0YT7J1lPTEpPIpqbMJF8F0
   inquiry_temp_id: hwFXVh0AWqeasBsZpa0-urb3CrPeYEwBiy3P6AMMGFQ

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

@@ -91,6 +91,7 @@ cloud_host:
 headerImg:
   imgUrl: https
 ipad:
+  url:
   ipadUrl: http://qwipad.jnmyunl.com
   aiApi: http://49.232.181.28:3000/api
   voiceApi: http://139.186.176.122:8009

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

@@ -91,6 +91,7 @@ cloud_host:
 headerImg:
   imgUrl: https
 ipad:
+  url:
   ipadUrl: http://qwipad.jnmyunl.com
   aiApi: http://49.232.181.28:3000/api
   voiceApi: http://139.186.176.122:8009

+ 73 - 0
fs-service/src/main/resources/application-druid-jnmy-test.yml

@@ -138,6 +138,79 @@ spring:
                     wall:
                         config:
                             multi-statement-allow: true
+    shardingsphere:
+        datasource:
+            names: ds0
+            ds0:
+                # 主库数据源
+                type: com.alibaba.druid.pool.DruidDataSource
+                driverClassName: com.mysql.cj.jdbc.Driver
+                url: jdbc:mysql://120.46.174.121:2345/fs_his_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                username: root
+                password: Ylrztek250218!3@.
+                # 初始连接数
+                initialSize: 5
+                # 最小连接池数量
+                minIdle: 10
+                # 最大连接池数量
+                maxActive: 20
+                # 配置获取连接等待超时的时间
+                maxWait: 60000
+                # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+                timeBetweenEvictionRunsMillis: 60000
+                # 配置一个连接在池中最小生存的时间,单位是毫秒
+                minEvictableIdleTimeMillis: 300000
+                # 配置一个连接在池中最大生存的时间,单位是毫秒
+                maxEvictableIdleTimeMillis: 900000
+                # 配置检测连接是否有效
+                validationQuery: SELECT 1 FROM DUAL
+                testWhileIdle: true
+                testOnBorrow: false
+                testOnReturn: false
+                webStatFilter:
+                    enabled: true
+                statViewServlet:
+                    enabled: true
+                    # 设置白名单,不填则允许所有访问
+                    allow:
+                    url-pattern: /druid/*
+                    # 控制台管理用户名和密码
+                    login-username: fs
+                    login-password: 123456
+                filter:
+                    stat:
+                        enabled: true
+                        # 慢SQL记录
+                        log-slow-sql: true
+                        slow-sql-millis: 1000
+                        merge-sql: true
+                    wall:
+                        config:
+                            multi-statement-allow: true
+        rules:
+            sharding:
+                tables:
+                    qw_msg:
+                        actual-data-nodes: ds0.qw_msg_$->{0..9}
+                        table-strategy:
+                            standard:
+                                sharding-column: session_id
+                                sharding-algorithm-name: msg-inline
+                    fs_user_operation_log:
+                        actual-data-nodes: ds0.fs_user_operation_log_$->{0..9}
+                        table-strategy:
+                            standard:
+                                sharding-column: user_id
+                                sharding-algorithm-name: oper-inline
+                sharding-algorithms:
+                    msg-inline:
+                        type: INLINE
+                        props:
+                            algorithm-expression: qw_msg_$->{session_id % 10}
+                    oper-inline:
+                        type: INLINE
+                        props:
+                            algorithm-expression: fs_user_operation_log_$->{user_id % 10}
 rocketmq:
     name-server: rmq-1243b25nj.rocketmq.gz.public.tencenttdmq.com:8080 # RocketMQ NameServer 地址
     producer:

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

@@ -160,8 +160,5 @@ im:
     type: OPENIM
 #是否为新商户,新商户不走mpOpenId
 isNewWxMerchant: true
-ipad:
-    url: https://manwatch.ylrzcloud.com/prod-api
-    companyId: 13
 
 

+ 3 - 6
fs-service/src/main/resources/mapper/his/FsUserInformationCollectionMapper.xml

@@ -171,12 +171,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="allergy != null">#{allergy},</if>
             <if test="remark != null">#{remark},</if>
             <if test="patientId != null">#{patientId},</if>
-            <if test="patientId != null">#{patientId},</if>
-            <if test="patientId != null">#{patientId},</if>
-            <if test="patientId != null">#{patientId},</if>
-            <if test="doctorType2Id != null">doctorType2Id,</if>
-            <if test="doctorType2Confirm != null">doctorType2Confirm,</if>
-            <if test="doctorType2Sign != null">doctorType2Sign,</if>
+            <if test="doctorType2Id != null">#{doctorType2Id},</if>
+            <if test="doctorType2Confirm != null">#{doctorType2Confirm},</if>
+            <if test="doctorType2Sign != null">#{doctorType2Sign},</if>
          </trim>
     </insert>
 

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

@@ -48,11 +48,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="courseMaOpenId"    column="course_ma_open_id"    />
         <result property="qwExtId"    column="qw_ext_id"    />
         <result property="qwUserId"    column="qw_user_id"    />
+        <result property="appId"    column="app_id"    />
         <result property="level" column="level"/>
     </resultMap>
 
     <sql id="selectFsUserVo">
-        select user_id,qw_ext_id,sex,is_buy,`level`,course_ma_open_id,is_push,is_add_qw,source,login_device,is_individuation_push,store_open_id,password,jpush_id, is_vip,vip_start_date,vip_end_date,vip_level,vip_status,nick_name,integral_status, avatar, phone, integral,sign_num, status, tui_user_id, tui_time, tui_user_count, ma_open_id, mp_open_id, union_id, is_del, user_code, remark, create_time, update_time, last_ip, balance,is_weixin_auth,parent_id,qw_user_id,company_id,company_user_id,is_promoter,now_money,brokerage_price,spread_user_id, spread_time,pay_count, spread_count,user_type from fs_user
+        select user_id,qw_ext_id,sex,is_buy,`level`,course_ma_open_id,is_push,is_add_qw,source,login_device,is_individuation_push,store_open_id,password,jpush_id, is_vip,vip_start_date,vip_end_date,vip_level,vip_status,nick_name,integral_status, avatar, phone, integral,sign_num, status, tui_user_id, tui_time, tui_user_count, ma_open_id, mp_open_id, union_id, is_del, user_code, remark, create_time, update_time, last_ip, balance,is_weixin_auth,parent_id,qw_user_id,app_id,company_id,company_user_id,is_promoter,now_money,brokerage_price,spread_user_id, spread_time,pay_count, spread_count,user_type from fs_user
     </sql>
 
     <select id="selectFsUserList" parameterType="FsUser" resultMap="FsUserResult">
@@ -583,6 +584,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="isPromoter != null">is_promoter,</if>
             <if test="payCount != null">pay_count,</if>
             <if test="spreadCount != null">spread_count,</if>
+            <if test="appId != null">app_id,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="nickName != null">#{nickName},</if>
@@ -632,6 +634,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="isPromoter != null">#{isPromoter},</if>
             <if test="payCount != null">#{payCount},</if>
             <if test="spreadCount != null">#{spreadCount},</if>
+            <if test="appId != null">#{appId},</if>
          </trim>
     </insert>
 
@@ -683,6 +686,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="companyId != null">company_id = #{companyId},</if>
             <if test="orderCount != null">order_count = #{orderCount},</if>
             <if test="companyUserId != null">company_user_id = #{companyUserId},</if>
+            <if test="appId != null">app_id = #{appId},</if>
         </trim>
         where user_id = #{userId}
     </update>

+ 7 - 5
fs-service/src/main/resources/mapper/hisStore/FsStoreOrderScrmMapper.xml

@@ -1572,9 +1572,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         ${maps.params.dataScope} GROUP BY sp.product_id
         ) AS t
     </select>
+<!--    商城订单查询接口-->
     <select id="selectFsStoreOrderListVO" resultType="com.fs.hisStore.vo.FsStoreOrderVO">
         select o.*,u.phone,u.register_code,u.register_date,u.source, c.company_name ,cu.nick_name as company_user_nick_name ,cu.phonenumber as company_usere_phonenumber
-        , csc.name miniProgramName
+        , csc.name miniProgramName,fsp.cost as cost, fspc.cate_name,spavs.bar_code
         from fs_store_order_scrm o
         left join fs_user u on o.user_id=u.user_id
         left join company c on c.company_id=o.company_id
@@ -1583,10 +1584,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             LEFT JOIN fs_store_order_df df on df.order_id=o.id
 
         </if>
-        <if test = "maps.productName != null and  maps.productName !=  '' ">
-            left join fs_store_order_item_scrm oi on o.id = oi.order_id
-            left join fs_store_product_scrm fsp on fsp.product_id = oi.product_id
-        </if>
+        left join fs_store_order_item_scrm oi on o.id = oi.order_id
+        left join fs_store_product_scrm fsp on fsp.product_id = oi.product_id
+        left join fs_store_product_category_scrm fspc on fspc.cate_id = fsp.cate_id
+        left join fs_store_product_attr_value_scrm spavs on fsp.product_id = spavs.product_id
+
         LEFT JOIN (
         SELECT
         sp.*,

+ 5 - 1
fs-service/src/main/resources/mapper/hisStore/FsUserScrmMapper.xml

@@ -71,10 +71,11 @@
         <result property="react"    column="react"    />
         <result property="orderCount"    column="order_count"    />
         <result property="bindCompanyUserId"    column="bind_company_user_id"    />
+        <result property="appId"    column="app_id"    />
     </resultMap>
 
     <sql id="selectFsUserVo">
-        select user_id, username, nick_name, avatar, phone, integral, status, `level`, spread_user_id, spread_time, user_type, is_promoter, pay_count, spread_count, addres, tui_user_id, tui_time, tui_user_count, ma_open_id, mp_open_id, union_id, is_del, user_code, remark, nickname, create_time, update_time, last_ip, now_money, brokerage_price, balance, sign_num, integral_status, is_buy, password, real_name, birthday, id_card, jpush_id, is_vip, vip_start_date, vip_end_date, vip_level, vip_status, sex, store_open_id, is_official_account_auth, is_push, is_individuation_push, is_weixin_auth, company_id, company_user_id, register_date, register_code, test, login_device, source, is_add_qw, qw_user_id, is_show, parent_id, course_ma_open_id, history_app, qw_ext_id, `rank`, react,order_count,bind_company_user_id from fs_user
+        select user_id, username, nick_name, avatar, phone, integral, status, `level`, spread_user_id, spread_time, user_type, is_promoter, pay_count, spread_count, addres, tui_user_id, tui_time, tui_user_count, ma_open_id, mp_open_id, union_id, is_del, user_code, remark, nickname, create_time, update_time, last_ip, now_money, brokerage_price, balance, sign_num, integral_status, is_buy, password, real_name, birthday, id_card, jpush_id, is_vip, vip_start_date, vip_end_date, vip_level, vip_status, sex, store_open_id, is_official_account_auth, is_push, is_individuation_push, is_weixin_auth, company_id, company_user_id, register_date, register_code, test, login_device, source, is_add_qw, qw_user_id, is_show, parent_id, course_ma_open_id, history_app, qw_ext_id, `rank`, react,order_count,bind_company_user_id,app_id from fs_user
     </sql>
 
     <select id="selectFsUserList" parameterType="FsUserScrm" resultMap="FsUserResult">
@@ -447,6 +448,7 @@
             <if test="rank != null">rank,</if>
             <if test="react != null">react,</if>
             <if test="orderCount != null">order_count,</if>
+            <if test="appId != null">app_id,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="username != null">#{username},</if>
@@ -513,6 +515,7 @@
             <if test="rank != null">#{rank},</if>
             <if test="react != null">#{react},</if>
             <if test="orderCount != null">#{orderCount},</if>
+            <if test="appId != null">#{appId},</if>
         </trim>
     </insert>
 
@@ -564,6 +567,7 @@
             <if test="isPromoter != null">is_promoter = #{isPromoter},</if>
             <if test="spreadUserId != null">spread_user_id = #{spreadUserId},</if>
             <if test="brokeragePrice != null">brokerage_price = #{brokeragePrice},</if>
+            <if test="appId != null">app_id = #{appId},</if>
         </trim>
         where user_id = #{userId}
     </update>

+ 9 - 1
fs-service/src/main/resources/mapper/live/LiveOrderMapper.xml

@@ -950,6 +950,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             o.pay_time,
             o.pay_type,
             o.pay_money,
+            o.pay_delivery,
             o.create_time,
             o.update_time,
             o.status,
@@ -997,7 +998,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
             <!-- 门店信息 -->
             s.store_name AS storeName,
-            s.store_id AS storeId
+            s.store_id AS storeId,
+
+            <!-- 门店信息 -->
+            spavs.bar_code,
+            spcs.cate_name
 
         FROM
             live_order o
@@ -1005,6 +1010,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             LEFT JOIN company_user cu ON o.company_user_id = cu.user_id
             LEFT JOIN fs_store_product_scrm p ON o.product_id = p.product_id
             LEFT JOIN fs_store_scrm s ON p.store_id = s.store_id
+            LEFT JOIN fs_store_product_attr_value_scrm spavs ON p.product_id = spavs.product_id
+            LEFT JOIN fs_store_product_category_scrm spcs ON p.cate_id = spcs.cate_id
+
         <where>
             o.is_del = 0
             <if test="orderId != null">

+ 41 - 0
fs-user-app/src/main/java/com/fs/app/controller/AppLoginController.java

@@ -256,6 +256,8 @@ public class AppLoginController extends AppBaseController{
                     user.setSex(sex);
                 }
                 user.setUnionId(unionid);
+                // 新用户 - 添加 appId
+                user.setAppId(openProperties.getAppId());
                 user.setCreateTime(new Date());
                 user.setStatus(1);
                 if (StringUtils.isNotEmpty(param.getJpushId())) {
@@ -266,6 +268,15 @@ public class AppLoginController extends AppBaseController{
                 map.put("unionid",unionid);
                 return R.ok(map);
             } else {
+                // 老用户 - 检查并添加appId(不重复添加)
+                String updatedAppId = addAppIdIfNotExists(user.getAppId(), openProperties.getAppId());
+                if (!updatedAppId.equals(user.getAppId())) {
+                    FsUser userMap = new FsUser();
+                    userMap.setUserId(user.getUserId());
+                    userMap.setAppId(updatedAppId);
+                    userService.updateFsUser(userMap);
+                }
+                
                 if (StringUtils.isNotEmpty(param.getJpushId())) {
                     updateExistingUserJpushId(user, param.getJpushId());
                 }
@@ -621,4 +632,34 @@ public class AppLoginController extends AppBaseController{
             return R.error("用户不存在!");
         }
     }
+
+    /**
+     * 添加appId到用户的appId列表中(如果不存在)
+     * @param currentAppIds 当前用户已有的appId列表(逗号分隔)
+     * @param newAppId 新的appId
+     * @return 更新后的appId列表
+     */
+    private String addAppIdIfNotExists(String currentAppIds, String newAppId) {
+        // 如果新appId为空,返回原值
+        if (StringUtils.isEmpty(newAppId)) {
+            return currentAppIds == null ? "" : currentAppIds;
+        }
+        
+        // 如果当前appId为空,直接返回新appId
+        if (StringUtils.isEmpty(currentAppIds)) {
+            return newAppId;
+        }
+        
+        // 检查是否已存在
+        String[] appIdArray = currentAppIds.split(",");
+        for (String appId : appIdArray) {
+            if (appId.trim().equals(newAppId.trim())) {
+                // 已存在,不需要添加
+                return currentAppIds;
+            }
+        }
+        
+        // 不存在,追加到末尾
+        return currentAppIds + "," + newAppId;
+    }
 }

+ 46 - 2
fs-user-app/src/main/java/com/fs/app/controller/WxH5MpController.java

@@ -166,7 +166,7 @@ public class WxH5MpController {
             }
 
             // 处理用户信息
-            FsUser user = processUserInfoByCourseLoginByMp(wxMpUser);
+            FsUser user = processUserInfoByCourseLoginByMp(wxMpUser, param);
 
             // 生成token并返回结果
             return generateLoginResult(user);
@@ -189,6 +189,11 @@ public class WxH5MpController {
             userUpdate.setUpdateTime(new DateTime());
             userUpdate.setNickName(wxMpUser.getNickname());
             userUpdate.setAvatar(wxMpUser.getHeadImgUrl());
+            // 老用户 - 检查并添加 appId(不重复添加)
+            String updatedAppId = addAppIdIfNotExists(user.getAppId(), param.getAppId());
+            if (!updatedAppId.equals(user.getAppId())) {
+                userUpdate.setAppId(updatedAppId);
+            }
             userService.updateFsUser(userUpdate);
             return userUpdate;
         } else {
@@ -203,13 +208,15 @@ public class WxH5MpController {
             newUser.setUnionId(wxMpUser.getUnionId());
             newUser.setCreateTime(new Date());
             newUser.setStatus(company != null && company.getFsUserIsDefaultBlack() == 1 ? 0 : 1);
+            // 新用户 - 添加 appId
+            newUser.setAppId(param.getAppId());
             userService.insertFsUser(newUser);
 
             return newUser;
         }
     }
 
-    private FsUser processUserInfoByCourseLoginByMp(WxOAuth2UserInfo wxMpUser) {
+    private FsUser processUserInfoByCourseLoginByMp(WxOAuth2UserInfo wxMpUser, FsUserLoginByCourseMpParam param) {
         FsUser user = userService.selectFsUserByUnionId(wxMpUser.getUnionId());
 
         if (user != null) {
@@ -221,6 +228,11 @@ public class WxH5MpController {
             userUpdate.setUpdateTime(new DateTime());
             userUpdate.setNickName(wxMpUser.getNickname());
             userUpdate.setAvatar(wxMpUser.getHeadImgUrl());
+            // 老用户 - 检查并添加 appId(不重复添加)
+            String updatedAppId = addAppIdIfNotExists(user.getAppId(), param.getAppId());
+            if (!updatedAppId.equals(user.getAppId())) {
+                userUpdate.setAppId(updatedAppId);
+            }
             userService.updateFsUser(userUpdate);
             return userUpdate;
         } else {
@@ -234,6 +246,8 @@ public class WxH5MpController {
 //            newUser.setCompanyUserId(companyUser.getUserId());
             newUser.setUnionId(wxMpUser.getUnionId());
             newUser.setCreateTime(new Date());
+            // 新用户 - 添加 appId
+            newUser.setAppId(param.getAppId());
             userService.insertFsUser(newUser);
             return newUser;
         }
@@ -254,6 +268,36 @@ public class WxH5MpController {
         }
     }
 
+    /**
+     * 添加appId到用户的appId列表中(如果不存在)
+     * @param currentAppIds 当前用户已有的appId列表(逗号分隔)
+     * @param newAppId 新的appId
+     * @return 更新后的appId列表
+     */
+    private String addAppIdIfNotExists(String currentAppIds, String newAppId) {
+        // 如果新appId为空,返回原值
+        if (StringUtils.isEmpty(newAppId)) {
+            return currentAppIds == null ? "" : currentAppIds;
+        }
+        
+        // 如果当前appId为空,直接返回新appId
+        if (StringUtils.isEmpty(currentAppIds)) {
+            return newAppId;
+        }
+        
+        // 检查是否已存在
+        String[] appIdArray = currentAppIds.split(",");
+        for (String appId : appIdArray) {
+            if (appId.trim().equals(newAppId.trim())) {
+                // 已存在,不需要添加
+                return currentAppIds;
+            }
+        }
+        
+        // 不存在,追加到末尾
+        return currentAppIds + "," + newAppId;
+    }
+
     private R generateLoginResult(FsUser user) {
         String token = jwtUtils.generateToken(user.getUserId());
         redisCache.setCacheObject("token:" + user.getUserId(), token, 604800, TimeUnit.SECONDS);

+ 44 - 0
fs-user-app/src/main/java/com/fs/app/controller/WxUserController.java

@@ -156,6 +156,8 @@ public class WxUserController extends AppBaseController{
                     user.setAvatar("https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20230725/a848605591384ec29d49773dd58d9345.jpg");
                     user.setStatus(1);
                     user.setMaOpenId(session.getOpenid());
+                    // 新用户 - 添加 appId
+                    user.setAppId(appId);
                     user.setCreateTime(new Date());
                     if(session.getUnionid()!=null){
                         user.setUnionId(session.getUnionid());
@@ -176,6 +178,11 @@ public class WxUserController extends AppBaseController{
                 userMap.setMaOpenId(session.getOpenid());
                 userMap.setPhone(phoneNoInfo.getPhoneNumber());
                 userMap.setUpdateTime(new DateTime());
+                // 老用户 - 检查并添加appId(不重复添加)
+                String updatedAppId = addAppIdIfNotExists(user.getAppId(), appId);
+                if (!updatedAppId.equals(user.getAppId())) {
+                    userMap.setAppId(updatedAppId);
+                }
                 userService.updateFsUser(userMap);
             }
             String token = jwtUtils.generateToken(user.getUserId());
@@ -268,6 +275,8 @@ public class WxUserController extends AppBaseController{
                     user.setAvatar("https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20230725/a848605591384ec29d49773dd58d9345.jpg");
                     user.setStatus(1);
                     user.setCourseMaOpenId(session.getOpenid());
+                    // 新用户 - 添加 appId
+                    user.setAppId(appid);
                     user.setCreateTime(new Date());
                     if(session.getUnionid()!=null){
                         user.setUnionId(session.getUnionid());
@@ -288,6 +297,11 @@ public class WxUserController extends AppBaseController{
                 userMap.setCourseMaOpenId(session.getOpenid());
                 userMap.setPhone(phoneNoInfo.getPhoneNumber());
                 userMap.setUpdateTime(new DateTime());
+                // 老用户 - 检查并添加appId(不重复添加)
+                String updatedAppId = addAppIdIfNotExists(user.getAppId(), appid);
+                if (!updatedAppId.equals(user.getAppId())) {
+                    userMap.setAppId(updatedAppId);
+                }
                 userService.updateFsUser(userMap);
             }
             String token = jwtUtils.generateToken(user.getUserId());
@@ -416,4 +430,34 @@ public class WxUserController extends AppBaseController{
 
     }
 
+    /**
+     * 添加appId到用户的appId列表中(如果不存在)
+     * @param currentAppIds 当前用户已有的appId列表(逗号分隔)
+     * @param newAppId 新的appId
+     * @return 更新后的appId列表
+     */
+    private String addAppIdIfNotExists(String currentAppIds, String newAppId) {
+        // 如果新appId为空,返回原值
+        if (StringUtils.isEmpty(newAppId)) {
+            return currentAppIds == null ? "" : currentAppIds;
+        }
+        
+        // 如果当前appId为空,直接返回新appId
+        if (StringUtils.isEmpty(currentAppIds)) {
+            return newAppId;
+        }
+        
+        // 检查是否已存在
+        String[] appIdArray = currentAppIds.split(",");
+        for (String appId : appIdArray) {
+            if (appId.trim().equals(newAppId.trim())) {
+                // 已存在,不需要添加
+                return currentAppIds;
+            }
+        }
+        
+        // 不存在,追加到末尾
+        return currentAppIds + "," + newAppId;
+    }
+
 }

+ 42 - 0
fs-user-app/src/main/java/com/fs/app/controller/store/WxUserScrmController.java

@@ -314,6 +314,11 @@ public class WxUserScrmController extends AppBaseController {
                     if(session.getUnionid()!=null){
                         userMap.setUnionId(session.getUnionid());
                     }
+                    // 检查并添加appId(不重复添加)
+                    String updatedAppId = addAppIdIfNotExists(checkPhone.getAppId(), param.getAppId());
+                    if (!updatedAppId.equals(checkPhone.getAppId())) {
+                        userMap.setAppId(updatedAppId);
+                    }
                     userService.updateFsUser(userMap);
                 }
                 else{
@@ -324,6 +329,8 @@ public class WxUserScrmController extends AppBaseController {
                     user.setAvatar("https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20230725/a848605591384ec29d49773dd58d9345.jpg");
                     user.setStatus(1);
                     user.setMaOpenId(session.getOpenid());
+                    // 新用户 - 添加 appId
+                    user.setAppId(param.getAppId());
                     user.setCreateTime(new Date());
                     if(session.getUnionid()!=null){
                         user.setUnionId(session.getUnionid());
@@ -344,6 +351,11 @@ public class WxUserScrmController extends AppBaseController {
                 userMap.setMaOpenId(session.getOpenid());
                 userMap.setPhone(phoneNoInfo.getPhoneNumber());
                 userMap.setUpdateTime(new DateTime());
+                // 检查并添加appId(不重复添加)
+                String updatedAppId = addAppIdIfNotExists(user.getAppId(), param.getAppId());
+                if (!updatedAppId.equals(user.getAppId())) {
+                    userMap.setAppId(updatedAppId);
+                }
                 userService.updateFsUser(userMap);
             }
             String token = jwtUtils.generateToken(user.getUserId());
@@ -497,4 +509,34 @@ public class WxUserScrmController extends AppBaseController {
 
     }
 
+    /**
+     * 添加appId到用户的appId列表中(如果不存在)
+     * @param currentAppIds 当前用户已有的appId列表(逗号分隔)
+     * @param newAppId 新的appId
+     * @return 更新后的appId列表
+     */
+    private String addAppIdIfNotExists(String currentAppIds, String newAppId) {
+        // 如果新appId为空,返回原值
+        if (StringUtils.isEmpty(newAppId)) {
+            return currentAppIds == null ? "" : currentAppIds;
+        }
+        
+        // 如果当前appId为空,直接返回新appId
+        if (StringUtils.isEmpty(currentAppIds)) {
+            return newAppId;
+        }
+        
+        // 检查是否已存在
+        String[] appIdArray = currentAppIds.split(",");
+        for (String appId : appIdArray) {
+            if (appId.trim().equals(newAppId.trim())) {
+                // 已存在,不需要添加
+                return currentAppIds;
+            }
+        }
+        
+        // 不存在,追加到末尾
+        return currentAppIds + "," + newAppId;
+    }
+
 }