Parcourir la source

客户管家代码完善

Min il y a 1 an
Parent
commit
3723f7e7ee
19 fichiers modifiés avec 580 ajouts et 16 suppressions
  1. 8 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/AuditLogCenterController.java
  2. 141 4
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/ProductController.java
  3. 113 2
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/SalesOrderController.java
  4. 21 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/SalesOrderPaymentController.java
  5. 54 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/SalesOrderPayment.java
  6. 2 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/BusinessOpportunityMapper.java
  7. 1 1
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/ClueMapper.java
  8. 16 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/SalesOrderPaymentMapper.java
  9. 4 1
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/BusinessOpportunityService.java
  10. 2 2
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/ProductService.java
  11. 16 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/SalesOrderPaymentService.java
  12. 3 1
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/SalesOrderService.java
  13. 5 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/BusinessOpportunityServiceImpl.java
  14. 9 3
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ProductServiceImpl.java
  15. 20 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/SalesOrderPaymentServiceImpl.java
  16. 109 2
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/SalesOrderServiceImpl.java
  17. 19 0
      fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/BusinessOpportunityMapper.xml
  18. 19 0
      fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/ClueMapper.xml
  19. 18 0
      fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/SalesOrderPaymentMapper.xml

+ 8 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/AuditLogCenterController.java

