Browse Source

Merge remote-tracking branch 'origin/master'

zyp 3 ngày trước cách đây
mục cha
commit
44f7270b8b
26 tập tin đã thay đổi với 415 bổ sung11 xóa
  1. 10 0
      fs-admin/src/main/java/com/fs/store/controller/FsStoreOrderAuditController.java
  2. 6 2
      fs-admin/src/main/java/com/fs/store/controller/FsStoreStatisticsController.java
  3. 28 1
      fs-admin/src/main/java/com/fs/web/controller/system/SysConfigController.java
  4. 6 0
      fs-company/src/main/java/com/fs/company/controller/CompanyUserController.java
  5. 10 0
      fs-company/src/main/java/com/fs/store/controller/FsStoreOrderAuditController.java
  6. 55 3
      fs-company/src/main/java/com/fs/store/controller/FsStoreStatisticsController.java
  7. 3 0
      fs-service-system/src/main/java/com/fs/company/mapper/CompanyUserMapper.java
  8. 8 0
      fs-service-system/src/main/java/com/fs/company/service/ICompanyUserService.java
  9. 12 0
      fs-service-system/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java
  10. 3 0
      fs-service-system/src/main/java/com/fs/crm/mapper/CrmCustomerMapper.java
  11. 3 0
      fs-service-system/src/main/java/com/fs/crm/param/CrmLineCustomerListQueryParam.java
  12. 3 0
      fs-service-system/src/main/java/com/fs/store/mapper/FsStoreOrderAuditMapper.java
  13. 11 2
      fs-service-system/src/main/java/com/fs/store/mapper/FsStoreOrderMapper.java
  14. 27 0
      fs-service-system/src/main/java/com/fs/store/param/FsStoreOrderAuditParam.java
  15. 7 0
      fs-service-system/src/main/java/com/fs/store/param/FsStoreOrderParam.java
  16. 8 0
      fs-service-system/src/main/java/com/fs/store/param/FsStoreStatisticsParam.java
  17. 1 0
      fs-service-system/src/main/java/com/fs/store/param/LoginMpWxParam.java
  18. 2 0
      fs-service-system/src/main/java/com/fs/store/service/IFsStoreOrderAuditService.java
  19. 104 0
      fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreOrderAuditServiceImpl.java
  20. 21 0
      fs-service-system/src/main/java/com/fs/store/vo/FsStoreOrderAuditVO.java
  21. 5 0
      fs-service-system/src/main/java/com/fs/store/vo/FsStoreOrderVO.java
  22. 1 0
      fs-service-system/src/main/resources/application-config-bly.yml
  23. 38 0
      fs-service-system/src/main/resources/mapper/store/FsStoreOrderAuditMapper.xml
  24. 12 1
      fs-service-system/src/main/resources/mapper/store/FsStoreOrderMapper.xml
  25. 23 1
      fs-user-app/src/main/java/com/fs/app/controller/IndexController.java
  26. 8 1
      fs-user-app/src/main/java/com/fs/app/controller/WxUserController.java

+ 10 - 0
fs-admin/src/main/java/com/fs/store/controller/FsStoreOrderAuditController.java

@@ -4,6 +4,7 @@ import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.domain.entity.SysUser;
 import com.fs.common.core.page.TableDataInfo;
+import com.fs.company.domain.CompanyUser;
 import com.fs.core.security.SecurityUtils;
 import com.fs.store.param.FsStoreOrderAuditParam;
 import com.fs.store.param.FsStoreOrderAuditReviewParam;
@@ -15,6 +16,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 import java.util.List;
+import java.util.Map;
 
 @RestController
 @RequestMapping("/store/storeOrderAudit")
@@ -38,4 +40,12 @@ public class FsStoreOrderAuditController extends BaseController {
         fsStoreOrderAuditService.audit(param, user.getUserId(), true);
         return AjaxResult.success();
     }
+
+    @PreAuthorize("@ss.hasAnyPermi('store:storeOrderAudit:auditBatch')")
+    @GetMapping("/auditBatch")
+    public AjaxResult auditBatch(@RequestParam("ids") String ids) {
+        SysUser user = SecurityUtils.getLoginUser().getUser();
+        fsStoreOrderAuditService.auditBatch(ids, user.getUserId(), true);
+        return AjaxResult.success();
+    }
 }

+ 6 - 2
fs-admin/src/main/java/com/fs/store/controller/FsStoreStatisticsController.java

