Browse Source

60:商品订单审核操作

Long 4 days ago
parent
commit
f1dbbba055
23 changed files with 721 additions and 45 deletions
  1. 41 0
      fs-admin/src/main/java/com/fs/store/controller/FsStoreOrderAuditController.java
  2. 15 21
      fs-admin/src/main/java/com/fs/store/controller/FsStoreOrderController.java
  3. 20 4
      fs-admin/src/main/java/com/fs/task/StoreTask.java
  4. 43 0
      fs-company/src/main/java/com/fs/store/controller/FsStoreOrderAuditController.java
  5. 8 1
      fs-company/src/main/java/com/fs/store/controller/FsStoreOrderController.java
  6. 1 0
      fs-service-system/src/main/java/com/fs/store/config/StoreConfig.java
  7. 58 0
      fs-service-system/src/main/java/com/fs/store/domain/FsStoreOrderAudit.java
  8. 38 0
      fs-service-system/src/main/java/com/fs/store/domain/FsStoreOrderAuditLog.java
  9. 30 0
      fs-service-system/src/main/java/com/fs/store/enums/OrderAuditStateEnum.java
  10. 7 0
      fs-service-system/src/main/java/com/fs/store/mapper/FsStoreOrderAuditLogMapper.java
  11. 18 0
      fs-service-system/src/main/java/com/fs/store/mapper/FsStoreOrderAuditMapper.java
  12. 10 5
      fs-service-system/src/main/java/com/fs/store/mapper/FsStoreOrderMapper.java
  13. 19 0
      fs-service-system/src/main/java/com/fs/store/param/FsStoreOrderAuditParam.java
  14. 23 0
      fs-service-system/src/main/java/com/fs/store/param/FsStoreOrderAuditReviewParam.java
  15. 17 0
      fs-service-system/src/main/java/com/fs/store/service/IFsStoreOrderAuditLogService.java
  16. 27 0
      fs-service-system/src/main/java/com/fs/store/service/IFsStoreOrderAuditService.java
  17. 37 0
      fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreOrderAuditLogServiceImpl.java
  18. 94 0
      fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreOrderAuditServiceImpl.java
  19. 64 14
      fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreOrderServiceImpl.java
  20. 23 0
      fs-service-system/src/main/java/com/fs/store/vo/FsStoreOrderAuditLogVO.java
  21. 77 0
      fs-service-system/src/main/java/com/fs/store/vo/FsStoreOrderAuditVO.java
  22. 7 0
      fs-service-system/src/main/resources/mapper/store/FsStoreOrderAuditLogMapper.xml
  23. 44 0
      fs-service-system/src/main/resources/mapper/store/FsStoreOrderAuditMapper.xml

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

@@ -0,0 +1,41 @@
+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.core.security.SecurityUtils;
+import com.fs.store.param.FsStoreOrderAuditParam;
+import com.fs.store.param.FsStoreOrderAuditReviewParam;
+import com.fs.store.service.IFsStoreOrderAuditService;
+import com.fs.store.vo.FsStoreOrderAuditVO;
+import lombok.AllArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+@RestController
+@RequestMapping("/store/storeOrderAudit")
+@AllArgsConstructor
+public class FsStoreOrderAuditController extends BaseController {
+
+    private final IFsStoreOrderAuditService fsStoreOrderAuditService;
+
+    @PreAuthorize("@ss.hasAnyPermi('store:storeOrderAudit:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FsStoreOrderAuditParam param) {
+        startPage();
+        List<FsStoreOrderAuditVO> list = fsStoreOrderAuditService.selectStoreOrderAuditVOList(param);
+        return getDataTable(list);
+    }
+
+    @PreAuthorize("@ss.hasAnyPermi('store:storeOrderAudit:audit')")
+    @PostMapping("/audit")
+    public AjaxResult audit(@Valid @RequestBody FsStoreOrderAuditReviewParam param) {
+        SysUser user = SecurityUtils.getLoginUser().getUser();
+        fsStoreOrderAuditService.audit(param, user.getUserId(), true);
+        return AjaxResult.success();
+    }
+}

+ 15 - 21
fs-admin/src/main/java/com/fs/store/controller/FsStoreOrderController.java

