25 Коміти f1fad68828 ... ddb605ad05

Автор SHA1 Опис Дата
  chenguo ddb605ad05 多店铺-推荐店铺 1 тиждень тому
  chenguo 21eabf8e03 Merge remote-tracking branch 'origin/ScrmStores' into ScrmStores 1 тиждень тому
  chenguo 9445367ca9 Merge branch 'refs/heads/master' into ScrmStores 1 тиждень тому
  chenguo f47cec92c4 Merge branch 'refs/heads/ScrmStore' into ScrmStores 1 тиждень тому
  zyp 407e5e43c5 Merge remote-tracking branch 'origin/master' 1 тиждень тому
  zyp b3ab8841ad zyp 1 тиждень тому
  wjj 070c3ff856 SOP任务一键群发 1 тиждень тому
  三七 1a6d5d8bad Merge remote-tracking branch 'origin/master' 1 тиждень тому
  三七 2db60de10a 1111 1 тиждень тому
  zx d1be5b5954 Merge remote-tracking branch 'origin/master' 1 тиждень тому
  zx ce13ceea49 恢复销售角色 1 тиждень тому
  yfh 411e9e416e 1、调整统计流量 1 тиждень тому
  ct 2ce51066c0 fix:字典查询 及私域套餐类型为0查全部 1 тиждень тому
  yfh 5a3e5692fd Merge remote-tracking branch 'origin/master' 1 тиждень тому
  yfh e4ee3adaac 调整优惠卷,调整优惠卷创建订单 1 тиждень тому
  chenguo dff87b794e Merge remote-tracking branch 'origin/ScrmStore' into ScrmStore 1 тиждень тому
  chenguo ef3141e0ea 代码合并 1 тиждень тому
  chenguo d0d5e6e135 Merge branch 'refs/heads/master' into ScrmStore 1 тиждень тому
  yjwang e667b54f24 订单明文导出,删除逻辑优化 1 тиждень тому
  chenguo 061dc176c8 Merge remote-tracking branch 'origin/ScrmStore' into ScrmStore 1 тиждень тому
  yjwang 1ad9d422bc 刷单实体类提交 1 тиждень тому
  chenguo 6340c1a5d1 Merge remote-tracking branch 'origin/ScrmStore' into ScrmStore 1 тиждень тому
  yjwang d0f7bc3e7e 优化物流批量导入接口 2 тижнів тому
  yjwang ed8c5cf14c 物流批量导入接口,订单删除接口 2 тижнів тому
  chenguo 6aa4496c7a Merge remote-tracking branch 'origin/ScrmStore' into ScrmStore 2 тижнів тому
49 змінених файлів з 1443 додано та 354 видалено
  1. 0 1
      fs-admin/src/main/java/com/fs/his/controller/FsStoreProductPackageController.java
  2. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreActivityScrmController.java
  3. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponIssueScrmController.java
  4. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponIssueUserScrmController.java
  5. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponScrmController.java
  6. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponUserScrmController.java
  7. 74 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreHealthOrderScrmController.java
  8. 83 0
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderScrmController.java
  9. 12 0
      fs-company/src/main/java/com/fs/company/controller/qw/SopUserLogsInfoController.java
  10. 4 4
      fs-service/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java
  11. 6 0
      fs-service/src/main/java/com/fs/course/config/CourseConfig.java
  12. 1 0
      fs-service/src/main/java/com/fs/course/domain/FsUserCoursePeriodDays.java
  13. 35 5
      fs-service/src/main/java/com/fs/course/dto/FsOrderDeliveryNoteDTO.java
  14. 1 1
      fs-service/src/main/java/com/fs/course/param/FsCourseSendRewardUParam.java
  15. 5 0
      fs-service/src/main/java/com/fs/course/param/FsCourseTrafficLogParam.java
  16. 3 0
      fs-service/src/main/java/com/fs/course/service/impl/FsCourseTrafficLogServiceImpl.java
  17. 4 0
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java
  18. 2 2
      fs-service/src/main/java/com/fs/his/mapper/FsPackageMapper.java
  19. 15 0
      fs-service/src/main/java/com/fs/his/service/impl/FsStorePaymentServiceImpl.java
  20. 1 0
      fs-service/src/main/java/com/fs/hisStore/config/StoreConfig.java
  21. 45 0
      fs-service/src/main/java/com/fs/hisStore/domain/FsStoreRecommendScrm.java
  22. 61 2
      fs-service/src/main/java/com/fs/hisStore/domain/FsStoreScrm.java
  23. 3 2
      fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreOrderScrmMapper.java
  24. 69 0
      fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreRecommendScrmMapper.java
  25. 2 0
      fs-service/src/main/java/com/fs/hisStore/param/FsStoreProductQueryParam.java
  26. 1 1
      fs-service/src/main/java/com/fs/hisStore/service/IFsStoreOrderScrmService.java
  27. 69 0
      fs-service/src/main/java/com/fs/hisStore/service/IFsStoreRecommendScrmService.java
  28. 294 286
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java
  29. 3 0
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductScrmServiceImpl.java
  30. 2 2
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreScrmServiceImpl.java
  31. 104 0
      fs-service/src/main/java/com/fs/hisStore/service/impl/IFsStoreRecommendScrmServiceImpl.java
  32. 1 0
      fs-service/src/main/java/com/fs/hisStore/vo/FsStoreProductListVO.java
  33. 10 4
      fs-service/src/main/java/com/fs/sop/mapper/SopUserLogsMapper.java
  34. 1 0
      fs-service/src/main/java/com/fs/sop/params/SendUserLogsInfoMsgParam.java
  35. 1 0
      fs-service/src/main/java/com/fs/sop/service/ISopUserLogsInfoService.java
  36. 9 0
      fs-service/src/main/java/com/fs/sop/service/impl/SopUserLogsInfoServiceImpl.java
  37. 12 12
      fs-service/src/main/java/com/fs/system/mapper/SysDictDataMapper.java
  38. 1 1
      fs-service/src/main/resources/application-config-druid-syysy.yml
  39. 6 0
      fs-service/src/main/resources/mapper/course/FsCourseTrafficLogMapper.xml
  40. 85 6
      fs-service/src/main/resources/mapper/hisStore/FsStoreOrderScrmMapper.xml
  41. 55 0
      fs-service/src/main/resources/mapper/hisStore/FsStoreRecommendScrmMapper.xml
  42. 3 3
      fs-user-app/src/main/java/com/fs/app/controller/AppLoginController.java
  43. 20 12
      fs-user-app/src/main/java/com/fs/app/controller/WxH5MpController.java
  44. 3 3
      fs-user-app/src/main/java/com/fs/app/controller/store/AppLoginScrmController.java
  45. 91 0
      fs-user-app/src/main/java/com/fs/app/controller/store/FsUserComplaintController.java
  46. 94 0
      fs-user-app/src/main/java/com/fs/app/controller/store/StoreRecommendScrmController.java
  47. 115 0
      fs-user-app/src/main/java/com/fs/app/controller/store/StoreScrmController.java
  48. 30 0
      fs-user-app/src/main/java/com/fs/app/param/FsUserLoginByCourseMpParam.java
  49. 2 1
      fs-user-app/src/main/java/com/fs/app/param/FsUserLoginByMpParam.java

+ 0 - 1
fs-admin/src/main/java/com/fs/his/controller/FsStoreProductPackageController.java

@@ -153,7 +153,6 @@ public class FsStoreProductPackageController extends BaseController
         JSONArray jsonArray=JSONUtil.parseArray(fsStoreProductPackage.getProductList());
         List<StorePackageProductDTO> goodsList=JSONUtil.toList(jsonArray, StorePackageProductDTO.class);
         fsStoreProductPackage.setProducts(JSONUtil.toJsonStr(goodsList));
-        fsStoreProductPackage.setCompanyId(0l);
 
         return toAjax(fsStoreProductPackageService.insertFsStoreProductPackage(fsStoreProductPackage));
     }

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreActivityScrmController.java

@@ -25,7 +25,7 @@ import java.util.List;
  * @date 2022-11-18
  */
 @RestController