@@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -73,12 +74,15 @@ public class FsStoreStatisticsController extends BaseController
                 timeList.add(beginTime);
                 beginTime = TimeUtils.formatTime(beginTime);
             }
-            List<JSONObject> jsonObjectList = storeOrderService.selectFsStoreOrderCounts(timeEntity.toMap());
+            Map<String, Object> map = timeEntity.toMap();
+            map.put("orderType",param.getOrderType());
+            map.put("orderMedium",param.getOrderMedium());
+            List<JSONObject> jsonObjectList = storeOrderService.selectFsStoreOrderCounts(map);
             List<String> dates = jsonObjectList.stream().map(jsonObject -> jsonObject.getString("type")).collect(Collectors.toList());
             List<Integer> orderCount = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("orderCount")).collect(Collectors.toList());
             List<Integer> payPrice = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("payPrice")).collect(Collectors.toList());
             //表格数据
-            List<FsStoreOrderCountsVO> tableData = storeOrderService.selectFsStoreOrderCountsByDept(timeEntity.toMap(),param.getDeptId());
+            List<FsStoreOrderCountsVO> tableData = storeOrderService.selectFsStoreOrderCountsByDept(map,param.getDeptId());
             return R.ok().put("dates",dates).put("orderCount",orderCount).put("payPrice",payPrice).put("tableData",tableData);
         }
         else {

+ 28 - 1
fs-admin/src/main/java/com/fs/web/controller/system/SysConfigController.java

@@ -1,11 +1,14 @@
 package com.fs.web.controller.system;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.RepeatSubmit;
 import com.fs.common.constant.UserConstants;
 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.core.redis.RedisCache;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.core.security.SecurityUtils;
@@ -29,7 +32,8 @@ public class SysConfigController extends BaseController
 {
     @Autowired
     private ISysConfigService configService;
-
+    @Autowired
+    private RedisCache redisCache;
     /**
      * 获取参数配置列表
      */
@@ -144,4 +148,27 @@ public class SysConfigController extends BaseController
         configService.clearCache();
         return AjaxResult.success();
     }
+
+    /**
+     * 启用-关闭小程序销售管理
+     * @param bock
+     * @return
+     */
+    @GetMapping("/updateIsTownOn")
+    public R queryIsTownOn(String bock, String appId)
+    {
+        String key = appId+"start_status_001";
+        String start = redisCache.getCacheObject(key);
+        if (ObjectUtil.isNotEmpty(bock)){
+            if (bock.equals("001")){
+                redisCache.setCacheObject(key,bock);
+                return R.ok("调整成功");
+            }else if (bock.equals("002")){
+                redisCache.setCacheObject(key,bock);
+                return R.ok("调整成功");
+            }
+
+        }
+        return R.ok().put("date",start);
+    }
 }

+ 6 - 0
fs-company/src/main/java/com/fs/company/controller/CompanyUserController.java

@@ -78,6 +78,12 @@ public class CompanyUserController extends BaseController {
         return getDataTable(list);
     }
 
+    @GetMapping("/getAllCompanyUserName")
+    public R getAllCompanyUserName() {
+        List<CompanyUser> list = companyUserService.selectCompanyUserListName();
+        return R.ok().put("data", list);
+    }
+
     @GetMapping("/qwList")
     public TableDataInfo qwList(CompanyUserQwParam user) {
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());

+ 10 - 0
fs-company/src/main/java/com/fs/store/controller/FsStoreOrderAuditController.java

@@ -2,6 +2,7 @@ package com.fs.store.controller;
 
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.entity.SysUser;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.company.domain.CompanyUser;
 import com.fs.core.security.SecurityUtils;
@@ -15,6 +16,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 import java.util.List;
+import java.util.Map;
 
 @RestController
 @RequestMapping("/store/storeOrderAudit")
@@ -40,4 +42,12 @@ public class FsStoreOrderAuditController extends BaseController {
         fsStoreOrderAuditService.audit(param, user.getUserId(), false);
         return AjaxResult.success();
     }
+
+    @PreAuthorize("@ss.hasAnyPermi('store:storeOrderAudit:auditBatch')")
+    @GetMapping("/auditBatch")
+    public AjaxResult auditBatch(@RequestParam("ids") String ids) {
+        CompanyUser user = SecurityUtils.getLoginUser().getUser();
+        fsStoreOrderAuditService.auditBatch(ids, user.getUserId(), false);
+        return AjaxResult.success();
+    }
 }

+ 55 - 3
fs-company/src/main/java/com/fs/store/controller/FsStoreStatisticsController.java