@@ -1,23 +1,19 @@
 package com.fs.store.controller;
 
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
-import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
+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.utils.DateUtils;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.ParseUtils;
 import com.fs.common.utils.StringUtils;
-import com.fs.company.domain.CompanyMoneyLogs;
+import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.company.param.CompanyStoreOrderMoneyLogsListParam;
 import com.fs.company.service.ICompanyMoneyLogsService;
-import com.fs.company.vo.CompanyMoneyLogsVO;
 import com.fs.company.vo.CompanyStoreOrderMoneyLogsVO;
 import com.fs.erp.domain.ErpDeliverys;
 import com.fs.erp.domain.ErpOrderQuery;
@@ -28,7 +24,6 @@ import com.fs.his.config.FsErpConfig;
 import com.fs.his.utils.ConfigUtil;
 import com.fs.store.domain.*;
 import com.fs.store.dto.ExpressInfoDTO;
-import com.fs.store.dto.FsStoreCartDTO;
 import com.fs.store.dto.StoreOrderExpressExportDTO;
 import com.fs.store.dto.StoreOrderProductDTO;
 import com.fs.store.enums.ShipperCodeEnum;
@@ -36,22 +31,16 @@ import com.fs.store.param.*;
 import com.fs.store.service.*;
 import com.fs.store.vo.*;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