-@RequestMapping("/store/store/storeActivity")
+@RequestMapping("/store/storeActivity")
 public class FsStoreActivityScrmController extends BaseController
 {
     @Autowired

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponIssueScrmController.java

@@ -22,7 +22,7 @@ import java.util.List;
  * @date 2022-03-15
  */
 @RestController
-@RequestMapping("/store/store/storeCouponIssue")
+@RequestMapping("/store/storeCouponIssue")
 public class FsStoreCouponIssueScrmController extends BaseController
 {
     @Autowired

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponIssueUserScrmController.java

@@ -21,7 +21,7 @@ import java.util.List;
  * @date 2022-03-15
  */
 @RestController
-@RequestMapping("/store/store/storeCouponIssueUser")
+@RequestMapping("/store/storeCouponIssueUser")
 public class FsStoreCouponIssueUserScrmController extends BaseController
 {
     @Autowired

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponScrmController.java

@@ -26,7 +26,7 @@ import java.util.List;
  * @date 2022-03-15
  */
 @RestController
-@RequestMapping("/store/store/storeCoupon")
+@RequestMapping("/store/storeCoupon")
 public class FsStoreCouponScrmController extends BaseController
 {
     @Autowired

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponUserScrmController.java

@@ -23,7 +23,7 @@ import java.util.List;
  * @date 2022-03-15
  */
 @RestController
-@RequestMapping("/store/store/storeCouponUser")
+@RequestMapping("/store/storeCouponUser")
 public class FsStoreCouponUserScrmController extends BaseController
 {
     @Autowired

+ 74 - 1
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreHealthOrderScrmController.java

@@ -135,6 +135,38 @@ public class FsStoreHealthOrderScrmController extends BaseController {
         return util.exportExcel(list, "订单数据");
     }
 
+    /**
+     * 导出健康商城列表(明文)
+     */
+    @PreAuthorize("@ss.hasPermi('store:healthStoreOrder:export:details')")
+    @Log(title = "健康商城订单", businessType = BusinessType.EXPORT)
+    @GetMapping("/healthExportDetails")
+    public AjaxResult healthExportDetails(FsStoreOrderParam param) {
+        if ("".equals(param.getBeginTime()) && "".equals(param.getEndTime())){
+            param.setBeginTime(null);
+            param.setEndTime(null);
+        }
+        if (fsStoreOrderService.isEntityNull(param)){
+            return AjaxResult.error("请筛选数据导出");
+        }
+        if(!StringUtils.isEmpty(param.getCreateTimeRange())){
+            param.setCreateTimeList(param.getCreateTimeRange().split("--"));
+        }
+        if(!StringUtils.isEmpty(param.getPayTimeRange())){
+            param.setPayTimeList(param.getPayTimeRange().split("--"));
+        }
+        if(!StringUtils.isEmpty(param.getDeliverySendTimeRange())){
+            param.setDeliverySendTimeList(param.getDeliverySendTimeRange().split("--"));
+        }
+        if(!StringUtils.isEmpty(param.getDeliveryImportTimeRange())){
+            param.setDeliveryImportTimeList(param.getDeliveryImportTimeRange().split("--"));
+        }
+        param.setIsHealth("1");
+        List<FsStoreOrderExportVO> list = fsStoreOrderService.selectFsStoreOrderListVOByExport(param);
+        ExcelUtil<FsStoreOrderExportVO> util = new ExcelUtil<FsStoreOrderExportVO>(FsStoreOrderExportVO.class);
+        return util.exportExcel(list, "订单数据");
+    }
+
 
     @PreAuthorize("@ss.hasPermi('store:healthStoreOrder:exportItems')")
     @Log(title = "商城订单明细导出", businessType = BusinessType.EXPORT)
@@ -181,6 +213,47 @@ public class FsStoreHealthOrderScrmController extends BaseController {
         return util.exportExcel(list, "订单明细数据");
     }
 
+    @PreAuthorize("@ss.hasPermi('store:healthStoreOrder:exportItems:details')")
+    @Log(title = "商城订单明细导出", businessType = BusinessType.EXPORT)
+    @GetMapping("/healthExportItemsDetails")
+    public AjaxResult healthExportItemsDetails(FsStoreOrderParam param) {
+        if ("".equals(param.getBeginTime()) && "".equals(param.getEndTime())){
+            param.setBeginTime(null);
+            param.setEndTime(null);
+        }
+        if (fsStoreOrderService.isEntityNull(param)){
+            return AjaxResult.error("请筛选数据导出");
+        }
+        if(!StringUtils.isEmpty(param.getCreateTimeRange())){
+            param.setCreateTimeList(param.getCreateTimeRange().split("--"));
+        }
+        if(!StringUtils.isEmpty(param.getPayTimeRange())){
+            param.setPayTimeList(param.getPayTimeRange().split("--"));
+        }
+        if(!StringUtils.isEmpty(param.getDeliverySendTimeRange())){
+            param.setDeliverySendTimeList(param.getDeliverySendTimeRange().split("--"));
+        }
+        if(!StringUtils.isEmpty(param.getDeliveryImportTimeRange())){
+            param.setDeliveryImportTimeList(param.getDeliveryImportTimeRange().split("--"));
+        }
+        param.setIsHealth("1");
+        List<FsStoreOrderItemExportVO> list = orderItemService.selectFsStoreOrderItemListExportVO(param);
+        //对手机号脱敏
+        if (list != null) {
+            for (FsStoreOrderItemExportVO vo : list) {
+                if (!StringUtils.isEmpty(vo.getJsonInfo())) {
+                    try {
+                        StoreOrderProductDTO orderProductDTO = JSONObject.parseObject(vo.getJsonInfo(), StoreOrderProductDTO.class);
+                        BeanUtil.copyProperties(orderProductDTO, vo);
+                    } catch (Exception e) {
+                    }
+                }
+            }
+        }
+        ExcelUtil<FsStoreOrderItemExportVO> util = new ExcelUtil<FsStoreOrderItemExportVO>(FsStoreOrderItemExportVO.class);
+        return util.exportExcel(list, "订单明细数据");
+    }
+
     //订单发货批量导入
     @Log(title = "发货同步导入", businessType = BusinessType.IMPORT)
     @PostMapping("/importDeliveryNoteExpress")
@@ -203,7 +276,7 @@ public class FsStoreHealthOrderScrmController extends BaseController {
         try {
             List<FsOrderDeliveryNoteDTO> dtoList = util.importExcel(file.getInputStream());
             if(!dtoList.isEmpty()){
-                fsStoreOrderService.importDeliveryNoteExpress(dtoList);
+               return fsStoreOrderService.importDeliveryNoteExpress(dtoList);
             }else {
                 R.error("操作失败,导入数据不能小于1条!");
             }

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

@@ -7,9 +7,11 @@ 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.ParseUtils;
+import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.company.param.CompanyStoreOrderMoneyLogsListParam;
@@ -20,6 +22,7 @@ import com.fs.erp.domain.ErpOrderQuery;
 import com.fs.erp.dto.ErpOrderQueryRequert;
 import com.fs.erp.dto.ErpOrderQueryResponse;
 import com.fs.erp.service.IErpOrderService;
+import com.fs.framework.web.service.TokenService;
 import com.fs.his.domain.FsUser;
 import com.fs.his.service.IFsExpressService;
 import com.fs.his.service.IFsUserService;
@@ -101,6 +104,9 @@ public class FsStoreOrderScrmController extends BaseController {
     @Autowired
     private IFsStoreOrderAuditLogScrmService orderAuditLogService;
 
+    @Autowired
+    private TokenService tokenService;
+
     private IErpOrderService getErpService(){
         //判断是否开启erp
         IErpOrderService erpOrderService = null;
@@ -255,6 +261,9 @@ public class FsStoreOrderScrmController extends BaseController {
         List<FsStoreOrderExportVO> list = fsStoreOrderService.selectFsStoreOrderListVOByExport(param);
         //对手机号脱敏
         if (list != null) {
+            //获取当前账号角色权限
+            LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+
             for (FsStoreOrderExportVO vo : list) {
                 if (vo.getPhone() != null) {
                     vo.setPhone(vo.getPhone().replaceAll("(\\d{3})\\d*(\\d{4})", "$1****$2"));
@@ -272,6 +281,37 @@ public class FsStoreOrderScrmController extends BaseController {
     }
 
 
+    /**
+     * 导出订单列表(明文)
+     */
+    @PreAuthorize("@ss.hasPermi('store:storeOrder:export:details')")
+    @Log(title = "订单", businessType = BusinessType.EXPORT)
+    @GetMapping("/exportDetails")
+    public AjaxResult exportDetails(FsStoreOrderParam param) {
+        if ("".equals(param.getBeginTime()) && "".equals(param.getEndTime())){
+            param.setBeginTime(null);
+            param.setEndTime(null);
+        }
+        if (fsStoreOrderService.isEntityNull(param)){
+            return AjaxResult.error("请筛选数据导出");
+        }
+        if(!StringUtils.isEmpty(param.getCreateTimeRange())){
+            param.setCreateTimeList(param.getCreateTimeRange().split("--"));
+        }
+        if(!StringUtils.isEmpty(param.getPayTimeRange())){
+            param.setPayTimeList(param.getPayTimeRange().split("--"));
+        }
+        if(!StringUtils.isEmpty(param.getDeliverySendTimeRange())){
+            param.setDeliverySendTimeList(param.getDeliverySendTimeRange().split("--"));
+        }
+        if(!StringUtils.isEmpty(param.getDeliveryImportTimeRange())){
+            param.setDeliveryImportTimeList(param.getDeliveryImportTimeRange().split("--"));
+        }
+        param.setNotHealth(1);
+        List<FsStoreOrderExportVO> list = fsStoreOrderService.selectFsStoreOrderListVOByExport(param);
+        ExcelUtil<FsStoreOrderExportVO> util = new ExcelUtil<FsStoreOrderExportVO>(FsStoreOrderExportVO.class);
+        return util.exportExcel(list, "订单数据");
+    }
 
     @PreAuthorize("@ss.hasPermi('store:storeOrder:exportItems')")
     @Log(title = "订单明细导出", businessType = BusinessType.EXPORT)
@@ -321,6 +361,49 @@ public class FsStoreOrderScrmController extends BaseController {
         return util.exportExcel(list, "订单明细数据");
     }
 
+    /**
+     * 订单明细导出(明文)
+     * **/
+    @PreAuthorize("@ss.hasPermi('store:storeOrder:exportItems:details')")
+    @Log(title = "订单明细导出", businessType = BusinessType.EXPORT)
+    @GetMapping("/exportItemsDetails")
+    public AjaxResult exportItemsDetails(FsStoreOrderParam param) {
+        if ("".equals(param.getBeginTime()) && "".equals(param.getEndTime())){
+            param.setBeginTime(null);
+            param.setEndTime(null);
+        }
+        if (fsStoreOrderService.isEntityNull(param)){
+            return AjaxResult.error("请筛选数据导出");
+        }
+        if(!StringUtils.isEmpty(param.getCreateTimeRange())){
+            param.setCreateTimeList(param.getCreateTimeRange().split("--"));
+        }
+        if(!StringUtils.isEmpty(param.getPayTimeRange())){
+            param.setPayTimeList(param.getPayTimeRange().split("--"));
+        }
+        if(!StringUtils.isEmpty(param.getDeliveryImportTimeRange())){
+            param.setDeliveryImportTimeList(param.getDeliveryImportTimeRange().split("--"));
+        }
+        if(!StringUtils.isEmpty(param.getDeliverySendTimeRange())){
+            param.setDeliverySendTimeList(param.getDeliverySendTimeRange().split("--"));
+        }
+        param.setNotHealth(1);
+        List<FsStoreOrderItemExportVO> list = orderItemService.selectFsStoreOrderItemListExportVO(param);
+        //对手机号脱敏
+        if (list != null) {
+            for (FsStoreOrderItemExportVO vo : list) {
+                if (!StringUtils.isEmpty(vo.getJsonInfo())) {
+                    try {
+                        StoreOrderProductDTO orderProductDTO = JSONObject.parseObject(vo.getJsonInfo(), StoreOrderProductDTO.class);
+                        BeanUtil.copyProperties(orderProductDTO, vo);
+                    } catch (Exception e) {
+                    }
+                }
+            }
+        }
+        ExcelUtil<FsStoreOrderItemExportVO> util = new ExcelUtil<FsStoreOrderItemExportVO>(FsStoreOrderItemExportVO.class);
+        return util.exportExcel(list, "订单明细数据");
+    }
 
     @GetMapping("/orderItemsNum")
     public R orderItemsNum(FsStoreOrderParam param) {

+ 12 - 0
fs-company/src/main/java/com/fs/company/controller/qw/SopUserLogsInfoController.java

@@ -418,6 +418,18 @@ public class SopUserLogsInfoController extends BaseController
         return sopUserLogsInfoService.sendUserLogsInfoMsgType(param);
     }
 
+    /**
+     * 一键群发sopUserLogsInfo
+     */
+    @PreAuthorize("@ss.hasPermi('qw:sopUserLogsInfo:msg')")
+    @Log(title = "sendUserLogsInfoMsgSop", businessType = BusinessType.INSERT,isSaveRequestData=false)
+    @PostMapping("/sendUserLogsInfoMsgSop")
+    @RepeatSubmit
+    public R sendUserLogsInfoMsgSop(@RequestBody SendUserLogsInfoMsgParam param)
+    {
+        return sopUserLogsInfoService.sendUserLogsInfoMsgSop(param);
+    }
+
 
     /**
      * 删除sopUserLogsInfo

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

@@ -255,10 +255,10 @@ public class CompanyUserServiceImpl implements ICompanyUserService
         logger.info("打印邀请用户信息------------------------------》:{}",user);
         // 新增用户信息
         int rows = companyUserMapper.insertCompanyUser(user);
-//        // 新增用户岗位关联
-//        insertUserPost(user);
-//        // 新增用户与角色管理
-//        insertUserRole(user);
+        // 新增用户岗位关联
+        insertUserPost(user);
+        // 新增用户与角色管理
+        insertUserRole(user);
         //新增用户需要修改密码
         redisCache.setCacheObject("newCompanyUser:" + user.getCompanyId() + ":" +user.getUserName(),user.getUserId());
         return rows;

+ 6 - 0
fs-service/src/main/java/com/fs/course/config/CourseConfig.java

@@ -52,6 +52,12 @@ public class CourseConfig implements Serializable {
      */
     private String userCourseAuthDomain;
 
+    /**
+     * 会员看课
+     * 炮灰看课发红包-服务号发
+     */
+    private String userCourseH5Reward;
+
     /**
      * 是否绑定
      */

+ 1 - 0
fs-service/src/main/java/com/fs/course/domain/FsUserCoursePeriodDays.java

@@ -96,6 +96,7 @@ public class FsUserCoursePeriodDays extends BaseEntityTow {
     private LocalDate maxDate;
 
     /** 项目id */
+    @TableField(exist = false)
     private Long projectId;
 
 }

+ 35 - 5
fs-service/src/main/java/com/fs/course/dto/FsOrderDeliveryNoteDTO.java

@@ -3,6 +3,8 @@ package com.fs.course.dto;
 import com.fs.common.annotation.Excel;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 /**
  * 订单发货下载模板
  * **/
@@ -11,12 +13,40 @@ public class FsOrderDeliveryNoteDTO {
     /**
      * 系统订单号
      * **/
-    @Excel(name = "系统订单号(必填)",width = 40,sort = 1)
+    @Excel(name = "系统订单号(必填)",width = 20,sort = 1)
     private String orderNumber;
 
-    /**
-     * 发货状态
-     * **/
-    @Excel(name = "系统订单号(1:待发货、2:待收货、3:交易完成,-3:已取消)填写对应数字",width = 90,sort = 2)
+    @Excel(name = "物流公司编号(必填)(SF:顺丰、EMS:邮政、ZTO:中通、JD:京东、DBL:德邦)",width = 30,sort = 2)
+    private String deliverySn;
+
+    private String deliveryName;
+
+    @Excel(name = "快递单号(必填)",width = 20,sort = 3)
+    private String deliveryId;
+
+    @Excel(name = "物流状态(0:暂无信息、1:已揽收、2:在途中、3:签收、4:问题件)",width = 40,sort = 4)
+    private Integer deliveryStatus;
+
+    @Excel(name = "物流结算费用",width = 20,sort = 5)
+    private BigDecimal deliveryPayMoney;
+
+    @Excel(name = "物流跟踪状态(311:快递柜或驿站签收、304:派件异常后最终签收、301:正常签收、211:已放入快递柜或驿站、202:派件中、201:到达派件城市、401:发货无信息、412:快递柜或驿站超时未取、407:退货未签收)",width = 40,sort = 6)
+    private Integer deliveryType;
+
+    @Excel(name = "物流结算状态(1:已结算、2:冻结、3:解冻、4:退回运费、5.调账)",width = 20,sort = 7)
+    private Integer deliveryPayStatus;
+
+    @Excel(name = "快递账单日期",width = 20,sort = 8)
+    private String deliveryTime;
+
+    @Excel(name = "快递结算日期",width = 20,sort = 9)
+    private String deliveryPayTime;
+
+//    /**
+//     * 发货状态
+//     * **/
+//    @Excel(name = "系统订单号(1:待发货、2:待收货、3:交易完成,-3:已取消)填写对应数字",width = 40,sort = 7)
+//    private Integer deliveryNoteStatus;
+
     private Integer deliveryNoteStatus;
 }

+ 1 - 1
fs-service/src/main/java/com/fs/course/param/FsCourseSendRewardUParam.java

@@ -27,7 +27,7 @@ public class FsCourseSendRewardUParam implements Serializable
     private Integer sendType;
     private Long periodId;
 
-    private String appId;
+    private String appId; //前端传来的小程序的appid
 
     private String code;
 

+ 5 - 0
fs-service/src/main/java/com/fs/course/param/FsCourseTrafficLogParam.java

@@ -35,4 +35,9 @@ public class FsCourseTrafficLogParam {
      */
     private String tabType;
 
+    /**
+     * 公共看课
+     */
+    private String common;
+
 }

+ 3 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsCourseTrafficLogServiceImpl.java

@@ -183,6 +183,9 @@ public class FsCourseTrafficLogServiceImpl implements IFsCourseTrafficLogService
         if(StringUtils.isBlank(param.getStartDate()) && StringUtils.isBlank(param.getEndDate())){
             throw new CustomException("搜索必须要一个时间范围!");
         }
+        if (ObjectUtils.isNotEmpty(param.getTabType())&&param.getTabType().equals("common")){
+            param.setCommon(param.getTabType());
+        }
         List<FsCourseTrafficLogListVO> fsCourseTrafficLogListVOS = fsCourseTrafficLogMapper.selectTrafficNew(param);
         for (FsCourseTrafficLogListVO log : fsCourseTrafficLogListVOS) {
             if (ObjectUtils.isNotNull(log.getProject())) {

+ 4 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -265,6 +265,8 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
             fsUserCourseVideo.setListingStartTime(null);
             fsUserCourseVideo.setListingEndTime(null);
         }
+        String videoRedisKey = "h5user:video:duration:" + fsUserCourseVideo.getVideoId();
+        redisCache.setCacheObject(videoRedisKey, fsUserCourseVideo.getDuration());
         return fsUserCourseVideoMapper.updateFsUserCourseVideo(fsUserCourseVideo);
     }
 
@@ -1210,6 +1212,7 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         if (StringUtils.isNotEmpty(config.getMpAppId())){
             packetParam.setMpAppId(config.getMpAppId());
         }
+        //组装发红包数据
         packetParam.setAmount(amount);
         packetParam.setSource(param.getSource());
         packetParam.setRedPacketMode(config.getRedPacketMode());
@@ -1834,6 +1837,7 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         vo.setPlayDuration(duration);
         //判断营期的课程状态是否是进行中
         if(param.getId() != null){
+
             FsUserCoursePeriodDays days = fsUserCoursePeriodDaysMapper.selectById(param.getId());
 
             // 查询销售设置的看课时间

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

@@ -112,13 +112,13 @@ public interface FsPackageMapper
     @Select({"<script> " +
             "select p.*  from fs_package p    " +
             "where p.status=1 and p.is_del=0   " +
-            "<if test = 'maps.keyword != null     '> " +
+            "<if test = 'maps.keyword != null and  maps.keyword != \"\"   '> " +
             "and ( p.package_name like CONCAT('%',#{maps.keyword},'%') or p.second_name like CONCAT('%',#{maps.keyword},'%')) " +
             "</if>" +
             "<if test = 'maps.diseaseType != null and maps.diseaseType !=0    '> " +
             "and p.disease_type = #{maps.diseaseType} " +
             "</if>" +
-            "<if test = 'maps.privateType != null'> " +
+            "<if test = 'maps.privateType != null and maps.privateType != 0'> " +
             "and p.private_type = #{maps.privateType} " +
             "</if>" +
             "<if test = 'maps.isShow != null '> " +

+ 15 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsStorePaymentServiceImpl.java

@@ -25,6 +25,7 @@ import com.fs.company.param.FsStoreStatisticsParam;
 import com.fs.company.vo.FsStorePaymentStatisticsVO;
 import com.fs.core.config.WxPayProperties;
 import com.fs.core.utils.OrderCodeUtils;
+import com.fs.course.config.CourseConfig;
 import com.fs.course.config.RedPacketConfig;
 import com.fs.course.domain.FsCourseRedPacketLog;
 import com.fs.course.mapper.FsCourseRedPacketLogMapper;
@@ -490,12 +491,26 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
         }
         result.put("mchId",config.getMchId()+"");
         result.put("isNew",config.getIsNew());
+
+        // 获取配置信息 (这个地方返回炮灰服务号落地url,调用地方太多,无法一级一级下传,直接再拿一次)
+        String courseJson = configService.selectConfigByKey("course.config");
+        CourseConfig courseConfig = JSONUtil.toBean(courseJson, CourseConfig.class);
+        result.put("h5RewardUrl", Optional.ofNullable(courseConfig)
+                .map(CourseConfig::getUserCourseH5Reward)
+                .orElse(null));
+
         System.out.println("红包返回:"+result);
         return result;
     }
 
     // 内部方法:处理新版本的发红包逻辑
     private R sendRedPacketV3Internal(WxSendRedPacketParam param, RedPacketConfig config) {
+        //炮灰小程序,发服务号
+        if (param.getSource()==1 && param.getUser().getMpOpenId()!=null && StringUtils.isNotEmpty(param.getMpAppId())){
+            config.setAppId(param.getMpAppId());
+            param.setOpenId(param.getUser().getMpOpenId());
+        }
+
         WxPayConfig payConfig = new WxPayConfig();
         BeanUtils.copyProperties(config, payConfig);
         WxPayService wxPayService = new WxPayServiceImpl();

+ 1 - 0
fs-service/src/main/java/com/fs/hisStore/config/StoreConfig.java

@@ -23,5 +23,6 @@ public class StoreConfig implements Serializable {
     private String refundAddress;
     private Integer auditSwitch; // 订单审核开关
     private Integer createSalesOrderType; // 订单改价方式 1 商品改价 2总价改价
+    private Boolean isBrushOrders;//是否开启刷单按钮
 
 }

+ 45 - 0
fs-service/src/main/java/com/fs/hisStore/domain/FsStoreRecommendScrm.java

@@ -0,0 +1,45 @@
+package com.fs.hisStore.domain;
+
+import com.fs.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 店铺推荐对象 fs_store_recommend_scrm
+ *
+ * @author fs
+ * @date 2023-06-15
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class FsStoreRecommendScrm extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    private Long id;
+
+    /** 店铺ID */
+    private Long storeId;
+
+    /** 店铺名称 */
+    private String storeName;
+
+    /** 排序值,数值越小越靠前 */
+    private Integer sortOrder;
+
+    /** 推荐类型(HOT热门,NEW新品,GENERAL普通推荐) */
+    private String recommendType;
+
+    /** 状态(0禁用,1启用) */
+    private Integer status;
+
+    /** 权重值,用于综合排序 */
+    private Integer weight;
+
+    /** 推荐理由 */
+    private String recommendReason;
+
+}

+ 61 - 2
fs-service/src/main/java/com/fs/hisStore/domain/FsStoreScrm.java

@@ -93,46 +93,105 @@ public class FsStoreScrm extends BaseEntity
     private String shippingType;
 
 
+    /** 佣金类型 */
     private Integer brokerageType;
 
+    /** 佣金比例 */
     private Integer brokerageRate;
 
-
+    /** 店铺全称 */
     private String fullName;
 
-
+    /** 退货联系电话 */
     private String refundPhone;
+
+    /** 退货地址 */
     private String refundAddress;
+
+    /** 退货联系人 */
     private String refundConsignee;
 
+    /** 配送方式 */
     private Integer deliveryType;
 
+    /** 发货联系电话 */
     private String sendPhone;
 
+    /** 企业注册地址 */
     private String enterpriseAddress;
+
+    /** 法人代表姓名 */
     private String legalPersonName;
+
+    /** 统一社会信用代码 */
     private String unifiedSocialCreditCode;
+    /** 统一社会信用代码失效日期 */
+    private String unifiedSocialCreditCodeExpireEnd;
+
+    /** 经营范围 */
     private String businessScope;
+
+    /** 营业执照图片 */
     private String businessLicense;
+
+    /** 营业执照有效期开始 */
     private LocalDate businessLicenseExpireStart;
+
+    /** 营业执照有效期结束 */
     private LocalDate businessLicenseExpireEnd;
+
+    /** 药品经营许可证 */
     private String drugLicense;
+
+    /** 药品经营许可证有效期开始 */
     private LocalDate drugLicenseExpiryStart;
+
+    /** 药品经营许可证有效期结束 */
     private LocalDate drugLicenseExpiryEnd;
+
+    /** 1类器械生产备案 */
     private String medicalDevice1;
+
+    /** 1类器械生产备案有效期开始 */
     private LocalDate medicalDevice1ExpiryStart;
+
+    /** 1类器械生产备案有效期结束 */
     private LocalDate medicalDevice1ExpiryEnd;
+
+    /** 2类医疗器械备案 */
     private String medicalDevice2;
+
+    /** 2类医疗器械备案有效期开始 */
     private LocalDate medicalDevice2ExpiryStart;
+
+    /** 2类医疗器械备案有效期结束 */
     private LocalDate medicalDevice2ExpiryEnd;
+
+    /** 3类器械经营许可证 */
     private String medicalDevice3;
+
+    /** 3类器械经营许可证有效期开始 */
     private LocalDate medicalDevice3ExpiryStart;
+
+    /** 3类器械经营许可证有效期结束 */
     private LocalDate medicalDevice3ExpiryEnd;
+
+    /** 食品经营许可证 */
     private String foodLicense;
+
+    /** 食品经营许可证有效期开始 */
     private LocalDate foodLicenseExpiryStart;
+
+    /** 食品经营许可证有效期结束 */
     private LocalDate foodLicenseExpiryEnd;
+
+    /** 医疗机构执业许可证 */
     private String medicalLicense;
+
+    /** 医疗机构执业许可证有效期开始 */
     private LocalDate medicalLicenseExpiryStart;
+
+    /** 医疗机构执业许可证有效期结束 */
     private LocalDate medicalLicenseExpiryEnd;
 
 }

+ 3 - 2
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreOrderScrmMapper.java

@@ -1062,9 +1062,10 @@ public interface FsStoreOrderScrmMapper
     List<Map<String, Object>> selectFsStoreProductCountsByDept(Map<String, Object> map);
 
     /**
-     * 批量更新订单状态
-     * @param dtoList 订单更新数据表
+     * 批量查询订单信息
+     * @param ids 订单id
      * **/
+    List<FsStoreOrderScrm> selectStoreOrderScrmInId(@Param("ids") Long[] ids);
     void batchUpdateInOrderCode(@Param("dtoList") List<FsOrderDeliveryNoteDTO> dtoList);
 
     @Select({"<script> " +

+ 69 - 0
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreRecommendScrmMapper.java

@@ -0,0 +1,69 @@
+package com.fs.hisStore.mapper;
+
+import com.fs.hisStore.domain.FsStoreRecommendScrm;
+import java.util.List;
+
+/**
+ * 店铺推荐Mapper接口
+ *
+ * @author fs
+ * @date 2023-06-15
+ */
+public interface FsStoreRecommendScrmMapper
+{
+    /**
+     * 查询店铺推荐
+     *
+     * @param id 店铺推荐主键
+     * @return 店铺推荐
+     */
+    public FsStoreRecommendScrm selectFsStoreRecommendScrmById(Long id);
+
+    /**
+     * 查询店铺推荐列表
+     *
+     * @param fsStoreRecommendScrm 店铺推荐
+     * @return 店铺推荐集合
+     */
+    public List<FsStoreRecommendScrm> selectFsStoreRecommendScrmList(FsStoreRecommendScrm fsStoreRecommendScrm);
+
+    /**
+     * 查询有效的推荐店铺列表(根据时间、状态等条件)
+     *
+     * @param fsStoreRecommendScrm 店铺推荐
+     * @return 店铺推荐集合
+     */
+    public List<FsStoreRecommendScrm> selectValidRecommendList(FsStoreRecommendScrm fsStoreRecommendScrm);
+
+    /**
+     * 新增店铺推荐
+     *
+     * @param fsStoreRecommendScrm 店铺推荐
+     * @return 结果
+     */
+    public int insertFsStoreRecommendScrm(FsStoreRecommendScrm fsStoreRecommendScrm);
+
+    /**
+     * 修改店铺推荐
+     *
+     * @param fsStoreRecommendScrm 店铺推荐
+     * @return 结果
+     */
+    public int updateFsStoreRecommendScrm(FsStoreRecommendScrm fsStoreRecommendScrm);
+
+    /**
+     * 删除店铺推荐
+     *
+     * @param id 店铺推荐主键
+     * @return 结果
+     */
+    public int deleteFsStoreRecommendScrmById(Long id);
+
+    /**
+     * 批量删除店铺推荐
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteFsStoreRecommendScrmByIds(Long[] ids);
+}

+ 2 - 0
fs-service/src/main/java/com/fs/hisStore/param/FsStoreProductQueryParam.java

@@ -28,4 +28,6 @@ public class FsStoreProductQueryParam extends BaseQueryParam implements Serializ
     private String token;
     // 用户企业ID
     private Long companyId;
+    //是否药品(0否 1是)
+    private Integer isDrug;
 }

+ 1 - 1
fs-service/src/main/java/com/fs/hisStore/service/IFsStoreOrderScrmService.java

@@ -281,5 +281,5 @@ public interface IFsStoreOrderScrmService
      * 批量导入更新微信订单发货状态
      * @param dtoList 订单数据
      * **/
-    void importDeliveryNoteExpress(List<FsOrderDeliveryNoteDTO> dtoList);
+    R importDeliveryNoteExpress(List<FsOrderDeliveryNoteDTO> dtoList);
 }

+ 69 - 0
fs-service/src/main/java/com/fs/hisStore/service/IFsStoreRecommendScrmService.java

@@ -0,0 +1,69 @@
+package com.fs.hisStore.service;
+
+import com.fs.hisStore.domain.FsStoreRecommendScrm;
+import java.util.List;
+
+/**
+ * 店铺推荐Service接口
+ *
+ * @author fs
+ * @date 2023-06-15
+ */
+public interface IFsStoreRecommendScrmService
+{
+    /**
+     * 查询店铺推荐
+     *
+     * @param id 店铺推荐主键
+     * @return 店铺推荐
+     */
+    public FsStoreRecommendScrm selectFsStoreRecommendScrmById(Long id);
+
+    /**
+     * 查询店铺推荐列表
+     *
+     * @param fsStoreRecommendScrm 店铺推荐
+     * @return 店铺推荐集合
+     */
+    public List<FsStoreRecommendScrm> selectFsStoreRecommendScrmList(FsStoreRecommendScrm fsStoreRecommendScrm);
+
+    /**
+     * 查询有效的推荐店铺列表(根据时间、状态等条件)
+     *
+     * @param fsStoreRecommendScrm 店铺推荐
+     * @return 店铺推荐集合
+     */
+    public List<FsStoreRecommendScrm> selectValidRecommendList(FsStoreRecommendScrm fsStoreRecommendScrm);
+
+    /**
+     * 新增店铺推荐
+     *
+     * @param fsStoreRecommendScrm 店铺推荐
+     * @return 结果
+     */
+    public int insertFsStoreRecommendScrm(FsStoreRecommendScrm fsStoreRecommendScrm);
+
+    /**
+     * 修改店铺推荐
+     *
+     * @param fsStoreRecommendScrm 店铺推荐
+     * @return 结果
+     */
+    public int updateFsStoreRecommendScrm(FsStoreRecommendScrm fsStoreRecommendScrm);
+
+    /**
+     * 批量删除店铺推荐
+     *
+     * @param ids 需要删除的店铺推荐主键集合
+     * @return 结果
+     */
+    public int deleteFsStoreRecommendScrmByIds(Long[] ids);
+
+    /**
+     * 删除店铺推荐信息
+     *
+     * @param id 店铺推荐主键
+     * @return 结果
+     */
+    public int deleteFsStoreRecommendScrmById(Long id);
+}

Різницю між файлами не показано, бо вона завелика
+ 294 - 286
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java


+ 3 - 0
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductScrmServiceImpl.java

@@ -187,6 +187,9 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
                 }
                 item.setCompanyName(String.join(",",companyNameList));
             }
+            //店铺名称
+            if(StringUtils.isNotEmpty(item.getStoreId()))
+                item.setStoreName(fsStoreScrmService.selectFsStoreByStoreId(Long.parseLong(item.getStoreId())).getStoreName());
         }
         return fsStoreProductListVOS;
     }

+ 2 - 2
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreScrmServiceImpl.java

@@ -91,7 +91,7 @@ public class FsStoreScrmServiceImpl implements IFsStoreScrmService
         fsStore.setUpdateTime(DateUtils.getNowDate());
         storeAuditLogUtil.addOperLog(fsStore.getStoreId());
         //更新,信息,时间等,后台重新审核,驳回的店铺,重新审核
-        if(1 != fsStore.getIsAudit()){
+        if(1 == fsStore.getIsAudit()){
             fsStore.setIsAudit(0);
         }
         return fsStoreMapper.updateFsStore(fsStore);
@@ -173,4 +173,4 @@ public class FsStoreScrmServiceImpl implements IFsStoreScrmService
         return fsStoreMapper.batchUpdateStatusByIds(ids, status);
     }
 
-}
+}

+ 104 - 0
fs-service/src/main/java/com/fs/hisStore/service/impl/IFsStoreRecommendScrmServiceImpl.java

@@ -0,0 +1,104 @@
+package com.fs.hisStore.service.impl;
+
+import com.fs.common.core.domain.BaseEntity;
+import com.fs.common.utils.DateUtils;
+import com.fs.hisStore.domain.FsStoreRecommendScrm;
+import com.fs.hisStore.mapper.FsStoreRecommendScrmMapper;
+import com.fs.hisStore.service.IFsStoreRecommendScrmService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 店铺推荐Service业务层处理
+ *
+ * @author fs
+ * @date 2023-06-15
+ */
+@Service
+public class IFsStoreRecommendScrmServiceImpl implements IFsStoreRecommendScrmService {
+
+    @Autowired
+    private FsStoreRecommendScrmMapper fsStoreRecommendScrmMapper;
+
+    /**
+     * 查询店铺推荐
+     *
+     * @param id 店铺推荐主键
+     * @return 店铺推荐
+     */
+    @Override
+    public FsStoreRecommendScrm selectFsStoreRecommendScrmById(Long id) {
+        return fsStoreRecommendScrmMapper.selectFsStoreRecommendScrmById(id);
+    }
+
+    /**
+     * 查询店铺推荐列表
+     *
+     * @param fsStoreRecommendScrm 店铺推荐
+     * @return 店铺推荐
+     */
+    @Override
+    public List<FsStoreRecommendScrm> selectFsStoreRecommendScrmList(FsStoreRecommendScrm fsStoreRecommendScrm) {
+        return fsStoreRecommendScrmMapper.selectFsStoreRecommendScrmList(fsStoreRecommendScrm);
+    }
+
+    /**
+     * 查询有效的推荐店铺列表
+     *
+     * @param fsStoreRecommendScrm 店铺推荐
+     * @return 店铺推荐集合
+     */
+    @Override
+    public List<FsStoreRecommendScrm> selectValidRecommendList(FsStoreRecommendScrm fsStoreRecommendScrm) {
+        return fsStoreRecommendScrmMapper.selectValidRecommendList(fsStoreRecommendScrm);
+    }
+
+    /**
+     * 新增店铺推荐
+     *
+     * @param fsStoreRecommendScrm 店铺推荐
+     * @return 结果
+     */
+    @Override
+    public int insertFsStoreRecommendScrm(FsStoreRecommendScrm fsStoreRecommendScrm) {
+        fsStoreRecommendScrm.setCreateTime(DateUtils.getNowDate());
+        return fsStoreRecommendScrmMapper.insertFsStoreRecommendScrm(fsStoreRecommendScrm);
+    }
+
+    /**
+     * 修改店铺推荐
+     *
+     * @param fsStoreRecommendScrm 店铺推荐
+     * @return 结果
+     */
+    @Override
+    public int updateFsStoreRecommendScrm(FsStoreRecommendScrm fsStoreRecommendScrm) {
+        fsStoreRecommendScrm.setUpdateTime(DateUtils.getNowDate());
+        return fsStoreRecommendScrmMapper.updateFsStoreRecommendScrm(fsStoreRecommendScrm);
+    }
+
+    /**
+     * 批量删除店铺推荐
+     *
+     * @param ids 需要删除的店铺推荐主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsStoreRecommendScrmByIds(Long[] ids) {
+        return fsStoreRecommendScrmMapper.deleteFsStoreRecommendScrmByIds(ids);
+    }
+
+    /**
+     * 删除店铺推荐信息
+     *
+     * @param id 店铺推荐主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsStoreRecommendScrmById(Long id) {
+        return fsStoreRecommendScrmMapper.deleteFsStoreRecommendScrmById(id);
+    }
+}

+ 1 - 0
fs-service/src/main/java/com/fs/hisStore/vo/FsStoreProductListVO.java

@@ -115,4 +115,5 @@ public class FsStoreProductListVO  implements Serializable
     private String isAudit;
 
     private String storeId;
+    private String storeName;
 }

+ 10 - 4
fs-service/src/main/java/com/fs/sop/mapper/SopUserLogsMapper.java

@@ -6,10 +6,7 @@ import com.fs.qw.param.SopUserLogsVO;
 import com.fs.qw.vo.UpdateSopUserLogDateVo;
 import com.fs.sop.domain.SopUserLogs;
 import com.fs.sop.domain.SopUserLogsInfo;
-import com.fs.sop.params.GetSOPTaskDataParam;
-import com.fs.sop.params.SopUserLogsList;
-import com.fs.sop.params.SopUserLogsParam;
-import com.fs.sop.params.SopUserLogsParamByDate;
+import com.fs.sop.params.*;
 import com.fs.sop.vo.SopUserLogsInfoVo;
 import com.fs.sop.vo.SopUserLogsVo;
 import org.apache.ibatis.annotations.Param;
@@ -260,4 +257,13 @@ public interface SopUserLogsMapper {
 
     @DataSource(DataSourceType.SOP)
     List<SopUserLogs> getSopUserLogsInfoById(@Param("ids") String[] ids);
+
+    @DataSource(DataSourceType.SOP)
+    @Select({"<script> " +
+            "SELECT id FROM sop_user_logs " +
+            "WHERE corp_id = #{param.corpId} " +
+            "and sop_id in" +
+            "<foreach  item='item' index='index' collection='param.sopIds' open='(' separator=',' close=')'> #{item}    </foreach>" +
+            "</script>"})
+    List<String> getSopUserLogsIds(@Param("param")SendUserLogsInfoMsgParam param);
 }

+ 1 - 0
fs-service/src/main/java/com/fs/sop/params/SendUserLogsInfoMsgParam.java

@@ -9,6 +9,7 @@ import lombok.Data;
 public class SendUserLogsInfoMsgParam {
 
     private String[] ids;
+    private String[] sopIds;
     private String[] chatIds;
     private Integer videoId;
     private Integer courseId;

+ 1 - 0
fs-service/src/main/java/com/fs/sop/service/ISopUserLogsInfoService.java

@@ -79,6 +79,7 @@ public interface ISopUserLogsInfoService {
     public R batchUpdateSopUserLogsInfoToTime(BatchSopUserLogsInfoParam param);
     public R sendUserLogsInfoMsg(SendUserLogsInfoMsgParam param);
     public R sendUserLogsInfoMsgType(SendUserLogsInfoMsgParam param);
+    R sendUserLogsInfoMsgSop(SendUserLogsInfoMsgParam param);
 
     List<SopUserLogsInfo> selectRestoreByIsDaysNotStudy(String sopId, String userLogsId);
 

+ 9 - 0
fs-service/src/main/java/com/fs/sop/service/impl/SopUserLogsInfoServiceImpl.java

@@ -927,6 +927,15 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
         return null;
     }
 
+    @Override
+    public R sendUserLogsInfoMsgSop(SendUserLogsInfoMsgParam param) {
+        List<String> sopUserLogsIds = sopUserLogsMapper.getSopUserLogsIds(param);
+        String[] ids = sopUserLogsIds.toArray(new String[0]);
+        param.setIds(ids);
+        processQwSopLogsBySendMsg(param,param.getDraftStrategy());
+        return null;
+    }
+
     @Override
     public List<SopUserLogsInfo> selectRestoreByIsDaysNotStudy(String sopId, String userLogsId) {
         return sopUserLogsInfoMapper.selectRestoreByIsDaysNotStudy(sopId, userLogsId);

+ 12 - 12
fs-service/src/main/java/com/fs/system/mapper/SysDictDataMapper.java

@@ -9,14 +9,14 @@ import org.apache.ibatis.annotations.Select;
 
 /**
  * 字典表 数据层
- * 
+ *
 
  */
 public interface SysDictDataMapper
 {
     /**
      * 根据条件分页查询字典数据
-     * 
+     *
      * @param dictData 字典数据信息
      * @return 字典数据集合信息
      */
@@ -24,7 +24,7 @@ public interface SysDictDataMapper
 
     /**
      * 根据字典类型查询字典数据
-     * 
+     *
      * @param dictType 字典类型
      * @return 字典数据集合信息
      */
@@ -32,7 +32,7 @@ public interface SysDictDataMapper
 
     /**
      * 根据字典类型和字典键值查询字典数据信息
-     * 
+     *
      * @param dictType 字典类型
      * @param dictValue 字典键值
      * @return 字典标签
@@ -41,7 +41,7 @@ public interface SysDictDataMapper
 
     /**
      * 根据字典数据ID查询信息
-     * 
+     *
      * @param dictCode 字典数据ID
      * @return 字典数据
      */
@@ -49,7 +49,7 @@ public interface SysDictDataMapper
 
     /**
      * 查询字典数据
-     * 
+     *
      * @param dictType 字典类型
      * @return 字典数据
      */
@@ -57,7 +57,7 @@ public interface SysDictDataMapper
 
     /**
      * 通过字典ID删除字典数据信息
-     * 
+     *
      * @param dictCode 字典数据ID
      * @return 结果
      */
@@ -65,7 +65,7 @@ public interface SysDictDataMapper
 
     /**
      * 批量删除字典数据信息
-     * 
+     *
      * @param dictCodes 需要删除的字典数据ID
      * @return 结果
      */
@@ -73,7 +73,7 @@ public interface SysDictDataMapper
 
     /**
      * 新增字典数据信息
-     * 
+     *
      * @param dictData 字典数据信息
      * @return 结果
      */
@@ -81,7 +81,7 @@ public interface SysDictDataMapper
 
     /**
      * 修改字典数据信息
-     * 
+     *
      * @param dictData 字典数据信息
      * @return 结果
      */
@@ -89,13 +89,13 @@ public interface SysDictDataMapper
 
     /**
      * 同步修改字典类型
-     * 
+     *
      * @param oldDictType 旧字典类型
      * @param newDictType 新旧字典类型
      * @return 结果
      */
     public int updateDictDataType(@Param("oldDictType") String oldDictType, @Param("newDictType") String newDictType);
-    @Select("select dict_type,dict_label,dict_value from sys_dict_data where dict_type =#{dictType}")
+    @Select("select dict_type,dict_label,dict_value from sys_dict_data where dict_type =#{dictType} and status = 0")
     List<DictVO> selectDictDataListByType(String dictType);
 
     SysDictData selectDictDataByTypeAndValue(@Param("type") String type, @Param("value") String value);

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

@@ -80,7 +80,7 @@ headerImg:
   imgUrl: https://ysy-1329817240.cos.ap-guangzhou.myqcloud.com/ysy/20250820/2c47e4f105b641b4a49df50a77338e32.png
 ipad:
   ipadUrl: http://ipad.ysya.top
-  aiApi:
+  aiApi: http://49.232.181.28:3000/api
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 6 - 0
fs-service/src/main/resources/mapper/course/FsCourseTrafficLogMapper.xml

@@ -255,6 +255,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="project != null">
                 and project = ${project}
             </if>
+            <if test="common == null">
+                AND company_id IS NULL
+            </if>
+            <if test="common != null ">
+                AND company_id IS NOT NULL
+            </if>
         </where>
 
         <if test="tabType==null or tabType==''">

+ 85 - 6
fs-service/src/main/resources/mapper/hisStore/FsStoreOrderScrmMapper.xml

@@ -882,14 +882,93 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <update id="batchUpdateInOrderCode">
         UPDATE fs_store_order_scrm
-        SET status = CASE
-        <foreach collection="dtoList" item="item" separator="">
-            WHEN order_code = #{item.orderNumber} THEN #{item.deliveryNoteStatus}
-        </foreach>
-        END
+        <set>
+            delivery_sn = CASE
+            <foreach collection="list" item="item">
+                WHEN order_code = #{item.orderNumber} THEN #{item.deliverySn}
+            </foreach>
+            ELSE delivery_sn
+            END,
+            delivery_name = CASE
+            <foreach collection="list" item="item">
+                WHEN order_code = #{item.orderNumber} THEN #{item.deliveryName}
+            </foreach>
+            ELSE delivery_name
+            END,
+            delivery_id = CASE
+            <foreach collection="list" item="item">
+                WHEN order_code = #{item.orderNumber} THEN #{item.deliveryId}
+            </foreach>
+            ELSE delivery_id
+            END,
+
+            delivery_status = CASE
+            <foreach collection="list" item="item">
+                WHEN order_code = #{item.orderNumber} THEN #{item.deliveryStatus}
+            </foreach>
+            ELSE delivery_status
+            END,
+
+            status = CASE
+            WHEN status = 1 THEN 2
+            ELSE status
+            END,
+
+            <if test="list != null and list.size() > 0 and list[0].deliveryPayMoney != null">
+                delivery_pay_money = CASE
+                <foreach collection="list" item="item">
+                    WHEN order_code = #{item.orderNumber} THEN #{item.deliveryPayMoney}
+                </foreach>
+                ELSE delivery_pay_money
+                END,
+            </if>
+
+            <if test="list != null and list.size() > 0 and list[0].deliveryType != null">
+                delivery_type = CASE
+                <foreach collection="list" item="item">
+                    WHEN order_code = #{item.orderNumber} THEN #{item.deliveryType}
+                </foreach>
+                ELSE delivery_type
+                END,
+            </if>
+
+            <if test="list != null and list.size() > 0 and list[0].deliveryPayStatus != null">
+                delivery_pay_status = CASE
+                <foreach collection="list" item="item">
+                    WHEN order_code = #{item.orderNumber} THEN #{item.deliveryPayStatus}
+                </foreach>
+                ELSE delivery_pay_status
+                END,
+            </if>
+
+            <if test="list != null and list.size() > 0 and list[0].deliveryTime != null">
+                delivery_time = CASE
+                <foreach collection="list" item="item">
+                    WHEN order_code = #{item.orderNumber} THEN #{item.deliveryTime}
+                </foreach>
+                ELSE delivery_time
+                END,
+            </if>
+
+            <if test="list != null and list.size() > 0 and list[0].deliveryPayTime != null">
+                delivery_pay_time = CASE
+                <foreach collection="list" item="item">
+                    WHEN order_code = #{item.orderNumber} THEN #{item.deliveryPayTime}
+                </foreach>
+                ELSE delivery_pay_time
+                END
+            </if>
+        </set>
         WHERE order_code IN
-        <foreach collection="dtoList" item="item" open="(" separator="," close=")">
+        <foreach collection="list" item="item" open="(" separator="," close=")">
             #{item.orderNumber}
         </foreach>
     </update>
+
+    <select id="selectStoreOrderScrmInId" resultType="com.fs.hisStore.domain.FsStoreOrderScrm">
+        <include refid="selectFsStoreOrderVo"/>
+        where id IN <foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
+            #{item}
+    </foreach>
+    </select>
 </mapper>

+ 55 - 0
fs-service/src/main/resources/mapper/hisStore/FsStoreRecommendScrmMapper.xml

@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fs.hisStore.mapper.FsStoreRecommendScrmMapper">
+
+    <resultMap type="FsStoreRecommendScrm" id="FsStoreRecommendScrmResult">
+        <result property="id" column="id"/>
+        <result property="storeId" column="store_id"/>
+        <result property="storeName" column="store_name"/>
+        <result property="sortOrder" column="sort_order"/>
+        <result property="beginTime" column="begin_time"/>
+        <result property="endTime" column="end_time"/>
+        <result property="recommendType" column="recommend_type"/>
+        <result property="status" column="status"/>
+        <result property="weight" column="weight"/>
+        <result property="recommendReason" column="recommend_reason"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="remark" column="remark"/>
+    </resultMap>
+
+    <sql id="selectFsStoreRecommendScrmVo">
+        select id, store_id, store_name, sort_order, begin_time, end_time, recommend_type, status, weight, recommend_reason, create_by, create_time, update_by, update_time, remark from fs_store_recommend_scrm
+    </sql>
+
+    <select id="selectFsStoreRecommendScrmList" parameterType="FsStoreRecommendScrm" resultMap="FsStoreRecommendScrmResult">
+        <include refid="selectFsStoreRecommendScrmVo"/>
+        <where>
+            <if test="storeId != null "> and store_id = #{storeId}</if>
+            <if test="storeName != null  and storeName != ''"> and store_name like concat('%', #{storeName}, '%')</if>
+            <if test="sortOrder != null "> and sort_order = #{sortOrder}</if>
+            <if test="beginTime != null "> and begin_time &gt;= #{beginTime}</if>
+            <if test="endTime != null "> and end_time &lt;= #{endTime}</if>
+            <if test="recommendType != null  and recommendType != ''"> and recommend_type = #{recommendType}</if>
+            <if test="status != null "> and status = #{status}</if>
+            <if test="weight != null "> and weight = #{weight}</if>
+        </where>
+        order by sort_order asc, weight desc, create_time desc
+    </select>
+
+    <select id="selectValidRecommendList" parameterType="FsStoreRecommendScrm" resultMap="FsStoreRecommendScrmResult">
+        <include refid="selectFsStoreRecommendScrmVo"/>
+        <where>
+            status = 1
+            and (begin_time is null or begin_time &lt;= now())
+            and (end_time is null or end_time &gt;= now())
+            <if test="recommendType != null  and recommendType != ''"> and recommend_type = #{recommendType}</if>
+        </where>
+        order by sort_order asc, weight desc, create_time desc
+    </select>
+
+</mapper>

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

@@ -216,9 +216,9 @@ public class AppLoginController extends AppBaseController{
             return R.error("用户数据不存在");
         }
         FsUser userMap = findUserByPhone(param.getPhone());
-        if (userMap!=null){
-            return R.error("该手机号已绑定其他账号");
-        }
+//        if (userMap!=null){
+//            return R.error("该手机号已绑定其他账号");
+//        }
         user.setPhone(param.getPhone());
         user.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null );
         user.setSource(param.getSource()!= null ? param.getSource() : null);

+ 20 - 12
fs-user-app/src/main/java/com/fs/app/controller/WxH5MpController.java

@@ -3,6 +3,7 @@ package com.fs.app.controller;
 import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import cn.hutool.core.date.DateTime;
+import com.fs.app.param.FsUserLoginByCourseMpParam;
 import com.fs.app.param.FsUserLoginByMpParam;
 import com.fs.app.utils.JwtUtils;
 import com.fs.common.core.domain.R;
@@ -101,22 +102,29 @@ public class WxH5MpController {
             WxOAuth2AccessToken wxMpOAuth2AccessToken = wxMpService.getOAuth2Service().getAccessToken(param.getCode());
             WxOAuth2UserInfo wxMpUser = wxMpService.getOAuth2Service().getUserInfo(wxMpOAuth2AccessToken, null);
 
-            // 处理用户信息
-            FsUser user = processUserInfo(wxMpUser, company,companyUser,param);
 
-            // 检查用户是否已绑定其他销售
-            FsUserCompanyUser userCompanyUser = userCompanyUserService.selectByUserIdAndProjectId(user.getUserId(), param.getProjectId());
-            if (Objects.nonNull(userCompanyUser) && !param.getCompanyUserId().equals(userCompanyUser.getCompanyUserId())){
-                return R.error(500, "该用户("+user.getUserId() + ")已成为其他销售会员");
-            }
+            //临时的手动和自动 融合
+            if (param.getProjectId() == null || param.getProjectId() == 0L) {
 
-//            // 处理用户与公司的关系
-//            processUserCompanyRelationship(user, param, companyUser, company);
+                // 处理用户信息
+                FsUser user = processUserInfoByCourseLoginByMp(wxMpUser);
+                // 生成token并返回结果
+                return generateLoginResult(user);
 
+            }else {
+                // 处理用户信息
+                FsUser user = processUserInfo(wxMpUser, company,companyUser,param);
+
+                // 检查用户是否已绑定其他销售
+                FsUserCompanyUser userCompanyUser = userCompanyUserService.selectByUserIdAndProjectId(user.getUserId(), param.getProjectId());
+                if (Objects.nonNull(userCompanyUser) && !param.getCompanyUserId().equals(userCompanyUser.getCompanyUserId())){
+                    return R.error(500, "该用户("+user.getUserId() + ")已成为其他销售会员");
+                }
+
+                return generateLoginResult(user);
+            }
 
 
-            // 生成token并返回结果
-            return generateLoginResult(user);
         } catch (WxErrorException e) {
             this.logger.error(e.getMessage(), e);
             return R.error("授权失败," + e.getMessage());
@@ -125,7 +133,7 @@ public class WxH5MpController {
 
     @ApiOperation("炮灰小程序-公众号登录转小程序")
     @PostMapping("/courseLoginByMp")
-    public R courseLoginByMp(@Valid @RequestBody FsUserLoginByMpParam param) {
+    public R courseLoginByMp(@Valid @RequestBody FsUserLoginByCourseMpParam param) {
         log.info("=====================进入炮灰小程序-公众号授权登录, 入参: {}", param);
 
         // 参数校验

+ 3 - 3
fs-user-app/src/main/java/com/fs/app/controller/store/AppLoginScrmController.java

@@ -184,9 +184,9 @@ public class AppLoginScrmController extends AppBaseController {
             return R.error("用户数据不存在");
         }
         FsUserScrm userMap = userService.selectFsUserByPhone(param.getPhone());
-        if (userMap!=null){
-            return R.error("该手机号已绑定其他账号");
-        }
+//        if (userMap!=null){
+//            return R.error("该手机号已绑定其他账号");
+//        }
         user.setPhone(param.getPhone());
         userMap = new FsUserScrm();
         userMap.setUserId(user.getUserId());

+ 91 - 0
fs-user-app/src/main/java/com/fs/app/controller/store/FsUserComplaintController.java

@@ -0,0 +1,91 @@
+package com.fs.app.controller.store;
+
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.user.domain.FsUserComplaint;
+import com.fs.user.service.IFsUserComplaintService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 用户投诉Controller
+ *
+ * @author fs
+ * @date 2025-08-27
+ */
+@RestController
+@RequestMapping("/store/app/user/complaint")
+public class FsUserComplaintController extends BaseController
+{
+    @Autowired
+    private IFsUserComplaintService fsUserComplaintService;
+
+    /**
+     * 查询用户投诉列表
+     */
+    @GetMapping("/list")
+    public TableDataInfo list(FsUserComplaint fsUserComplaint)
+    {
+        startPage();
+        List<FsUserComplaint> list = fsUserComplaintService.selectFsUserComplaintList(fsUserComplaint);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出用户投诉列表
+     */
+    @Log(title = "用户投诉", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(FsUserComplaint fsUserComplaint)
+    {
+        List<FsUserComplaint> list = fsUserComplaintService.selectFsUserComplaintList(fsUserComplaint);
+        ExcelUtil<FsUserComplaint> util = new ExcelUtil<FsUserComplaint>(FsUserComplaint.class);
+        return util.exportExcel(list, "用户投诉数据");
+    }
+
+    /**
+     * 获取用户投诉详细信息
+     */
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(fsUserComplaintService.selectFsUserComplaintById(id));
+    }
+
+    /**
+     * 新增用户投诉
+     */
+    @Log(title = "用户投诉", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FsUserComplaint fsUserComplaint)
+    {
+        return toAjax(fsUserComplaintService.insertFsUserComplaint(fsUserComplaint));
+    }
+
+    /**
+     * 修改用户投诉
+     */
+    @Log(title = "用户投诉", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsUserComplaint fsUserComplaint)
+    {
+        return toAjax(fsUserComplaintService.updateFsUserComplaint(fsUserComplaint));
+    }
+
+    /**
+     * 删除用户投诉
+     */
+    @Log(title = "用户投诉", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(fsUserComplaintService.deleteFsUserComplaintByIds(ids));
+    }
+}

+ 94 - 0
fs-user-app/src/main/java/com/fs/app/controller/store/StoreRecommendScrmController.java

@@ -0,0 +1,94 @@
+package com.fs.app.controller.store;
+
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.annotation.Log;
+import com.fs.common.enums.BusinessType;
+import com.fs.hisStore.domain.FsStoreRecommendScrm;
+import com.fs.hisStore.service.IFsStoreRecommendScrmService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 店铺推荐Controller
+ *
+ * @author fs
+ * @date 2023-06-15
+ */
+@RestController
+@RequestMapping("/store/app/recommend")
+public class StoreRecommendScrmController extends BaseController
+{
+    @Autowired
+    private IFsStoreRecommendScrmService fsStoreRecommendService;
+
+    /**
+     * 查询店铺推荐列表
+     */
+    @PreAuthorize("@ss.hasPermi('store:recommend:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FsStoreRecommendScrm fsStoreRecommendScrm)
+    {
+        startPage();
+        List<FsStoreRecommendScrm> list = fsStoreRecommendService.selectFsStoreRecommendScrmList(fsStoreRecommendScrm);
+        return getDataTable(list);
+    }
+
+    /**
+     * 获取店铺推荐详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('store:recommend:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(fsStoreRecommendService.selectFsStoreRecommendScrmById(id));
+    }
+
+    /**
+     * 新增店铺推荐
+     */
+    @PreAuthorize("@ss.hasPermi('store:recommend:add')")
+    @Log(title = "店铺推荐", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FsStoreRecommendScrm fsStoreRecommendScrm)
+    {
+        return toAjax(fsStoreRecommendService.insertFsStoreRecommendScrm(fsStoreRecommendScrm));
+    }
+
+    /**
+     * 修改店铺推荐
+     */
+    @PreAuthorize("@ss.hasPermi('store:recommend:edit')")
+    @Log(title = "店铺推荐", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsStoreRecommendScrm fsStoreRecommendScrm)
+    {
+        return toAjax(fsStoreRecommendService.updateFsStoreRecommendScrm(fsStoreRecommendScrm));
+    }
+
+    /**
+     * 删除店铺推荐
+     */
+    @PreAuthorize("@ss.hasPermi('store:recommend:remove')")
+    @Log(title = "店铺推荐", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(fsStoreRecommendService.deleteFsStoreRecommendScrmByIds(ids));
+    }
+
+    /**
+     * 查询有效的推荐店铺列表(用于前端展示)
+     */
+    @GetMapping("/validList")
+    public TableDataInfo validList(FsStoreRecommendScrm fsStoreRecommendScrm)
+    {
+        startPage();
+        List<FsStoreRecommendScrm> list = fsStoreRecommendService.selectValidRecommendList(fsStoreRecommendScrm);
+        return getDataTable(list);
+    }
+}

+ 115 - 0
fs-user-app/src/main/java/com/fs/app/controller/store/StoreScrmController.java

@@ -0,0 +1,115 @@
+package com.fs.app.controller.store;
+
+import com.fs.app.annotation.Login;
+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.page.TableDataInfo;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.ParseUtils;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.his.param.FsStoreAuditParam;
+import com.fs.hisStore.domain.FsStoreScrm;
+import com.fs.hisStore.service.IFsStoreScrmService;
+import com.fs.hisStore.utils.StoreAuditLogUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 店铺管理Controller
+ *
+ * @author fs
+ * @date 2023-06-15
+ */
+@RestController
+@RequestMapping("/store/app/store")
+public class StoreScrmController extends BaseController
+{
+    @Autowired
+    private IFsStoreScrmService fsStoreService;
+
+    @Autowired
+    private StoreAuditLogUtil storeAuditLogUtil;
+
+
+    /**
+     * 查询店铺管理列表
+     */
+    @GetMapping("/list")
+    public TableDataInfo list(FsStoreScrm fsStore)
+    {
+        startPage();
+        List<FsStoreScrm> list = fsStoreService.selectFsStoreList(fsStore);
+        for (FsStoreScrm store : list) {
+            store.setPhone(ParseUtils.parsePhone(store.getPhone()));
+        }
+        return getDataTable(list);
+    }
+
+    /**
+     * 获取店铺管理详细信息
+     */
+    //@Login
+    @GetMapping(value = "/{storeId}")
+    public AjaxResult getInfo(@PathVariable("storeId") Long storeId)
+    {
+        FsStoreScrm fsStore = fsStoreService.selectFsStoreByStoreId(storeId);
+        fsStore.setPhone(ParseUtils.parsePhone(fsStore.getPhone()));
+        return AjaxResult.success(fsStore);
+    }
+
+    /**
+     * 新增店铺管理
+     */
+    //@Login
+    @Log(title = "店铺管理", businessType = BusinessType.INSERT,logParam = {"店铺","新增店铺信息"},isStoreLog = true)
+    @PostMapping
+    public AjaxResult add(@RequestBody FsStoreScrm fsStore)
+    {
+        storeAuditLogUtil.addOperLog(fsStoreService.insertFsStore(fsStore));
+        return AjaxResult.success();
+    }
+
+    /**
+     * 修改店铺管理
+     */
+    //@Login
+    @Log(title = "店铺管理", businessType = BusinessType.UPDATE,logParam = {"店铺","修改店铺信息"},isStoreLog = true)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsStoreScrm fsStore)
+    {
+
+        if (fsStore.getPhone()!=null&&fsStore.getPhone().contains("*")){
+            fsStore.setPhone(null);
+        }
+        return toAjax(fsStoreService.updateFsStore(fsStore));
+    }
+
+    /**
+     * 删除店铺管理
+     */
+    //@Login
+    @Log(title = "店铺管理", businessType = BusinessType.DELETE,logParam = {"店铺","删除店铺信息"},isStoreLog = true)
+	@DeleteMapping("/{storeIds}")
+    public AjaxResult remove(@PathVariable Long[] storeIds)
+    {
+        return toAjax(fsStoreService.deleteFsStoreByStoreIds(storeIds));
+    }
+
+    /**
+     * 重置店铺密码
+     * */
+    //@Login
+    @Log(title = "店铺管理", businessType = BusinessType.UPDATE,logParam = {"店铺","重置店铺密码"},isStoreLog = true)
+    @PutMapping("/refresh/{storeId}")
+    public AjaxResult refresh(Long storeId)
+    {
+        return toAjax(fsStoreService.refreshFsStore(storeId));
+    }
+
+
+}

+ 30 - 0
fs-user-app/src/main/java/com/fs/app/param/FsUserLoginByCourseMpParam.java

@@ -0,0 +1,30 @@
+package com.fs.app.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+@Data
+public class FsUserLoginByCourseMpParam implements Serializable {
+    @NotBlank(message = "code参数缺失")
+    private String code;
+    private Long videoId;
+
+    @NotNull(message = "公司id不能为空")
+    @ApiModelProperty(value = "公司id")
+    private Long companyId;
+
+    @NotNull(message = "销售id不能为空")
+    @ApiModelProperty(value = "销售id")
+    private Long companyUserId;
+
+    private String appId;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+}

+ 2 - 1
fs-user-app/src/main/java/com/fs/app/param/FsUserLoginByMpParam.java

@@ -20,7 +20,8 @@ public class FsUserLoginByMpParam implements Serializable {
     @NotNull(message = "销售id不能为空")
     @ApiModelProperty(value = "销售id")
     private Long companyUserId;
-    @NotNull(message = "项目ID不能为空")
+
+//    @NotNull(message = "项目ID不能为空")
     @ApiModelProperty(value = "项目ID")
     private Long projectId;
 

Деякі файли не було показано, через те що забагато файлів було змінено