@@ -10,11 +10,13 @@ import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.service.ICompanyUserService;
 import com.fs.core.web.service.TokenService;
+import com.fs.store.vo.FsStoreOrderCountsVO;
 import com.fs.store.vo.FsStoreOrderStatisticsVO;
 import com.fs.store.param.FsStoreStatisticsParam;
 import com.fs.store.service.IFsStoreOrderService;
 import com.fs.store.service.IFsStorePaymentService;
 import com.fs.store.vo.FsStorePaymentStatisticsVO;
+import com.fs.store.vo.FsStoreProductCountsVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -23,6 +25,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -66,9 +69,54 @@ public class FsStoreStatisticsController extends BaseController
             param.setUsers(userIds.toArray(new Long[userIds.size()]));
         }
         if(param.getUsers()!=null&&param.getUsers().length>0){
-            List<FsStoreOrderStatisticsVO> list= storeOrderService.selectFsStoreOrderStatisticsList(param);
+            TimeUtils.TimeEntity timeEntity=TimeUtils.parseTime(param.getType()==null?null:param.getType().toString(),param.getStartTime(),param.getEndTime());
+            timeEntity.setUserIds(param.getUsers());
+            Integer cycleNum = timeEntity.getCycleNum();
+            Integer beginTime = timeEntity.getBeginTime();
+            List<Integer> timeList = new ArrayList<>();
+            for (int i = 1; i <= cycleNum; i++) {
+                timeList.add(beginTime);
+                beginTime = TimeUtils.formatTime(beginTime);
+            }
+            Map<String, Object> map = timeEntity.toMap();
+            map.put("orderType",param.getOrderType());
+            map.put("orderMedium",param.getOrderMedium());
+            List<JSONObject> jsonObjectList = storeOrderService.selectFsStoreOrderCounts(map);
+            List<String> dates = jsonObjectList.stream().map(jsonObject -> jsonObject.getString("type")).collect(Collectors.toList());
+            List<Integer> orderCount = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("orderCount")).collect(Collectors.toList());
+            List<Integer> payPrice = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("payPrice")).collect(Collectors.toList());
+            //表格数据
+            List<FsStoreOrderCountsVO> tableData = storeOrderService.selectFsStoreOrderCountsByDept(map,param.getDeptId());
+            return R.ok().put("dates",dates).put("orderCount",orderCount).put("payPrice",payPrice).put("tableData",tableData);
+        }
+        else {
+            return R.ok("未查找到数据");
+        }
+    }
 
-            TimeUtils.TimeEntity timeEntity=TimeUtils.parseTime(param.getType().toString(),param.getStartTime(),param.getEndTime());
+
+    @PreAuthorize("@ss.hasPermi('store:statistics:storeProduct')")
+    @GetMapping("/storeProduct")
+    public R storeProduct(FsStoreStatisticsParam param)
+    {
+        if(StringUtils.isNotEmpty(param.getUserIds())){
+            String[] userIds=param.getUserIds().split(",");
+            Long[] ids=new Long[userIds.length];
+            for(int i=0;i<ids.length; i++){
+                ids[i]=Long.parseLong(userIds[i]);
+            }
+            param.setUsers(ids);
+        }
+        else{
+            //获取部门下的所有用户
+            CompanyUser usermap=new CompanyUser();
+            usermap.setDeptId(param.getDeptId());
+            List<CompanyUser> users = userService.getUserListByDeptId(usermap);
+            List<Long> userIds = users.stream().map(element -> element.getUserId()).collect(Collectors.toList());
+            param.setUsers(userIds.toArray(new Long[userIds.size()]));
+        }
+        if(param.getUsers()!=null&&param.getUsers().length>0){
+            TimeUtils.TimeEntity timeEntity=TimeUtils.parseTime(param.getType()==null?null:param.getType().toString(),param.getStartTime(),param.getEndTime());
             timeEntity.setUserIds(param.getUsers());
             Integer cycleNum = timeEntity.getCycleNum();
             Integer beginTime = timeEntity.getBeginTime();
@@ -81,12 +129,16 @@ public class FsStoreStatisticsController extends BaseController
             List<String> dates = jsonObjectList.stream().map(jsonObject -> jsonObject.getString("type")).collect(Collectors.toList());
             List<Integer> orderCount = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("orderCount")).collect(Collectors.toList());
             List<Integer> payPrice = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("payPrice")).collect(Collectors.toList());