-import com.fs.common.annotation.Log;
-import com.fs.common.core.controller.BaseController;
-import com.fs.common.core.domain.AjaxResult;
-import com.fs.common.enums.BusinessType;
-import com.fs.common.utils.poi.ExcelUtil;
-import com.fs.common.core.page.TableDataInfo;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
-
-import static com.fs.store.constants.StoreConstants.DELIVERY;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 订单Controller
@@ -93,6 +82,8 @@ public class FsStoreOrderController extends BaseController {
     private IErpOrderService k9OrderService;
     @Autowired
     private ConfigUtil configUtil;
+    @Autowired
+    private IFsStoreOrderAuditLogService orderAuditLogService;
 
     private IErpOrderService getErpService(){
         //判断是否开启erp
@@ -355,7 +346,10 @@ public class FsStoreOrderController extends BaseController {
             moneyLogsMap.setBusinessId(order.getId().toString());
             tuiMoneyLogs=moneyLogsService.selectCompanyStoreOrderMoneyLogsList(moneyLogsMap);
         }
-        return R.ok().put("order", order).put("items", items).put("logs", logs).put("user", user).put("payments",payments).put("tuiMoneyLogs",tuiMoneyLogs);
+
+        List<FsStoreOrderAuditLogVO> auditLogs = orderAuditLogService.selectStoreOrderAuditLogVOByOrderId(order.getId());
+        return R.ok().put("order", order).put("items", items).put("logs", logs).put("user", user).put("payments",payments).put("tuiMoneyLogs",tuiMoneyLogs)
+                .put("auditLogs",auditLogs);
     }
 
     @GetMapping(value = "/queryAddress/{id}")

+ 20 - 4
fs-admin/src/main/java/com/fs/task/StoreTask.java

@@ -7,7 +7,6 @@ import com.fs.common.core.redis.RedisCache;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.vo.RedPacketMoneyVO;
 import com.fs.course.mapper.FsCourseRedPacketLogMapper;
-import com.fs.course.service.IFsCourseWatchLogService;
 import com.fs.erp.domain.ErpDeliverys;
 import com.fs.erp.domain.ErpGoods;
 import com.fs.erp.domain.ErpOrderQuery;
@@ -22,7 +21,6 @@ import com.fs.his.utils.ConfigUtil;
 import com.fs.pay.pay.domain.OrderResult;
 import com.fs.pay.pay.dto.OrderQueryDTO;
 import com.fs.pay.pay.service.PayService;
-import com.fs.qw.service.IQwWorkTaskService;
 import com.fs.store.config.StoreConfig;
 import com.fs.store.domain.*;
 import com.fs.store.dto.ExpressInfoDTO;
@@ -127,12 +125,30 @@ public class StoreTask
     private FsCourseRedPacketLogMapper fsCourseRedPacketLogMapper;
 
     public void PushErp() throws ParseException {
-        List<Long> ids = fsStoreOrderMapper.selectFsStoreOrderNoCreateOms();
+        List<Long> ids;
+        // 开启审核
+        if (getAuditSwitch()) {
+            ids = fsStoreOrderMapper.selectFsStoreOrderNoCreateOmsAndReviewed();
+        } else {
+            ids = fsStoreOrderMapper.selectFsStoreOrderNoCreateOms();
+        }
         for (Long id : ids) {
             fsStoreOrderService.createOmsOrder(id);
         }
+    }
 
-
+    /**
+     * 获取是否需要订单审核
+     * @return boolean
+     */
+    private boolean getAuditSwitch() {
+        try {
+            String json = configService.selectConfigByKey("store.config");
+            StoreConfig config = JSONUtil.toBean(json,StoreConfig.class);
+            return config.getAuditSwitch() == 1;
+        } catch (Exception e) {
+            return false;
+        }
     }
 
     public void redPacketSubMoney() throws Exception

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

@@ -0,0 +1,43 @@
+package com.fs.store.controller;
+
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+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;
+import com.fs.store.service.IFsStoreOrderAuditService;
+import com.fs.store.vo.FsStoreOrderAuditVO;
+import lombok.AllArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+@RestController
+@RequestMapping("/store/storeOrderAudit")
+@AllArgsConstructor
+public class FsStoreOrderAuditController extends BaseController {
+
+    private final IFsStoreOrderAuditService fsStoreOrderAuditService;
+
+    @PreAuthorize("@ss.hasAnyPermi('store:storeOrderAudit:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FsStoreOrderAuditParam param) {
+        startPage();
+        CompanyUser user = SecurityUtils.getLoginUser().getUser();
+        param.setCompanyId(user.getCompanyId());
+        List<FsStoreOrderAuditVO> list = fsStoreOrderAuditService.selectStoreOrderAuditVOList(param);
+        return getDataTable(list);
+    }
+
+    @PreAuthorize("@ss.hasAnyPermi('store:storeOrderAudit:audit')")
+    @PostMapping("/audit")
+    public AjaxResult audit(@Valid @RequestBody FsStoreOrderAuditReviewParam param) {
+        CompanyUser user = SecurityUtils.getLoginUser().getUser();
+        fsStoreOrderAuditService.audit(param, user.getUserId(), false);
+        return AjaxResult.success();
+    }
+}

+ 8 - 1
fs-company/src/main/java/com/fs/store/controller/FsStoreOrderController.java

@@ -28,6 +28,7 @@ import com.fs.store.param.FsStoreOrderCreateUserParam;
 import com.fs.store.param.FsStoreOrderFinishParam;
 import com.fs.store.param.FsStoreOrderParam;
 import com.fs.store.service.*;
+import com.fs.store.vo.FsStoreOrderAuditLogVO;
 import com.fs.store.vo.FsStoreOrderExportVO;
 import com.fs.store.vo.FsStoreOrderItemExportVO;
 import com.fs.store.vo.FsStoreOrderVO;
@@ -69,6 +70,9 @@ public class FsStoreOrderController extends BaseController
     private TokenService tokenService;
     @Autowired
     private ICrmCustomerService crmCustomerService;
+    @Autowired
+    private IFsStoreOrderAuditLogService orderAuditLogService;
+
     /**
      * 查询订单列表
      */
@@ -202,7 +206,10 @@ public class FsStoreOrderController extends BaseController
         if(order.getCustomerId()!=null&&order.getCustomerId()>0){
             customer=crmCustomerService.selectCrmCustomerById(order.getCustomerId());
         }
-        return R.ok().put("order", order).put("items", items).put("logs",logs).put("user",user).put("customer",customer).put("payments",payments) ;
+
+        List<FsStoreOrderAuditLogVO> auditLogs = orderAuditLogService.selectStoreOrderAuditLogVOByOrderId(order.getId());
+        return R.ok().put("order", order).put("items", items).put("logs",logs).put("user",user).put("customer",customer).put("payments",payments)
+                .put("auditLogs", auditLogs);
     }
 
     @GetMapping(value = "/queryAddress/{id}")

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

@@ -21,5 +21,6 @@ public class StoreConfig implements Serializable {
     private String refundConsignee;
     private String refundPhoneNumber;
     private String refundAddress;
+    private Integer auditSwitch; // 订单审核开关
 
 }