@@ -27,6 +27,14 @@ public class AuditLogCenterController {
     @Resource
     private AuditLogCenterService auditLogCenterService;
 
+
+    /**
+    * @Description:根据模块编码以及模块对应的数据id获取到日志数据
+    * @Param: [moduleCode, id]
+    * @return: com.management.platform.util.HttpRespMsg
+    * @Author: yurk
+    * @Date: 2024/5/21
+    */
     @RequestMapping("/list")
     public HttpRespMsg list(String moduleCode,Integer id){
         HttpRespMsg msg=new HttpRespMsg();

+ 141 - 4
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/ProductController.java

@@ -55,12 +55,27 @@ public class ProductController {
     @Resource
     private SysDictService sysDictService;
 
+
+    /**
+    * @Description:获取产品列表数据
+    * @Param: [userId, productName, productCode, pageIndex,productType,status, pageSize]
+    * @return: com.management.platform.util.HttpRespMsg
+    * @Author: yurk
+    * @Date: 2024/5/21
+    */
     @RequestMapping("/list")
-    public HttpRespMsg list(String userId,String productName,String productCode,Integer pageIndex,Integer pageSize){
+    public HttpRespMsg list(String userId,String productName,String productCode,Integer productType,Integer status,Integer pageIndex,Integer pageSize){
         Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
-        return productService.getList(companyId,userId,productName,productCode,pageIndex,pageSize);
+        return productService.getList(companyId,userId,productName,productCode,productType,status,pageIndex,pageSize);
     }
 
+    /**
+    * @Description:新增修改产品信息
+    * @Param: [product]
+    * @return: com.management.platform.util.HttpRespMsg
+    * @Author: yurk
+    * @Date: 2024/5/21
+    */
     @RequestMapping("/addOrUpdate")
     public HttpRespMsg addOrUpdate(Product product){
         HttpRespMsg msg=new HttpRespMsg();
@@ -112,6 +127,13 @@ public class ProductController {
     }
 
 
+    /**
+    * @Description:批量删除
+    * @Param: [ids]
+    * @return: com.management.platform.util.HttpRespMsg
+    * @Author: yurk
+    * @Date: 2024/5/21
+    */
     @RequestMapping("/delete")
     public HttpRespMsg delete(String ids){
         HttpRespMsg msg=new HttpRespMsg();
@@ -155,21 +177,50 @@ public class ProductController {
         return msg;
     }
 
+    /**
+    * @Description:导入产品数据
+    * @Param: [multipartFile]
+    * @return: com.management.platform.util.HttpRespMsg
+    * @Author: yurk
+    * @Date: 2024/5/21
+    */
     @RequestMapping("/importData")
     public HttpRespMsg importData(MultipartFile multipartFile){
         return productService.importData(multipartFile);
     }
 
+    /**
+    * @Description:导出产品数据
+    * @Param: [userId, productName, productCode]
+    * @return: com.management.platform.util.HttpRespMsg
+    * @Author: yurk
+    * @Date: 2024/5/21
+    */
     @RequestMapping("/exportData")
-    public HttpRespMsg exportData(String userId,String productName,String productCode) throws Exception {
-        return productService.exportData(userId,productName,productCode);
+    public HttpRespMsg exportData(String userId,String productName,String productCode,Integer productType,Integer status) throws Exception {
+        return productService.exportData(userId,productName,productCode,productType,status);
     }
 
+    /**
+    * @Description:详情数据
+    * @Param: [id]
+    * @return: com.management.platform.util.HttpRespMsg
+    * @Author: yurk
+    * @Date: 2024/5/21
+    */
     @RequestMapping("/detail")
     public HttpRespMsg detail(Integer id){
         return productService.getDetail(id);
     }
 
+
+    /**
+    * @Description:转移产品数据
+    * @Param: [id, userId]
+    * @return: com.management.platform.util.HttpRespMsg
+    * @Author: yurk
+    * @Date: 2024/5/21
+    */
     @RequestMapping("/transferIncharger")
     public HttpRespMsg transferIncharger(Integer id,String userId){
         HttpRespMsg msg=new HttpRespMsg();
@@ -196,6 +247,13 @@ public class ProductController {
         return msg;
     }
 
+    /**
+    * @Description:产品相关商机数据
+    * @Param: [id]
+    * @return: com.management.platform.util.HttpRespMsg
+    * @Author: yurk
+    * @Date: 2024/5/21
+    */
     @RequestMapping("/businessListWithProduct")
     public HttpRespMsg businessListWithProduct(Integer id){
         HttpRespMsg msg=new HttpRespMsg();
@@ -229,6 +287,13 @@ public class ProductController {
         return msg;
     }
 
+    /**
+    * @Description:产品相关订单数据
+    * @Param: [id]
+    * @return: com.management.platform.util.HttpRespMsg
+    * @Author: yurk
+    * @Date: 2024/5/21
+    */
     @RequestMapping("/orderWithProduct")
     public HttpRespMsg orderWithProduct(Integer id){
         HttpRespMsg msg=new HttpRespMsg();
@@ -262,14 +327,30 @@ public class ProductController {
         return msg;
     }
 
+    /**
+    * @Description:回收站数据
+    * @Param: [pageIndex, pageSize]
+    * @return: com.management.platform.util.HttpRespMsg
+    * @Author: yurk
+    * @Date: 2024/5/21
+    */
     @RequestMapping("/recycleList")
     public HttpRespMsg recycleList(Integer pageIndex,Integer pageSize){
         return productService.recycleList(pageIndex,pageSize);
     }
 
+
+    /**
+    * @Description:批量恢复产品数据
+    * @Param: [ids]
+    * @return: com.management.platform.util.HttpRespMsg
+    * @Author: yurk
+    * @Date: 2024/5/21
+    */
     @RequestMapping("/batchRecoveryProduct")
     public HttpRespMsg recovery(String ids){
         HttpRespMsg msg=new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("token"));
         if(!StringUtils.isEmpty(ids)){
             String[] idsSplit = ids.split(",");
             List<String> splitList = Arrays.asList(idsSplit);
@@ -282,10 +363,33 @@ public class ProductController {
                 });
                 productService.updateBatchById(productList);
             }
+            List<AuditLogCenter> auditLogCenters =new ArrayList<>();
+            if(idList.size()>0){
+                idList.forEach(i->{
+                    //todo: 生成操作记录
+                    AuditLogCenter auditLogCenter =new AuditLogCenter();
+                    auditLogCenter.setAuditorContent("恢复了产品");
+                    auditLogCenter.setAuditorId(user.getId());
+                    auditLogCenter.setAuditorName(user.getName());
+                    auditLogCenter.setModuleId(Integer.valueOf(i));
+                    auditLogCenter.setModuleCode("Product");
+                    auditLogCenters.add(auditLogCenter);
+                });
+            }
+            if(auditLogCenters.size()>0){
+                auditLogCenterService.saveBatch(auditLogCenters);
+            }
         }
         return msg;
     }
 
+    /**
+    * @Description:批量删除产品数据
+    * @Param: [ids]
+    * @return: com.management.platform.util.HttpRespMsg
+    * @Author: yurk
+    * @Date: 2024/5/21
+    */
     @RequestMapping("/batchDeleteProduct")
     public HttpRespMsg batchDeleteProduct(String ids){
         HttpRespMsg msg=new HttpRespMsg();
@@ -298,5 +402,38 @@ public class ProductController {
         }
         return msg;
     }
+
+
+    /**
+    * @Description:认领产品数据
+    * @Param: [productId]
+    * @return: com.management.platform.util.HttpRespMsg
+    * @Author: yurk
+    * @Date: 2024/5/21
+    */
+    @RequestMapping("/claimProduct")
+    public HttpRespMsg claimProduct(Integer productId){
+        HttpRespMsg msg=new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("token"));
+        Product product = productService.getById(productId);
+        if(product==null){
+            msg.setError("产品不存在");
+            return msg;
+        }
+        product.setInchargerId(user.getId());
+        if(!productService.updateById(product)){
+            msg.setError("验证失败");
+        }
+        //todo: 生成操作记录
+        AuditLogCenter auditLogCenter =new AuditLogCenter();
+        auditLogCenter.setAuditorContent("认领了产品");
+        auditLogCenter.setAuditorId(user.getId());
+        auditLogCenter.setAuditorName(user.getName());
+        auditLogCenter.setModuleId(productId);
+        auditLogCenter.setModuleCode("Product");
+        auditLogCenterService.save(auditLogCenter);
+        return msg;
+    }
+
 }
 

+ 113 - 2
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/SalesOrderController.java

@@ -7,6 +7,7 @@ import com.management.platform.entity.*;
 import com.management.platform.mapper.ProductMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.*;
+import com.management.platform.util.BeanChangeUtil;
 import com.management.platform.util.HttpRespMsg;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -16,6 +17,8 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
@@ -46,6 +49,10 @@ public class SalesOrderController {
     private SysDictService sysDictService;
     @Resource
     private TaskService taskService;
+    @Resource
+    private AuditLogCenterService auditLogCenterService;
+    @Resource
+    private SalesOrderPaymentService salesOrderPaymentService;
 
 
     /**
@@ -79,6 +86,27 @@ public class SalesOrderController {
             msg.setError("订单编号为["+order.getOrderCode()+"]的订单已存在");
             return msg;
         }
+        //todo:生成操作记录
+        AuditLogCenter auditLogCenter =new AuditLogCenter();
+        auditLogCenter.setAuditorId(user.getId());
+        auditLogCenter.setAuditorName(user.getName());
+        boolean isNew=true;
+        if(order.getId()==null){
+            auditLogCenter.setAuditorContent("创建了订单");
+        }else {
+            SalesOrder oldOrder = salesOrderService.getById(order.getId());
+            BeanChangeUtil<Product> beanChangeUtil = new BeanChangeUtil();
+            String content = beanChangeUtil.contrastObj(oldOrder, order);
+            //发生变化才生成记录
+            if(!StringUtils.isEmpty(content.trim())){
+                isNew=false;
+                auditLogCenter.setModuleId(order.getId());
+                auditLogCenter.setModuleCode("SalesOrder");
+                auditLogCenter.setAuditorContent("编辑了订单");
+                auditLogCenterService.save(auditLogCenter);
+            }
+
+        }
         if(!salesOrderService.saveOrUpdate(order)){
             msg.setError("验证失败");
             return msg;
@@ -103,11 +131,24 @@ public class SalesOrderController {
     @RequestMapping("/transfer")
     public HttpRespMsg transfer(Integer id,String userId){
         HttpRespMsg msg=new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("token"));
         SalesOrder byId = salesOrderService.getById(id);
         byId.setInchargerId(userId);
         if(!salesOrderService.updateById(byId)){
             msg.setError("验证失败");
         }
+        //todo:生成操作记录
+        AuditLogCenter auditLogCenter =new AuditLogCenter();
+        if(!StringUtils.isEmpty(byId.getInchargerId())){
+            if(!byId.getInchargerId().equals(userId)){
+                auditLogCenter.setModuleId(byId.getId())
+                        .setModuleCode("SalesOrder")
+                        .setAuditorId(user.getId())
+                        .setAuditorName(user.getName())
+                        .setAuditorContent("转移了订单");
+                auditLogCenterService.save(auditLogCenter);
+            }
+        }
         return msg;
     }
 
@@ -117,6 +158,7 @@ public class SalesOrderController {
     @RequestMapping("/delete")
     public HttpRespMsg delete(String ids){
         HttpRespMsg msg=new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("token"));
         if(!StringUtils.isEmpty(ids)){
             String[] idSplit = ids.split(",");
             List<String> splitList = Arrays.asList(idSplit);
@@ -129,6 +171,22 @@ public class SalesOrderController {
                 msg.setError("验证失败");
                 return msg;
             }
+            List<AuditLogCenter> auditLogCenters =new ArrayList<>();
+            if(idList.size()>0){
+                idList.forEach(i->{
+                    //todo: 生成操作记录
+                    AuditLogCenter auditLogCenter =new AuditLogCenter();
+                    auditLogCenter.setAuditorContent("删除了订单");
+                    auditLogCenter.setAuditorId(user.getId());
+                    auditLogCenter.setAuditorName(user.getName());
+                    auditLogCenter.setModuleId(Integer.valueOf(i));
+                    auditLogCenter.setModuleCode("SalesOrder");
+                    auditLogCenters.add(auditLogCenter);
+                });
+            }
+            if(auditLogCenters.size()>0){
+                auditLogCenterService.saveBatch(auditLogCenters);
+            }
         }
         return msg;
     }
@@ -140,6 +198,7 @@ public class SalesOrderController {
     @RequestMapping("/recover")
     public HttpRespMsg recover(String ids){
         HttpRespMsg msg=new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("token"));
         if(!StringUtils.isEmpty(ids)){
             String[] idSplit = ids.split(",");
             List<String> splitList = Arrays.asList(idSplit);
@@ -152,6 +211,22 @@ public class SalesOrderController {
                 msg.setError("验证失败");
                 return msg;
             }
+            List<AuditLogCenter> auditLogCenters =new ArrayList<>();
+            if(idList.size()>0){
+                idList.forEach(i->{
+                    //todo: 生成操作记录
+                    AuditLogCenter auditLogCenter =new AuditLogCenter();
+                    auditLogCenter.setAuditorContent("恢复了订单");
+                    auditLogCenter.setAuditorId(user.getId());
+                    auditLogCenter.setAuditorName(user.getName());
+                    auditLogCenter.setModuleId(Integer.valueOf(i));
+                    auditLogCenter.setModuleCode("SalesOrder");
+                    auditLogCenters.add(auditLogCenter);
+                });
+            }
+            if(auditLogCenters.size()>0){
+                auditLogCenterService.saveBatch(auditLogCenters);
+            }
         }
         return msg;
     }
@@ -257,9 +332,45 @@ public class SalesOrderController {
     * @Date: 2024/5/16
     */
     @RequestMapping("/dataSummary")
-    public HttpRespMsg dataSummary(Integer queryType,Integer dateType,String startDate,String endDate){
-        return salesOrderService.dataSummary(queryType,dateType,startDate,endDate);
+    public HttpRespMsg dataSummary(Integer queryType,Integer dateType){
+        return salesOrderService.dataSummary(queryType,dateType);
+    }
+
+    /**
+    * @Description:操作订单回款
+    * @Param: [orderId, money]
+    * @return: com.management.platform.util.HttpRespMsg
+    * @Author: yurk
+    * @Date: 2024/5/21
+    */
+    @RequestMapping("/paymentCollection")
+    public HttpRespMsg paymentCollection(Integer orderId,Double money){
+        HttpRespMsg msg=new HttpRespMsg();
+        SalesOrder salesOrder = salesOrderService.getById(orderId);
+        BigDecimal price = salesOrder.getPrice();
+        SalesOrderPayment salesOrderPayment=new SalesOrderPayment();
+        salesOrderPayment.setMoney(new BigDecimal(money));
+        salesOrderPayment.setOrderId(orderId);
+        //订单已回款金额
+        BigDecimal receivedPayment = salesOrder.getReceivedPayment();
+        //订单未回款金额
+        BigDecimal unReceivedPayment = salesOrder.getUnReceivedPayment();
+        //更新订单数据
+        receivedPayment=receivedPayment.add(price);
+        unReceivedPayment=unReceivedPayment.subtract(price);
+        salesOrder.setReceivedPayment(receivedPayment);
+        salesOrder.setUnReceivedPayment(unReceivedPayment);
+        salesOrderPayment.setUnReceivedPayment(unReceivedPayment);
+        salesOrderService.updateById(salesOrder);
+        salesOrderPaymentService.save(salesOrderPayment);
+        return msg;
     }
 
+    @RequestMapping("/businessOpportunityStage")
+    public HttpRespMsg businessOpportunityStage(Integer queryType,Integer dateType){
+        return salesOrderService.businessOpportunityStage(queryType,dateType);
+    }
+
+
 }
 

+ 21 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/SalesOrderPaymentController.java

@@ -0,0 +1,21 @@
+package com.management.platform.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-05-21
+ */
+@RestController
+@RequestMapping("/sales-order-payment")
+public class SalesOrderPaymentController {
+
+}
+

+ 54 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/SalesOrderPayment.java

@@ -0,0 +1,54 @@
+package com.management.platform.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-05-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class SalesOrderPayment extends Model<SalesOrderPayment> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId("id")
+    private Integer id;
+
+    /**
+     * 订单id
+     */
+    @TableField("order_id")
+    private Integer orderId;
+
+    /**
+     * 回款金额
+     */
+    @TableField("money")
+    private BigDecimal money;
+
+    /**
+     * 未回款金额
+     */
+    @TableField("un_received_payment")
+    private BigDecimal unReceivedPayment;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 2 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/BusinessOpportunityMapper.java

@@ -32,4 +32,6 @@ public interface BusinessOpportunityMapper extends BaseMapper<BusinessOpportunit
     void updateBatchById(List<Integer> ids);
 
     Map<String, Object> getDataSummary(Integer companyId, String startDate, String endDate, String userId,@Param("list") List<String> targetUserIds);
+
+    Map<String, Object> getDataStage(Integer companyId, String startDate, String endDate, String userId,@Param("list") List<String> targetUserIds);
 }

+ 1 - 1
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/ClueMapper.java

@@ -37,5 +37,5 @@ public interface ClueMapper extends BaseMapper<Clue> {
             " from clue where id = #{id}")
     Clue selectById2Info(@Param("id") Integer id);
 
-    Map<String, Object> getDataSummary(Integer companyId, String startDate, String endDate, String userId, List<String> targetUserIds);
+    Map<String, Object> getDataSummary(Integer companyId, String startDate, String endDate, String userId,@Param("list") List<String> targetUserIds);
 }

+ 16 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/SalesOrderPaymentMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.SalesOrderPayment;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-05-21
+ */
+public interface SalesOrderPaymentMapper extends BaseMapper<SalesOrderPayment> {
+
+}

+ 4 - 1
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/BusinessOpportunityService.java

@@ -3,6 +3,7 @@ package com.management.platform.service;
 import com.management.platform.entity.*;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.management.platform.util.HttpRespMsg;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
@@ -54,5 +55,7 @@ public interface BusinessOpportunityService extends IService<BusinessOpportunity
 
     void isRollBack(List<Integer> ids);
 
-    Map<String, Object> getDataSummary(Integer companyId, String startDate, String endDate, String userId, List<String> targetUserIds);
+    Map<String, Object> getDataSummary(Integer companyId, String startDate, String endDate, String userId,List<String> targetUserIds);
+
+    Map<String, Object> getDataStage(Integer companyId, String startDate, String endDate, String userId,List<String> targetUserIds);
 }

+ 2 - 2
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/ProductService.java

@@ -17,11 +17,11 @@ import java.lang.reflect.InvocationTargetException;
  */
 public interface ProductService extends IService<Product> {
 
-    HttpRespMsg getList(Integer companyId,String userId, String productName, String productCode, Integer pageIndex, Integer pageSize);
+    HttpRespMsg getList(Integer companyId,String userId, String productName, String productCode,Integer productType,Integer status, Integer pageIndex, Integer pageSize);
 
     HttpRespMsg importData(MultipartFile multipartFile);
 
-    HttpRespMsg exportData(String userId, String productName, String productCode) throws Exception;
+    HttpRespMsg exportData(String userId, String productName, String productCode,Integer productType,Integer status) throws Exception;
 
     HttpRespMsg getDetail(Integer id);
 

+ 16 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/SalesOrderPaymentService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.SalesOrderPayment;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-05-21
+ */
+public interface SalesOrderPaymentService extends IService<SalesOrderPayment> {
+
+}

+ 3 - 1
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/SalesOrderService.java

@@ -25,5 +25,7 @@ public interface SalesOrderService extends IService<SalesOrder> {
 
     HttpRespMsg salesKit(Integer queryType,Integer dateType, String startDate, String endDate);
 
-    HttpRespMsg dataSummary(Integer queryType, Integer dateType, String startDate, String endDate);
+    HttpRespMsg dataSummary(Integer queryType, Integer dateType);
+
+    HttpRespMsg businessOpportunityStage(Integer queryType, Integer dateType);
 }

+ 5 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/BusinessOpportunityServiceImpl.java

@@ -366,6 +366,11 @@ public class BusinessOpportunityServiceImpl extends ServiceImpl<BusinessOpportun
         return bOMapper.getDataSummary(companyId,startDate,endDate,userId,targetUserIds);
     }
 
+    @Override
+    public Map<String, Object> getDataStage(Integer companyId, String startDate, String endDate, String userId, List<String> targetUserIds) {
+        return bOMapper.getDataStage(companyId,startDate,endDate,userId,targetUserIds);
+    }
+
     private BusinessOpportunity setNull(BusinessOpportunity bo) {
         if (bo.getPlate1() == "") {
             bo.setPlate1(null);

+ 9 - 3
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ProductServiceImpl.java

@@ -75,7 +75,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
     private AttachmentCenterMapper attachmentCenterMapper;
 
     @Override
-    public HttpRespMsg getList(Integer companyId,String userId, String productName, String productCode, Integer pageIndex, Integer pageSize) {
+    public HttpRespMsg getList(Integer companyId,String userId, String productName, String productCode,Integer productType,Integer status, Integer pageIndex, Integer pageSize) {
         HttpRespMsg msg=new HttpRespMsg();
         User targetUsr = userMapper.selectById(request.getHeader("token"));
         List<Department> departments = departmentMapper.selectList(new LambdaQueryWrapper<Department>().eq(Department::getCompanyId, companyId));
@@ -127,6 +127,12 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
         if(!StringUtils.isEmpty(productCode)){
             queryWrapper.like(Product::getProductCode,productCode);
         }
+        if(productType!=null){
+            queryWrapper.eq(Product::getType,productType);
+        }
+        if(status!=null){
+            queryWrapper.eq(Product::getStatus,status);
+        }
         if(pageIndex==null&&pageSize==null){
             pageIndex=-1;
             pageSize=-1;
@@ -361,7 +367,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
     }
 
     @Override
-    public HttpRespMsg exportData(String userId, String productName, String productCode) throws Exception {
+    public HttpRespMsg exportData(String userId, String productName, String productCode,Integer productType,Integer status) throws Exception {
         User user = userMapper.selectById(request.getHeader("token"));
         SysForm sysForm = sysFormMapper.selectOne(new LambdaQueryWrapper<SysForm>().eq(SysForm::getCompanyId, user.getCompanyId()).eq(SysForm::getCode, "Product").eq(SysForm::getIsCurrent, 1));
         WxCorpInfo wxCorpInfo = wxCorpInfoService.getOne(new LambdaQueryWrapper<WxCorpInfo>().eq(WxCorpInfo::getCompanyId, user.getCompanyId()));
@@ -375,7 +381,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
             titleList.add(item.getString("label"));
         }
         dataList.add(titleList);
-        HttpRespMsg respMsg = getList(user.getCompanyId(), userId, productName, productCode, null, null);
+        HttpRespMsg respMsg = getList(user.getCompanyId(), userId, productName, productCode,productType,status, null, null);
         Map<String, Object> msgData = (Map<String, Object>) respMsg.getData();
         List<Product> productList = (List<Product>) msgData.get("record");
         for (Product product : productList) {

+ 20 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/SalesOrderPaymentServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.SalesOrderPayment;
+import com.management.platform.mapper.SalesOrderPaymentMapper;
+import com.management.platform.service.SalesOrderPaymentService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-05-21
+ */
+@Service
+public class SalesOrderPaymentServiceImpl extends ServiceImpl<SalesOrderPaymentMapper, SalesOrderPayment> implements SalesOrderPaymentService {
+
+}

+ 109 - 2
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/SalesOrderServiceImpl.java

@@ -599,13 +599,44 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
     }
 
     @Override
-    public HttpRespMsg dataSummary(Integer queryType, Integer dateType, String startDate, String endDate) {
+    public HttpRespMsg dataSummary(Integer queryType, Integer dateType) {
         HttpRespMsg msg=new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("token"));
+        DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
         Integer companyId =user.getCompanyId();
         List<Department> allDeptList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().eq(Department::getCompanyId, companyId));
         String userId=null;
         List<String> targetUserIds=new ArrayList<>();
+        String startDate=null;
+        String endDate=null;
+        if(dateType!=null){
+            switch (dateType){
+                case 0:
+                    //本月
+                    LocalDate now = LocalDate.now();
+                    LocalDate dateStartOfMonth = now.with(TemporalAdjusters.firstDayOfMonth());
+                    LocalDate dateEndOfMonth = now.with(TemporalAdjusters.lastDayOfMonth());
+                    startDate=df.format(dateStartOfMonth);
+                    endDate=df.format(dateEndOfMonth);
+                    break;
+                case 1:
+                    //本周
+                    LocalDate now1 = LocalDate.now();
+                    LocalDate dateStartOfWeek = now1.with(TemporalAdjusters.previousOrSame(java.time.DayOfWeek.MONDAY));
+                    LocalDate dateEndOfWeek = now1.with(TemporalAdjusters.nextOrSame(java.time.DayOfWeek.SUNDAY));
+                    startDate=df.format(dateStartOfWeek);
+                    endDate=df.format(dateEndOfWeek);
+                    break;
+                case 2:
+                    //本年
+                    Year year = Year.now();
+                    LocalDate dateStartOfYear = year.atDay(1).atStartOfDay().toLocalDate();
+                    LocalDate dateEndOfYear = year.plusYears(1).atDay(1).atStartOfDay().minusSeconds(1).toLocalDate();
+                    startDate=df.format(dateStartOfYear);
+                    endDate=df.format(dateEndOfYear);
+                    break;
+            }
+        }
         if(queryType!=null){
             switch (queryType){
                 case 0:
@@ -638,14 +669,90 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
         }
         Map<String, Object> customDataSummary = customService.getDataSummary(companyId, startDate, endDate, userId, targetUserIds);
         Map<String, Object> businessOpportunityDataSummary =businessOpportunityService.getDataSummary(companyId, startDate, endDate, userId, targetUserIds);
-//        Map<String, Object> clueDataSummary =clueMapper.getDataSummary(companyId, startDate, endDate, userId, targetUserIds);
+        Map<String, Object> clueDataSummary =clueMapper.getDataSummary(companyId, startDate, endDate, userId, targetUserIds);
         Map<String,Object> resultMap=new HashMap<>();
         resultMap.put("customDataSummary",customDataSummary);
         resultMap.put("businessOpportunityDataSummary",businessOpportunityDataSummary);
+        resultMap.put("clueDataSummary",clueDataSummary);
         msg.setData(resultMap);
         return msg;
     }
 
+    @Override
+    public HttpRespMsg businessOpportunityStage(Integer queryType, Integer dateType) {
+        HttpRespMsg msg=new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("token"));
+        DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        Integer companyId =user.getCompanyId();
+        List<Department> allDeptList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().eq(Department::getCompanyId, companyId));
+        String userId=null;
+        List<String> targetUserIds=new ArrayList<>();
+        String startDate=null;
+        String endDate=null;
+        if(dateType!=null){
+            switch (dateType){
+                case 0:
+                    //本月
+                    LocalDate now = LocalDate.now();
+                    LocalDate dateStartOfMonth = now.with(TemporalAdjusters.firstDayOfMonth());
+                    LocalDate dateEndOfMonth = now.with(TemporalAdjusters.lastDayOfMonth());
+                    startDate=df.format(dateStartOfMonth);
+                    endDate=df.format(dateEndOfMonth);
+                    break;
+                case 1:
+                    //本周
+                    LocalDate now1 = LocalDate.now();
+                    LocalDate dateStartOfWeek = now1.with(TemporalAdjusters.previousOrSame(java.time.DayOfWeek.MONDAY));
+                    LocalDate dateEndOfWeek = now1.with(TemporalAdjusters.nextOrSame(java.time.DayOfWeek.SUNDAY));
+                    startDate=df.format(dateStartOfWeek);
+                    endDate=df.format(dateEndOfWeek);
+                    break;
+                case 2:
+                    //本年
+                    Year year = Year.now();
+                    LocalDate dateStartOfYear = year.atDay(1).atStartOfDay().toLocalDate();
+                    LocalDate dateEndOfYear = year.plusYears(1).atDay(1).atStartOfDay().minusSeconds(1).toLocalDate();
+                    startDate=df.format(dateStartOfYear);
+                    endDate=df.format(dateEndOfYear);
+                    break;
+            }
+        }
+        if(queryType!=null){
+            switch (queryType){
+                case 0:
+                    //仅本人
+                    userId=user.getId();
+                    break;
+                case 1:
+                    //本人及下属
+                    List<Department> departmentList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().eq(Department::getManagerId, user.getId()));
+                    List<Integer> deptIds = departmentList.stream().map(Department::getDepartmentId).distinct().collect(Collectors.toList());
+                    deptIds.add(-1);
+                    List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().in(User::getDepartmentId, deptIds));
+                    List<String> userIds = userList.stream().map(User::getId).distinct().collect(Collectors.toList());
+                    targetUserIds=userIds;
+                    break;
+                case 2:
+                    //本部门
+                    Integer targetDeptId1 = user.getDepartmentId();
+                    List<User> users1 = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getDepartmentId, targetDeptId1));
+                    List<String> targetUserIds1 = users1.stream().map(User::getId).distinct().collect(Collectors.toList());
+                    targetUserIds=targetUserIds1;
+                    break;
+                case 3:
+                    Integer targetDeptId2 = user.getDepartmentId();
+                    List<Integer> branchDepartment = getBranchDepartment(targetDeptId2, allDeptList);
+                    List<User> users2 = userMapper.selectList(new LambdaQueryWrapper<User>().in(User::getDepartmentId, branchDepartment));
+                    List<String> targetUserIds2 = users2.stream().map(User::getId).distinct().collect(Collectors.toList());
+                    targetUserIds=targetUserIds2;
+            }
+        }
+        Map<String,Object> dataMap=businessOpportunityService.getDataStage(companyId,startDate,endDate,userId,targetUserIds);
+        Map<String,Object> resultMap=new HashMap<>();
+        resultMap.put("dataMap",dataMap);
+        msg.setData(resultMap);
+        return msg;
+    }
 
     /**
     * @Description:计算同比增长率

+ 19 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/BusinessOpportunityMapper.xml

@@ -260,5 +260,24 @@
         </if>
     </select>
 
+    <select id="getDataStage" resultType="java.util.Map">
+        SELECT IFNULL(s.name,'未分配') AS stageName,COUNT(1) AS num FROM business_opportunity bo
+        LEFT JOIN stage s ON bo.stage_id=s.id
+        WHERE bo.company_id=#{companyId} AND bo.is_delete=0
+        <if test="startDate!=null and startDate!='' and endDate!=null and endDate!=''">
+            and DATE_FORMAT(bo.create_time,'%Y-%m-%d') BETWEEN #{startDate} AND #{endDate}
+        </if>
+        <if test="userId!=null and userId!=''">
+            and incharger_id=#{userId}
+        </if>
+        <if test="list!=null and list.size()>0">
+            and incharger_id in
+            <foreach collection="list" separator="," open="(" close=")" item="item">
+                #{item}
+            </foreach>
+        </if>
+        GROUP BY s.id
+    </select>
+
 
 </mapper>

+ 19 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/ClueMapper.xml

@@ -300,4 +300,23 @@
         </if>
     </select>
 
+    <select id="getDataSummary" resultType="java.util.Map">
+        SELECT COUNT(*) newNum,SUM(bo.clue_id is not null) as changeNum
+        FROM clue c
+        left join business_opportunity bo on c.id=bo.clue_id
+        WHERE c.company_id=#{companyId} and c.is_delete=0
+        <if test="startDate!=null and startDate!='' and endDate!=null and endDate!=''">
+            and DATE_FORMAT(c.create_time,'%Y-%m-%d') BETWEEN #{startDate} AND #{endDate}
+        </if>
+        <if test="userId!=null and userId!=''">
+            and c.incharger_id=#{userId}
+        </if>
+        <if test="list!=null and list.size()>0">
+            and c.incharger_id in
+            <foreach collection="list" separator="," open="(" close=")" item="item">
+                #{item}
+            </foreach>
+        </if>
+    </select>
+
 </mapper>

+ 18 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/SalesOrderPaymentMapper.xml

@@ -0,0 +1,18 @@
+<?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.management.platform.mapper.SalesOrderPaymentMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.SalesOrderPayment">
+        <id column="id" property="id" />
+        <result column="order_id" property="orderId" />
+        <result column="money" property="money" />
+        <result column="un_received_payment" property="unReceivedPayment" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, order_id, money, un_received_payment
+    </sql>
+
+</mapper>