-            return R.ok().put("list",list).put("dates",dates).put("orderCount",orderCount).put("payPrice",payPrice);
+            //表格数据
+            List<FsStoreProductCountsVO> tableData = storeOrderService.selectFsStoreProductCountsByDept(timeEntity.toMap(),param.getDeptId());
+            return R.ok().put("dates",dates).put("orderCount",orderCount).put("payPrice",payPrice).put("tableData",tableData);
         }
         else {
             return R.ok("未查找到数据");
         }
     }
+
+
     @PreAuthorize("@ss.hasPermi('store:statistics:exportStoreOrder')")
     @GetMapping("/exportStoreOrder")
     public AjaxResult exportStoreOrder(FsStoreStatisticsParam param)

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

@@ -300,4 +300,7 @@ public interface CompanyUserMapper
 
     @Select("select user_id,company_id from company_user")
     List<CompanyUser> selectAllCompanyUser();
+
+    @Select("select user_id,nick_name from company_user")
+    List<CompanyUser> selectCompanyUserListName();
 }

+ 8 - 0
fs-service-system/src/main/java/com/fs/company/service/ICompanyUserService.java

@@ -217,4 +217,12 @@ public interface ICompanyUserService {
 
     List<CompanyUser> getAllCompanyUser();
 
+    /**
+     * @Description: 获取全员工姓名列表
+     * @Param:
+     * @Return:
+     * @Author xgb
+     * @Date 2025/9/9 11:29
+     */
+    List<CompanyUser> selectCompanyUserListName();
 }

+ 12 - 0
fs-service-system/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java

@@ -550,6 +550,18 @@ public class CompanyUserServiceImpl implements ICompanyUserService
         return companyUserMapper.selectAllCompanyUserList();
     }
 
+    /**
+     * @Description: 获取公司用户名称
+     * @Param:
+     * @Return:
+     * @Author xgb
+     * @Date 2025/9/9 11:30
+     */
+    @Override
+    public List<CompanyUser> selectCompanyUserListName() {
+        return companyUserMapper.selectCompanyUserListName();
+    }
+
     /**
      * 批量审核用户
      * @param userIds 用户ID集合

+ 3 - 0
fs-service-system/src/main/java/com/fs/crm/mapper/CrmCustomerMapper.java

@@ -279,6 +279,9 @@ public interface CrmCustomerMapper extends BaseMapper<CrmCustomer>
             "<if test = 'maps.customerLevel != null'> " +
             "and c.customer_level =#{maps.customerLevel} " +
             "</if>" +
+            "<if test = 'maps.companyUserNickName != null and  maps.companyUserNickName !=\"\"    '> " +
+            "and u.nick_name like CONCAT('%',#{maps.companyUserNickName},'%') " +
+            "</if>" +
             " order by c.is_top desc,c.customer_id desc "+
             "</script>"})
     List<CrmLineCustomerListQueryVO> selectCrmLineCustomerListQuery(@Param("maps")CrmLineCustomerListQueryParam param);

+ 3 - 0
fs-service-system/src/main/java/com/fs/crm/param/CrmLineCustomerListQueryParam.java

@@ -88,4 +88,7 @@ public class CrmLineCustomerListQueryParam extends BaseQueryParam
 
     /** 客户级别 */
     private Long customerLevel;
+
+    /** 员工姓名 */
+    private String companyUserNickName;
 }

+ 3 - 0
fs-service-system/src/main/java/com/fs/store/mapper/FsStoreOrderAuditMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.store.domain.FsStoreOrderAudit;
 import com.fs.store.param.FsStoreOrderAuditParam;
 import com.fs.store.vo.FsStoreOrderAuditVO;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -15,4 +16,6 @@ public interface FsStoreOrderAuditMapper extends BaseMapper<FsStoreOrderAudit> {
      * @return  list
      */
     List<FsStoreOrderAuditVO> selectStoreOrderAuditVOList(FsStoreOrderAuditParam param);
+
+    void updateBatchAudit(@Param("entity") FsStoreOrderAudit entity,@Param("ids") List<Long> ids);
 }

+ 11 - 2
fs-service-system/src/main/java/com/fs/store/mapper/FsStoreOrderMapper.java