+ 58 - 0
fs-service-system/src/main/java/com/fs/store/domain/FsStoreOrderAudit.java

@@ -0,0 +1,58 @@
+package com.fs.store.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("fs_store_order_audit")
+public class FsStoreOrderAudit {
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    /**
+     * 订单ID
+     */
+    private Long orderId;
+    /**
+     * 公司ID
+     */
+    private Long companyId;
+    /**
+     * 销售ID
+     */
+    private Long companyUserId;
+    /**
+     * 审核状态 0:待销售审核 1:销售审核拒绝 2:待总后台审核 3:总后台审核拒绝 4:审核通过
+     */
+    private Integer auditStatus;
+    /**
+     * 销售审核时间
+     */
+    private LocalDateTime companyAuditTime;
+    /**
+     * 销售审核人ID
+     */
+    private Long companyAuditUserId;
+    /**
+     * 总后台审核时间
+     */
+    private LocalDateTime adminAuditTime;
+    /**
+     * 总后台审核人ID
+     */
+    private Long adminAuditUserId;
+    /**
+     * 拒绝原因
+     */
+    private String reason;
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+}

+ 38 - 0
fs-service-system/src/main/java/com/fs/store/domain/FsStoreOrderAuditLog.java

@@ -0,0 +1,38 @@
+package com.fs.store.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@TableName("fs_store_order_audit_log")
+@Data
+public class FsStoreOrderAuditLog {
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    /**
+     * 审核ID
+     */
+    private Long auditId;
+    /**
+     * 订单ID
+     */
+    private Long orderId;
+    /**
+     * 审核人ID
+     */
+    private Long auditUserId;
+    /**
+     * 备注
+     */
+    private String content;
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+}

+ 30 - 0
fs-service-system/src/main/java/com/fs/store/enums/OrderAuditStateEnum.java

@@ -0,0 +1,30 @@
+package com.fs.store.enums;
+
+import lombok.Getter;
+
+import java.util.Arrays;
+
+@Getter
+public enum OrderAuditStateEnum {
+    COMPANY_PENDING(0, "待销售审核"),
+    COMPANY_REJECT(1, "销售审核拒绝"),
+    ADMIN_PENDING(2, "待总后台审核"),
+    ADMIN_REJECT(3, "总后台审核拒绝"),
+    APPROVED(4, "审核通过"),
+    ;
+
+    private final Integer value;
+    private final String desc;
+
+    OrderAuditStateEnum(Integer value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    public static OrderAuditStateEnum getOrderAuditStateEnum(Integer value) {
+        return Arrays.stream(values())
+                .filter(orderAuditStateEnum -> orderAuditStateEnum.getValue().equals(value))
+                .findFirst()
+                .orElse(null);
+    }
+}

+ 7 - 0
fs-service-system/src/main/java/com/fs/store/mapper/FsStoreOrderAuditLogMapper.java

@@ -0,0 +1,7 @@
+package com.fs.store.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.store.domain.FsStoreOrderAuditLog;
+
+public interface FsStoreOrderAuditLogMapper extends BaseMapper<FsStoreOrderAuditLog> {
+}

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

@@ -0,0 +1,18 @@
+package com.fs.store.mapper;
+
+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 java.util.List;
+
+public interface FsStoreOrderAuditMapper extends BaseMapper<FsStoreOrderAudit> {
+
+    /**
+     * 查询订单审核列表
+     * @param param 参数
+     * @return  list
+     */
+    List<FsStoreOrderAuditVO> selectStoreOrderAuditVOList(FsStoreOrderAuditParam param);
+}

+ 10 - 5
fs-service-system/src/main/java/com/fs/store/mapper/FsStoreOrderMapper.java

@@ -1,22 +1,24 @@
 package com.fs.store.mapper;
 
-import java.util.List;
-import java.util.Map;
-
 import com.alibaba.fastjson.JSONObject;
 import com.fs.api.param.OrderListParam;
 import com.fs.api.vo.OrderListVO;
 import com.fs.company.param.CompanyStatisticsParam;
-import com.fs.company.vo.CompanySmsLogsStatisticsVO;
 import com.fs.company.vo.CompanyTuiMoneyStatisticsVO;
 import com.fs.store.domain.FsStoreOrder;
 import com.fs.store.domain.FsStoreOrderItem;
-import com.fs.store.param.*;
+import com.fs.store.param.FsCustomerStoreOrderListQueryParam;
+import com.fs.store.param.FsMyStoreOrderQueryParam;
+import com.fs.store.param.FsStoreOrderParam;
+import com.fs.store.param.FsStoreStatisticsParam;
 import com.fs.store.vo.*;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * 订单Mapper接口
  *
@@ -1028,4 +1030,7 @@ public interface FsStoreOrderMapper
 
     @Select("select id from fs_store_order WHERE `status`= 1  and  extend_order_id is null ")
     List<Long> selectFsStoreOrderNoCreateOms();
+
+    @Select("select fso.id from fs_store_order fso inner join fs_store_order_audit fsoa on fsoa.order_id = fso.id where fso.`status`= 1 and fso.extend_order_id is null and fsoa.audit_status = 4")
+    List<Long> selectFsStoreOrderNoCreateOmsAndReviewed();
 }

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