@@ -77,12 +77,19 @@ public interface FsStoreOrderMapper
     public int deleteFsStoreOrderByIds(Long[] ids);
 
     @Select({"<script> " +
-            "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   from fs_store_order o left join fs_user u on o.user_id=u.user_id  left join company c on c.company_id=o.company_id left join company_user cu on cu.user_id=o.company_user_id  " +
+            "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,fsoa.audit_status   from fs_store_order o left join fs_user u on o.user_id=u.user_id  left join company c on c.company_id=o.company_id left join company_user cu on cu.user_id=o.company_user_id  " +
+            "left join fs_store_order_audit fsoa on fsoa.order_id = o.id " +
             "<if test = 'maps.productName != null and  maps.productName !=  \"\" '> " +
             "left join fs_store_order_item oi on o.id = oi.order_id "+
             "left join fs_store_product fsp on fsp.product_id = oi.product_id"+
             "</if>" +
             "where 1=1 " +
+            " <if test = 'maps.payPrice != null and  maps.payPrice !=  \"\" '> " +
+            "and o.pay_price = #{maps.payPrice} " +
+            "</if>" +
+            "<if test = 'maps.orderMedium != null  '> " +
+            "and o.order_medium = #{maps.orderMedium} " +
+            "</if>" +
             "<if test = 'maps.orderCode != null and  maps.orderCode !=\"\"    '> " +
             "and o.order_code like CONCAT('%',#{maps.orderCode},'%') " +
             "</if>" +
@@ -153,7 +160,9 @@ public interface FsStoreOrderMapper
             " AND date_format(o.create_time,'%y%m%d') &gt;= date_format(#{maps.createTimeList[0]},'%y%m%d') " +
             " AND date_format(o.create_time,'%y%m%d') &lt;= date_format(#{maps.createTimeList[1]},'%y%m%d') " +
             "</if>" +
-
+            "<if test='maps.auditStatus !=null '>" +
+            "AND fsoa.audit_status = #{maps.auditStatus} " +
+            "</if>" +
             "<if test = 'maps.deliverySendTimeList != null    '> " +
             " AND date_format(o.delivery_send_time,'%y%m%d') &gt;= date_format(#{maps.deliverySendTimeList[0]},'%y%m%d') " +
             " AND date_format(o.delivery_send_time,'%y%m%d') &lt;= date_format(#{maps.deliverySendTimeList[1]},'%y%m%d') " +

+ 27 - 0
fs-service-system/src/main/java/com/fs/store/param/FsStoreOrderAuditParam.java

@@ -2,6 +2,8 @@ package com.fs.store.param;
 
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 @Data
 public class FsStoreOrderAuditParam {
     /**
@@ -16,4 +18,29 @@ public class FsStoreOrderAuditParam {
      * 审核状态
      */
     private Integer auditStatus;
+
+    /**
+     * 收件人
+     */
+    private  String realName;
+    /**
+     * 手机号
+     */
+    private String userPhone;
+
+    /* 订单创建 */
+    private String beginTime;
+
+    private String endTime;
+
+    private String auditBeginTime;
+
+    private String auditEndTime;
+
+    private BigDecimal orderAmountSmall;
+
+    private BigDecimal orderAmountBig;
+
+    /* 订单类型 */
+    private String orderType;
 }

+ 7 - 0
fs-service-system/src/main/java/com/fs/store/param/FsStoreOrderParam.java

@@ -5,6 +5,7 @@ import com.fs.common.core.domain.BaseEntity;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 @Data
 public class FsStoreOrderParam extends BaseEntity implements Serializable
@@ -86,5 +87,11 @@ public class FsStoreOrderParam extends BaseEntity implements Serializable
      * 支付状态 待支付 1已支付
      */
     private Integer paidStatus;
+    /* 实收金额 */
+    private BigDecimal payPrice;
+    /* 媒体来源 */
+    private Integer orderMedium;
+    /* 审核状态 */
+    private Integer auditStatus;
 
 }

+ 8 - 0
fs-service-system/src/main/java/com/fs/store/param/FsStoreStatisticsParam.java

@@ -14,6 +14,14 @@ public class FsStoreStatisticsParam implements Serializable
     String startTime;
     String endTime;
     Long deptId;
+    /**
+     * 订单类型 字典表字段
+     */
+    String orderType;
+    /**
+     * 来源媒体 字典表字段
+     */
+    String orderMedium;
 
 
 }

+ 1 - 0
fs-service-system/src/main/java/com/fs/store/param/LoginMpWxParam.java

@@ -23,6 +23,7 @@ public class LoginMpWxParam implements Serializable {
     private String signature;
 
     private String userCode;
+    private String appId;
 
 
 }

+ 2 - 0
fs-service-system/src/main/java/com/fs/store/service/IFsStoreOrderAuditService.java

@@ -24,4 +24,6 @@ public interface IFsStoreOrderAuditService extends IService<FsStoreOrderAudit> {
      * @param isAdmin 是否管理端
      */
     void audit(FsStoreOrderAuditReviewParam param, Long userId, boolean isAdmin);
+
+    void auditBatch(String ids, Long userId, boolean b);
 }

+ 104 - 0
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreOrderAuditServiceImpl.java

@@ -17,8 +17,10 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
@@ -36,9 +38,15 @@ public class FsStoreOrderAuditServiceImpl extends ServiceImpl<FsStoreOrderAuditM
         return baseMapper.selectStoreOrderAuditVOList(param);
     }
 
+
+
     /**
      * 审核
      *
+     * 2025-09-12
+     * 倍力优审核只需销售审核,审核一次  不需要两次审核,做需求改造
+     * 去掉总后台审核
+     *
      * @param param   参数
      * @param userId  用户ID
      * @param isAdmin 是否管理端
@@ -46,6 +54,102 @@ public class FsStoreOrderAuditServiceImpl extends ServiceImpl<FsStoreOrderAuditM
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void audit(FsStoreOrderAuditReviewParam param, Long userId, boolean isAdmin) {
+        FsStoreOrderAudit fsStoreOrderAudit = baseMapper.selectById(param.getAuditId());
+        if (Objects.isNull(fsStoreOrderAudit)) {
+            throw new CustomException("记录不存在");
+        }
+        OrderAuditStateEnum orderAuditStateEnum = OrderAuditStateEnum.getOrderAuditStateEnum(fsStoreOrderAudit.getAuditStatus());
+        if (OrderAuditStateEnum.COMPANY_PENDING != orderAuditStateEnum) {
+            throw new CustomException("请勿重复审核");
+        }
+
+        LocalDateTime now = LocalDateTime.now();
+        OrderAuditStateEnum newStatus;
+        String message;
+        if (param.getReviewType() == 1) { // 审核通过
+            newStatus = OrderAuditStateEnum.APPROVED;
+            message = "审核通过";
+        } else { // 审核拒绝
+            newStatus = OrderAuditStateEnum.COMPANY_REJECT;
+
+            if (StringUtils.isBlank(param.getReviewContent())) {
+                throw new CustomException("被拒原因不能为空");
+            }
+            // 拒绝原因放在备注 中 订单查询展示 xgb修改 20250915
+            message = "销售:审核拒绝;"+param.getReviewContent();
+            fsStoreOrderAudit.setReason(param.getReviewContent());
+        }
+
+
+        fsStoreOrderAudit.setCompanyAuditTime(now);
+        fsStoreOrderAudit.setCompanyAuditUserId(userId);
+        fsStoreOrderAudit.setAuditStatus(newStatus.getValue());
+
+        baseMapper.updateById(fsStoreOrderAudit);
+
+        FsStoreOrderAuditLog auditLog = new FsStoreOrderAuditLog();
+        auditLog.setAuditId(fsStoreOrderAudit.getId());
+        auditLog.setOrderId(fsStoreOrderAudit.getOrderId());
+        auditLog.setContent(message);
+        auditLog.setCreateTime(LocalDateTime.now());
+        fsStoreOrderAuditLogService.save(auditLog);
+    }
+
+    /**
+     * @Description: 批量 审核
+     * @Param:
+     * @Return:
+     * @Author xgb
+     * @Date 2025/9/12 15:23
+     */
+
+    @Override
+    @Transactional
+    public void auditBatch(String ids, Long userId, boolean b) {
+        // 查询订单审核列表 判断都为待审核状态
+        List<FsStoreOrderAudit> list = baseMapper.selectBatchIds(Arrays.asList(StringUtils.split(ids, ",")));
+        if (list.stream().anyMatch(item -> OrderAuditStateEnum.getOrderAuditStateEnum(item.getAuditStatus()) != OrderAuditStateEnum.COMPANY_PENDING)) {
+            throw new CustomException("请勿重复审核");
+        }
+
+        // 批量更新状态
+        FsStoreOrderAudit update = new FsStoreOrderAudit();
+        update.setAuditStatus(OrderAuditStateEnum.APPROVED.getValue());
+        update.setCompanyAuditTime(LocalDateTime.now());
+        update.setCompanyAuditUserId(userId);
+        List<Long> idLists = list.stream().map(FsStoreOrderAudit::getId).collect(Collectors.toList());
+        baseMapper.updateBatchAudit(update,idLists);
+
+
+       //    FsStoreOrderAuditLog auditLog = new FsStoreOrderAuditLog();
+        //        auditLog.setAuditId(fsStoreOrderAudit.getId());
+        //        auditLog.setOrderId(fsStoreOrderAudit.getOrderId());
+        //        auditLog.setContent(message);
+        //        auditLog.setCreateTime(LocalDateTime.now());
+
+        // 批量插入日志
+        List<FsStoreOrderAuditLog> auditLogs = list.stream().map(item -> {
+            FsStoreOrderAuditLog auditLog = new FsStoreOrderAuditLog();
+            auditLog.setAuditId(item.getId());
+            auditLog.setOrderId(item.getOrderId());
+            auditLog.setContent("销售:审核通过");
+            auditLog.setCreateTime(LocalDateTime.now());
+            return auditLog;
+        }).collect(Collectors.toList());
+
+        fsStoreOrderAuditLogService.saveBatch(auditLogs);
+
+    }
+
+    /**
+     * 审核
+     *
+     * @param param   参数
+     * @param userId  用户ID
+     * @param isAdmin 是否管理端
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void auditOld(FsStoreOrderAuditReviewParam param, Long userId, boolean isAdmin) {
         FsStoreOrderAudit fsStoreOrderAudit = baseMapper.selectById(param.getAuditId());
         if (Objects.isNull(fsStoreOrderAudit)) {
             throw new CustomException("记录不存在");

+ 21 - 0
fs-service-system/src/main/java/com/fs/store/vo/FsStoreOrderAuditVO.java

@@ -3,6 +3,7 @@ package com.fs.store.vo;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 @Data
@@ -74,4 +75,24 @@ public class FsStoreOrderAuditVO {
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime createTime;
+
+    /**
+     * 收件人
+     */
+    private  String realName;
+
+    /* 订单类型 */
+    private String orderType;
+
+    /* 送货地址 */
+    private String userAddress;
+    /* 实收金额 */
+    private BigDecimal payPrice;
+    /* 订单金额 */
+    private BigDecimal totalPrice;
+    /* 手机号 */
+    private String userPhone;
+    /* 订单创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime orderCreateTime;
 }

+ 5 - 0
fs-service-system/src/main/java/com/fs/store/vo/FsStoreOrderVO.java

@@ -243,6 +243,11 @@ public class FsStoreOrderVO implements Serializable
     private String orderVisit;
 
     private String orderMedium;
+    /** 审核状态 */
+    private Integer auditStatus;
+    /* 发货时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date deliverySendTime;
 
 
 }

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

@@ -42,6 +42,7 @@ fsConfig:
   appId: 1661496555
   manuId: 0212af1e742b41b09089afeec98f8276
   callbackUrl: https://api.yjf.runtzh.com/app/prescribe/presribeNotify
+  commonApi: http://192.168.0.224:7011
 logging:
   level:
     org.springframework.web: INFO

+ 38 - 0
fs-service-system/src/main/resources/mapper/store/FsStoreOrderAuditMapper.xml

@@ -4,6 +4,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fs.store.mapper.FsStoreOrderAuditMapper">
 
+    <update id="updateBatchAudit">
+        update fs_store_order_audit
+        set audit_status = #{entity.auditStatus},
+            company_audit_time = #{entity.companyAuditTime},
+            company_audit_user_id = #{entity.companyAuditUserId}
+        where id in
+        <foreach item="item" collection="ids" separator="," open="(" close=")" index="index">
+            #{item}
+        </foreach>
+
+    </update>
+
     <select id="selectStoreOrderAuditVOList" resultType="com.fs.store.vo.FsStoreOrderAuditVO">
         select
             fsoa.id,
@@ -18,6 +30,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             fsoa.reason,
             fsoa.create_time,
             fso.order_code,
+            fso.user_address,
+            fso.real_name,
+            fso.user_phone,
+            fso.total_price,
+            fso.pay_price,
+            fso.order_type,
+            fso.create_time orderCreateTime,
             c.company_name,
             cu.nick_name companyUserName,
             cau.nick_name companyAuditUserName,
@@ -28,6 +47,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         left join company_user cu on cu.user_id = fsoa.company_user_id
         left join company_user cau on cau.user_id = fsoa.company_audit_user_id
         left join sys_user aau on aau.user_id = fsoa.admin_audit_user_id
+
         <where>
             <if test="companyId != null">
                 and fsoa.company_id = #{companyId}
@@ -38,6 +58,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="auditStatus != null">
                 and fsoa.audit_status = #{auditStatus}
             </if>
+            <if test="realName != null and realName != ''">
+                and fso.real_name like concat('%', #{realName}, '%')
+            </if>
+            <if test="userPhone != null and userPhone != ''">
+                and fso.user_phone like concat('%', #{userPhone}, '%')
+            </if>
+            <if test="beginTime != null and endTime != null">
+                and date_format(fso.create_time, '%Y-%m-%d') &gt;= #{beginTime} and date_format(fso.create_time, '%Y-%m-%d') &lt;= #{endTime}
+            </if>
+             <if test="auditBeginTime != null and auditEndTime != null">
+                 and date_format(fsoa.admin_audit_time, '%Y-%m-%d') &gt;= #{auditBeginTime} and date_format(fsoa.admin_audit_time, '%Y-%m-%d') &lt;= #{auditEndTime}
+             </if>
+            <if test="orderAmountSmall != null and orderAmountBig != null">
+                and fso.pay_price &gt;= #{orderAmountSmall} and fso.pay_price &lt;= #{orderAmountBig}
+            </if>
+            <if test="orderType != null">
+                and fso.order_type = #{orderType}
+            </if>
         </where>
         order by fsoa.admin_audit_time desc, fsoa.company_audit_time desc, fsoa.create_time desc
     </select>

+ 12 - 1
fs-service-system/src/main/resources/mapper/store/FsStoreOrderMapper.xml

@@ -448,6 +448,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="companyId != null  ">
                 AND o.company_id = #{companyId}
             </if>
+        <if test="orderType != null and orderType != ''">
+            AND o.order_type = #{orderType}
+        </if>
+        <if test="orderMedium != null and orderMedium != ''">
+            AND o.order_medium = #{orderMedium}
+        </if>
         </where>
 
         ) t
@@ -818,6 +824,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="companyId != null  ">
                 AND so.company_id = #{companyId}
             </if>
+            <if test="orderType != null and orderType != ''">
+                AND so.order_type = #{orderType}
+            </if>
+            <if test="orderMedium != null and orderMedium != ''">
+                AND so.order_medium = #{orderMedium}
+            </if>
 
         ) o GROUP BY o.company_user_id
     </select>
@@ -864,6 +876,5 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
         ) t
         GROUP BY t.order_type
-        HAVING t.order_type > 0
     </select>
 </mapper>

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

@@ -1,6 +1,7 @@
 package com.fs.app.controller;
 
 
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.fs.app.annotation.Login;
@@ -236,5 +237,26 @@ public class IndexController extends AppBaseController {
 		return R.ok().put("data",chineseMedicine);
 	}
 
-
+	/**
+	 * 启用-关闭小程序销售管理
+	 * @param bock
+	 * @return
+	 */
+	@GetMapping("/queryIsTownOn")
+	public R queryIsTownOn(String bock,String appId)
+	{
+		String key = appId+"start_status_001";
+		String start = redisCache.getCacheObject(key);
+		if (ObjectUtil.isNotEmpty(bock)){
+			if (bock.equals("001")){
+				redisCache.setCacheObject(key,bock);
+				return R.ok("调整成功");
+			}else if (bock.equals("002")){
+				redisCache.setCacheObject(key,bock);
+				return R.ok("调整成功");
+			}
+
+		}
+		return R.ok().put("date",start);
+	}
 }

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

@@ -5,6 +5,7 @@ import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
 import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
 import cn.hutool.core.date.DateTime;
+import cn.hutool.core.util.ObjectUtil;
 import com.fs.app.annotation.Login;
 import com.fs.app.utils.JwtUtils;
 import com.fs.common.core.domain.R;
@@ -249,10 +250,16 @@ public class WxUserController extends AppBaseController{
     @PostMapping("/loginByMiniApp")
     @Synchronized
     public R loginByMiniApp( @RequestBody LoginMpWxParam param) {
+        logger.info("入参:{}",param);
+        WxMaService wxService = null;
         if (StringUtils.isBlank(param.getCode())) {
             return R.error("code不存在");
         }
-        final WxMaService wxService = WxMaConfiguration.getMaService(maProperties.getConfigs().get(0).getAppid());
+        if (ObjectUtil.isNotEmpty(param.getAppId())){
+            wxService = WxMaConfiguration.getMaService(param.getAppId());
+        }else {
+            wxService = WxMaConfiguration.getMaService(maProperties.getConfigs().get(0).getAppid());
+        }
         try {
             WxMaJscode2SessionResult session = wxService.getUserService().getSessionInfo(param.getCode());
             // 解密