@@ -0,0 +1,19 @@
+package com.fs.store.param;
+
+import lombok.Data;
+
+@Data
+public class FsStoreOrderAuditParam {
+    /**
+     * 公司ID
+     */
+    private Long companyId;
+    /**
+     * 销售名称
+     */
+    private String companyUserName;
+    /**
+     * 审核状态
+     */
+    private Integer auditStatus;
+}

+ 23 - 0
fs-service-system/src/main/java/com/fs/store/param/FsStoreOrderAuditReviewParam.java

@@ -0,0 +1,23 @@
+package com.fs.store.param;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+public class FsStoreOrderAuditReviewParam {
+    /**
+     * 审核记录ID
+     */
+    @NotNull(message = "记录ID不能为空")
+    private Long auditId;
+    /**
+     * 审核类型 0:审核拒绝 1:审核通过
+     */
+    @NotNull(message = "审核类型不能为空")
+    private Integer reviewType;
+    /**
+     * 审核拒绝原因
+     */
+    private String reviewContent;
+}

+ 17 - 0
fs-service-system/src/main/java/com/fs/store/service/IFsStoreOrderAuditLogService.java

@@ -0,0 +1,17 @@
+package com.fs.store.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.store.domain.FsStoreOrderAuditLog;
+import com.fs.store.vo.FsStoreOrderAuditLogVO;
+
+import java.util.List;
+
+public interface IFsStoreOrderAuditLogService extends IService<FsStoreOrderAuditLog> {
+
+    /**
+     * 根据订单ID查询审批记录列表
+     * @param orderId 订单ID
+     * @return list
+     */
+    List<FsStoreOrderAuditLogVO> selectStoreOrderAuditLogVOByOrderId(Long orderId);
+}

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

@@ -0,0 +1,27 @@
+package com.fs.store.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.store.domain.FsStoreOrderAudit;
+import com.fs.store.param.FsStoreOrderAuditParam;
+import com.fs.store.param.FsStoreOrderAuditReviewParam;
+import com.fs.store.vo.FsStoreOrderAuditVO;
+
+import java.util.List;
+
+public interface IFsStoreOrderAuditService extends IService<FsStoreOrderAudit> {
+    /**
+     * 查询订单审核列表
+     * @param param 参数
+     * @return  list
+     */
+    List<FsStoreOrderAuditVO> selectStoreOrderAuditVOList(FsStoreOrderAuditParam param);
+
+    /**
+     * 审核
+     *
+     * @param param   参数
+     * @param userId  用户ID
+     * @param isAdmin 是否管理端
+     */
+    void audit(FsStoreOrderAuditReviewParam param, Long userId, boolean isAdmin);
+}

+ 37 - 0
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreOrderAuditLogServiceImpl.java

@@ -0,0 +1,37 @@
+package com.fs.store.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.store.domain.FsStoreOrderAuditLog;
+import com.fs.store.mapper.FsStoreOrderAuditLogMapper;
+import com.fs.store.service.IFsStoreOrderAuditLogService;
+import com.fs.store.vo.FsStoreOrderAuditLogVO;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class FsStoreOrderAuditLogServiceImpl extends ServiceImpl<FsStoreOrderAuditLogMapper, FsStoreOrderAuditLog> implements IFsStoreOrderAuditLogService {
+
+
+    /**
+     * 根据订单ID查询审批记录列表
+     * @param orderId 订单ID
+     * @return list
+     */
+    @Override
+    public List<FsStoreOrderAuditLogVO> selectStoreOrderAuditLogVOByOrderId(Long orderId) {
+        Wrapper<FsStoreOrderAuditLog> wrapper = Wrappers.<FsStoreOrderAuditLog>lambdaQuery()
+                .eq(FsStoreOrderAuditLog::getOrderId, orderId)
+                .orderByAsc(FsStoreOrderAuditLog::getCreateTime);
+        return baseMapper.selectList(wrapper).stream().map(l -> {
+            FsStoreOrderAuditLogVO vo = new FsStoreOrderAuditLogVO();
+            vo.setId(l.getId());
+            vo.setCreateTime(l.getCreateTime());
+            vo.setContent(l.getContent());
+            return vo;
+        }).collect(Collectors.toList());
+    }
+}

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

@@ -0,0 +1,94 @@
+package com.fs.store.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.common.exception.CustomException;
+import com.fs.common.utils.StringUtils;
+import com.fs.store.domain.FsStoreOrderAudit;
+import com.fs.store.domain.FsStoreOrderAuditLog;
+import com.fs.store.enums.OrderAuditStateEnum;
+import com.fs.store.mapper.FsStoreOrderAuditMapper;
+import com.fs.store.param.FsStoreOrderAuditParam;
+import com.fs.store.param.FsStoreOrderAuditReviewParam;
+import com.fs.store.service.IFsStoreOrderAuditLogService;
+import com.fs.store.service.IFsStoreOrderAuditService;
+import com.fs.store.vo.FsStoreOrderAuditVO;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Objects;
+
+@Service
+@AllArgsConstructor
+public class FsStoreOrderAuditServiceImpl extends ServiceImpl<FsStoreOrderAuditMapper, FsStoreOrderAudit> implements IFsStoreOrderAuditService {
+
+    private final IFsStoreOrderAuditLogService fsStoreOrderAuditLogService;
+
+    /**
+     * 查询订单审核列表
+     * @param param 参数
+     * @return  list
+     */
+    @Override
+    public List<FsStoreOrderAuditVO> selectStoreOrderAuditVOList(FsStoreOrderAuditParam param) {
+        return baseMapper.selectStoreOrderAuditVOList(param);
+    }
+
+    /**
+     * 审核
+     *
+     * @param param   参数
+     * @param userId  用户ID
+     * @param isAdmin 是否管理端
+     */
+    @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 (isAdmin && OrderAuditStateEnum.ADMIN_PENDING != orderAuditStateEnum) {
+            throw new CustomException("请勿重复审核");
+        }
+        if (!isAdmin && OrderAuditStateEnum.COMPANY_PENDING != orderAuditStateEnum) {
+            throw new CustomException("请勿重复审核");
+        }
+
+        LocalDateTime now = LocalDateTime.now();
+        OrderAuditStateEnum newStatus;
+        String message;
+        if (param.getReviewType() == 1) { // 审核通过
+            newStatus = isAdmin ? OrderAuditStateEnum.APPROVED : OrderAuditStateEnum.ADMIN_PENDING;
+            message = isAdmin ? "总后台:审核通过" : "销售:审核通过";
+        } else { // 审核拒绝
+            newStatus = isAdmin ? OrderAuditStateEnum.ADMIN_REJECT : OrderAuditStateEnum.COMPANY_REJECT;
+            message = isAdmin ? "总后台:审核拒绝" : "销售:审核拒绝";
+            if (StringUtils.isBlank(param.getReviewContent())) {
+                throw new CustomException("被拒原因不能为空");
+            }
+            fsStoreOrderAudit.setReason(param.getReviewContent());
+        }
+
+        if (isAdmin) {
+            fsStoreOrderAudit.setAdminAuditTime(now);
+            fsStoreOrderAudit.setAdminAuditUserId(userId);
+        } else {
+            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);
+    }
+}

+ 64 - 14
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreOrderServiceImpl.java

@@ -1,15 +1,5 @@
 package com.fs.store.service.impl;
 
-import java.lang.reflect.Field;
-import java.math.BigDecimal;
-import java.nio.charset.Charset;
-import java.sql.Timestamp;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
-
 import cn.hutool.core.net.URLDecoder;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.NumberUtil;
@@ -41,7 +31,6 @@ import com.fs.company.service.ICompanyService;
 import com.fs.company.service.ICompanyUserService;
 import com.fs.erp.domain.*;
 import com.fs.erp.dto.*;
-import com.fs.erp.service.IErpGoodsService;
 import com.fs.erp.service.IErpOrderService;
 import com.fs.his.config.FsErpConfig;
 import com.fs.his.utils.ConfigUtil;
@@ -50,6 +39,7 @@ import com.fs.huifuPay.sdk.opps.core.request.V2TradePaymentScanpayRefundRequest;
 import com.fs.huifuPay.service.HuiFuService;
 import com.fs.pay.pay.domain.RefundResult;
 import com.fs.pay.pay.service.PayService;
+import com.fs.pay.service.IPayService;
 import com.fs.store.config.StoreConfig;
 import com.fs.store.config.StoreIntegralConfig;
 import com.fs.store.constants.StoreConstants;
@@ -58,11 +48,11 @@ import com.fs.store.dto.*;
 import com.fs.store.enums.*;
 import com.fs.store.mapper.FsStoreCartMapper;
 import com.fs.store.mapper.FsStoreOrderItemMapper;
+import com.fs.store.mapper.FsStoreOrderMapper;
 import com.fs.store.mapper.FsUserAddressMapper;
 import com.fs.store.param.*;
 import com.fs.store.service.*;
 import com.fs.store.vo.*;
-import com.fs.pay.service.IPayService;
 import com.fs.system.service.ISysConfigService;
 import com.fs.wx.pay.config.WxPayProperties;
 import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
@@ -80,15 +70,24 @@ import org.springframework.aop.framework.AopContext;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.context.annotation.EnableAspectJAutoProxy;
 import org.springframework.stereotype.Service;
-import com.fs.store.mapper.FsStoreOrderMapper;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
+import java.lang.reflect.Field;
+import java.math.BigDecimal;
+import java.nio.charset.Charset;
+import java.sql.Timestamp;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
 import static com.fs.store.constants.StoreConstants.DELIVERY;
 
 /**
@@ -207,6 +206,12 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
     @Autowired
     @Qualifier("k9OrderServiceImpl")
     private IErpOrderService k9OrderService;
+
+    @Autowired
+    private IFsStoreOrderAuditService orderAuditService;
+    @Autowired
+    private IFsStoreOrderAuditLogService orderAuditLogService;
+
     /**
      * 查询订单
      *
@@ -1343,6 +1348,10 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             storeOrder.setStatus(OrderInfoEnum.STATUS_1.getValue());
             storeOrder.setPayTime(new Date());
             fsStoreOrderMapper.updateFsStoreOrder(storeOrder);
+
+            // 添加订单审核
+            addOrderAudit(order);
+
             //非处方直接提交OMS
 //            if(order.getIsPrescribe().equals(0)){
 //                createOmsOrder(order.getId());
@@ -1364,6 +1373,44 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         return "SUCCESS";
     }
 
+    /**
+     * 添加审核
+     * @param order 订单信息
+     */
+    private void addOrderAudit(FsStoreOrder order) {
+        if (!getAuditSwitch()) {
+            return;
+        }
+
+        FsStoreOrderAudit orderAudit = new FsStoreOrderAudit();
+        orderAudit.setOrderId(order.getId());
+        orderAudit.setCompanyId(order.getCompanyId());
+        orderAudit.setCompanyUserId(order.getCompanyUserId());
+        orderAudit.setAuditStatus(OrderAuditStateEnum.COMPANY_PENDING.getValue());
+        orderAudit.setCreateTime(LocalDateTime.now());
+        orderAuditService.save(orderAudit);
+
+        FsStoreOrderAuditLog auditLog = new FsStoreOrderAuditLog();
+        auditLog.setAuditId(orderAudit.getId());
+        auditLog.setOrderId(order.getId());
+        auditLog.setContent("系统:提交审核");
+        auditLog.setCreateTime(LocalDateTime.now());
+        orderAuditLogService.save(auditLog);
+    }
+
+    /**
+     * 获取是否需要订单审核
+     * @return boolean
+     */
+    private boolean getAuditSwitch() {
+        try {
+            String json = configService.selectConfigByKey("store.config");
+            StoreConfig config = JSONUtil.toBean(json,StoreConfig.class);
+            return config.getAuditSwitch() == 1;
+        } catch (Exception e) {
+            return false;
+        }
+    }
 
     public  boolean containsAddress(String companyName) {
         String[] items= {"新疆","西藏","内蒙古","海南"};
@@ -2170,6 +2217,9 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         storeOrder.setIsPayRemain(1);
         fsStoreOrderMapper.updateFsStoreOrder(storeOrder);
 
+        // 添加审核
+        addOrderAudit(order);
+
         return "SUCCESS";
     }
 

+ 23 - 0
fs-service-system/src/main/java/com/fs/store/vo/FsStoreOrderAuditLogVO.java

@@ -0,0 +1,23 @@
+package com.fs.store.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class FsStoreOrderAuditLogVO {
+    /**
+     * 主键ID
+     */
+    private Long id;
+    /**
+     * 备注
+     */
+    private String content;
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+}

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

@@ -0,0 +1,77 @@
+package com.fs.store.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class FsStoreOrderAuditVO {
+    /**
+     * 主键ID
+     */
+    private Long id;
+    /**
+     * 订单ID
+     */
+    private Long orderId;
+    /**
+     * 订单编码
+     */
+    private String orderCode;
+    /**
+     * 归属公司ID
+     */
+    private Long companyId;
+    /**
+     * 归属公司名称
+     */
+    private String companyName;
+    /**
+     * 归属销售ID
+     */
+    private Long companyUserId;
+    /**
+     * 归属销售名称
+     */
+    private String companyUserName;
+    /**
+     * 审核状态
+     */
+    private Integer auditStatus;
+    /**
+     * 销售公司审核时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime companyAuditTime;
+    /**
+     * 销售公司审核人ID
+     */
+    private Long companyAuditUserId;
+    /**
+     * 销售公司审核人名称
+     */
+    private String companyAuditUserName;
+    /**
+     * 总后台审核时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime adminAuditTime;
+    /**
+     * 总后台审核人ID
+     */
+    private Long adminAuditUserId;
+    /**
+     * 总后台审核人名称
+     */
+    private String adminAuditUserName;
+    /**
+     * 被拒原因
+     */
+    private String reason;
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+}

+ 7 - 0
fs-service-system/src/main/resources/mapper/store/FsStoreOrderAuditLogMapper.xml

@@ -0,0 +1,7 @@
+<?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.store.mapper.FsStoreOrderAuditLogMapper">
+
+</mapper>

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

@@ -0,0 +1,44 @@
+<?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.store.mapper.FsStoreOrderAuditMapper">
+
+    <select id="selectStoreOrderAuditVOList" resultType="com.fs.store.vo.FsStoreOrderAuditVO">
+        select
+            fsoa.id,
+            fsoa.order_id,
+            fsoa.company_id,
+            fsoa.company_user_id,
+            fsoa.audit_status,
+            fsoa.company_audit_time,
+            fsoa.company_audit_user_id,
+            fsoa.admin_audit_time,
+            fsoa.admin_audit_user_id,
+            fsoa.reason,
+            fsoa.create_time,
+            fso.order_code,
+            c.company_name,
+            cu.nick_name companyUserName,
+            cau.nick_name companyAuditUserName,
+            aau.nick_name adminAuditUserName
+        from fs_store_order_audit fsoa
+        left join fs_store_order fso on fso.id = fsoa.order_id
+        left join company c on c.company_id = fsoa.company_id
+        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}
+            </if>
+            <if test="companyUserName != null and companyUserName != ''">
+                and cu.nick_name like concat('%', #{companyUserName}, '%')
+            </if>
+            <if test="auditStatus != null">
+                and fsoa.audit_status = #{auditStatus}
+            </if>
+        </where>
+        order by fsoa.admin_audit_time desc, fsoa.company_audit_time desc, fsoa.create_time desc
+    </select>
+</mapper>