Browse Source

业绩报表统计

15376779826 3 days ago
parent
commit
8c7eaca4f6

+ 50 - 0
fs-admin/src/main/java/com/fs/report/ReportController.java

@@ -0,0 +1,50 @@
+package com.fs.report;
+
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.core.security.LoginUser;
+import com.fs.core.web.service.TokenService;
+import com.fs.statis.domain.Report;
+import com.fs.statis.param.ReportParam;
+import com.fs.statis.service.ReportService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+@RestController
+@RequestMapping("/crm/report")
+public class ReportController extends BaseController {
+    @Autowired
+    private ReportService reportService;
+    @Autowired
+    private TokenService tokenService;
+    @GetMapping("/reportList")
+    public TableDataInfo getReport(ReportParam param, HttpServletRequest request)
+    {
+        startPage();
+        List<Report> list = reportService.getReport(param);
+        return getDataTable(list);
+    }
+    @GetMapping("/export")
+    public AjaxResult export(ReportParam param,HttpServletRequest request)
+    {
+        LoginUser loginUser = tokenService.getLoginUser(request);
+
+        Long userId = loginUser.getUser().getUserId();
+        param.setCompanyUserId(userId);
+        List<Report> list = reportService.getReport(param);
+        if (CollectionUtils.isEmpty(list)){
+            return AjaxResult.error("请选择导出数据");
+        }
+        ExcelUtil<Report> util = new ExcelUtil<Report>(Report.class);
+        return util.exportExcel(list, "report");
+    }
+
+}

+ 59 - 0
fs-company/src/main/java/com/fs/crm/controller/ReportController.java

@@ -0,0 +1,59 @@
+package com.fs.crm.controller;
+
+import cn.hutool.http.HttpRequest;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.ServletUtils;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.company.domain.CompanyRecharge;
+import com.fs.core.security.LoginUser;
+import com.fs.core.web.service.TokenService;
+import com.fs.his.vo.OptionsVO;
+import com.fs.statis.domain.Report;
+import com.fs.statis.param.ReportParam;
+import com.fs.statis.service.ReportService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/crm/report")
+public class ReportController extends BaseController {
+    @Autowired
+    private ReportService reportService;
+    @Autowired
+    private TokenService tokenService;
+    @GetMapping("/reportList")
+    public TableDataInfo getReport(ReportParam param, HttpServletRequest request)
+    {
+        LoginUser loginUser = tokenService.getLoginUser(request);
+
+        Long userId = loginUser.getUser().getUserId();
+        param.setCompanyUserId(userId);
+        List<Report> list = reportService.getReport(param);
+        return getDataTable(list);
+    }
+    @GetMapping("/export")
+    public AjaxResult export(ReportParam param,HttpServletRequest request)
+    {
+        LoginUser loginUser = tokenService.getLoginUser(request);
+
+        Long userId = loginUser.getUser().getUserId();
+        param.setCompanyUserId(userId);
+        List<Report> list = reportService.getReport(param);
+        if (CollectionUtils.isEmpty(list)){
+            return AjaxResult.error("请选择导出数据");
+        }
+        ExcelUtil<Report> util = new ExcelUtil<Report>(Report.class);
+        return util.exportExcel(list, "report");
+    }
+
+}

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

@@ -288,4 +288,6 @@ public interface CompanyUserMapper
      * @return  list
      */
     List<CompanyUser> selectAllCompanyUserByDeptId(@Param("deptId") Long deptId);
+
+    List<String> selectCompanyUserNameByIds(@Param("companyUserIDs")List<Long> companyUserID);
 }

+ 15 - 0
fs-service-system/src/main/java/com/fs/crm/mapper/CrmCustomerAssistMapper.java

@@ -1,5 +1,6 @@
 package com.fs.crm.mapper;
 
+import java.util.Date;
 import java.util.List;
 import com.fs.crm.domain.CrmCustomerAssist;
 import com.fs.crm.param.CrmCustomerAssistDeLParam;
@@ -66,4 +67,18 @@ public interface CrmCustomerAssistMapper
     int removeByCustomer(@Param("maps") CrmCustomerAssistDeLParam param);
 
     int deleteCrmCustomerAssistByCustomerId(Long customerId);
+
+    /**
+     * 查询当前销售协作的客户
+     * @param companyUserId
+     * @return
+     */
+    List<Long> selectCustomerIdByCompanyUserId(@Param("companyUserId") Long companyUserId);
+
+    /**
+     * 根据客户id查询销售
+     * @param customerId
+     * @return
+     */
+    List<Long> selectCompanyUserIdByCustomerId(@Param("customerId") Long customerId,@Param("createTime") Date createTime);
 }

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

@@ -613,4 +613,11 @@ public interface CrmCustomerMapper extends BaseMapper<CrmCustomer>
     Long selectFsUserByCrmMobile(String remarkMobile);
 
     List<CrmMyCustomerListQueryVO> selectCrmMyAssistListQuery(@Param("maps") CrmMyCustomerListQueryParam param);
+
+    /**
+     * 查询当前销售的客户
+     * @param companyUserId
+     * @return
+     */
+    List<Long> selectCustomerIdByCompanyUserId(@Param("companyUserId") Long companyUserId);
 }

+ 43 - 0
fs-service-system/src/main/java/com/fs/statis/domain/Report.java

@@ -0,0 +1,43 @@
+package com.fs.statis.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class Report {
+    //订单编号
+    @Excel(name = "订单编号")
+    private String orderSn;
+    //成单金额
+    @Excel(name = "成单金额")
+    private BigDecimal money;
+    //支付时间
+    @Excel(name = "支付时间" ,width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date payTime;
+    //订单状态
+    @Excel(name = "订单状态")
+    private String orderStatus;
+    //客户名称
+    @Excel(name = "客户名称")
+    private String userName;
+    //是否共享客户1是0否
+    @Excel(name = "是否共享客户")
+    private String status;
+    //共享销售
+    @Excel(name = "共享销售")
+    private String companyUserNames;
+    //分成比例
+    @Excel(name = "分成比例")
+    private BigDecimal proportion;
+    //我的业绩
+    @Excel(name = "我的业绩")
+    private BigDecimal myPerformance;
+    //客户id
+    @Excel(name = "客户id")
+    private Long customerId;
+}

+ 21 - 0
fs-service-system/src/main/java/com/fs/statis/param/ReportParam.java

@@ -0,0 +1,21 @@
+package com.fs.statis.param;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fs.common.param.BaseQueryParam;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class ReportParam extends BaseQueryParam {
+    private Long companyId;
+    private Long companyUserId;
+    private Double money;
+    private String rechargeNo;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date payTime;
+    private String status;
+    private String orderStatus;
+    private List<Long> customerIds;
+}

+ 11 - 0
fs-service-system/src/main/java/com/fs/statis/service/ReportService.java

@@ -0,0 +1,11 @@
+package com.fs.statis.service;
+
+import com.fs.statis.domain.Report;
+import com.fs.statis.param.ReportParam;
+
+import java.util.Date;
+import java.util.List;
+
+public interface ReportService {
+    List<Report> getReport(ReportParam param);
+}

+ 69 - 0
fs-service-system/src/main/java/com/fs/statis/service/impl/ReportServiceImpl.java

@@ -0,0 +1,69 @@
+package com.fs.statis.service.impl;
+
+import com.fs.company.mapper.CompanyUserMapper;
+import com.fs.crm.mapper.CrmCustomerAssistMapper;
+import com.fs.crm.mapper.CrmCustomerMapper;
+import com.fs.statis.domain.Report;
+import com.fs.statis.param.ReportParam;
+import com.fs.statis.service.ReportService;
+import com.fs.store.mapper.FsStoreOrderMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+@Service
+public class ReportServiceImpl implements ReportService {
+    @Autowired
+    private CrmCustomerMapper crmCustomerMapper;
+    @Autowired
+    private CrmCustomerAssistMapper crmCustomerAssistMapper;
+    @Autowired
+    private FsStoreOrderMapper storeOrderMapper;
+    @Autowired
+    private CompanyUserMapper companyUserMapper;
+    @Override
+    public List<Report> getReport(ReportParam param) {
+        Set<Long> mergedSet = new HashSet<>();
+
+        if (param.getCompanyUserId()!=null){
+            //查询当前销售的客户以及协作客户
+            List<Long> customerIds = Optional.ofNullable(crmCustomerMapper.selectCustomerIdByCompanyUserId(param.getCompanyUserId()))
+                    .orElse(Collections.emptyList());
+            List<Long> assistCustomerIds = Optional.ofNullable(crmCustomerAssistMapper.selectCustomerIdByCompanyUserId(param.getCompanyUserId()))
+                    .orElse(Collections.emptyList());
+            mergedSet = Stream.concat(customerIds.stream(), assistCustomerIds.stream())
+                    .collect(Collectors.toSet());
+            mergedSet.addAll(customerIds);
+            mergedSet.addAll(assistCustomerIds);
+            if (mergedSet.isEmpty()){
+                return Collections.emptyList();
+            }
+            param.setCustomerIds(new ArrayList<>(mergedSet));
+        }
+        //查询客户的订单记录
+        List<Report> reports = storeOrderMapper.selectOrderByCustomerIds(param);
+        for (Report report : reports) {
+            //查询用户下单时是否共享客户,有哪些销售共享
+            List<Long> companyUserIds = crmCustomerAssistMapper.selectCompanyUserIdByCustomerId(report.getCustomerId(), report.getPayTime());
+            if (companyUserIds.size()>0){
+                report.setStatus("1");
+                String s = companyUserMapper.selectCompanyUserNameByIds(companyUserIds).toString();
+                String replace = s.replace("[", "");
+                String replace1 = replace.replace("]", "");
+                report.setCompanyUserNames(replace1);
+            }
+            //计算销售的业绩
+            //分成比例
+            BigDecimal bigDecimal = new BigDecimal("100.00");
+            BigDecimal ratio = bigDecimal.divide(new BigDecimal(companyUserIds.size()), 2, RoundingMode.HALF_UP);
+            report.setProportion(ratio);
+            report.setMyPerformance(ratio.multiply(report.getMoney()).divide(bigDecimal));
+            //修改对象
+        }
+        return reports;
+    }
+}

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

@@ -1,5 +1,6 @@
 package com.fs.store.mapper;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -9,6 +10,8 @@ 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.statis.domain.Report;
+import com.fs.statis.param.ReportParam;
 import com.fs.store.domain.FsStoreOrder;
 import com.fs.store.domain.FsStoreOrderItem;
 import com.fs.store.param.*;
@@ -1028,4 +1031,6 @@ public interface FsStoreOrderMapper
 
     @Select("select id from fs_store_order WHERE `status`= 1  and  extend_order_id is null ")
     List<Long> selectFsStoreOrderNoCreateOms();
+
+    List<Report> selectOrderByCustomerIds(@Param("map") ReportParam param);
 }

+ 7 - 0
fs-service-system/src/main/resources/mapper/company/CompanyUserMapper.xml

@@ -551,6 +551,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
     </select>
 
+    <select id="selectCompanyUserNameByIds" resultType="java.lang.String">
+        SELECT nick_name from company_user where user_id in
+        <foreach collection="companyUserIDs" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
+
     <update id="setIsRegisterMember" parameterType="Long">
         update company_user
         set is_need_register_member = #{status} where user_id in

+ 6 - 0
fs-service-system/src/main/resources/mapper/crm/CrmCustomerAssistMapper.xml

@@ -36,6 +36,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         from crm_customer_assist
         where customer_id = #{customerId}
     </select>
+    <select id="selectCustomerIdByCompanyUserId" resultType="java.lang.Long">
+        SELECT customer_id FROM crm_customer_assist where company_user_id = #{companyUserId}
+    </select>
+    <select id="selectCompanyUserIdByCustomerId" resultType="java.lang.Long">
+        select company_user_id from crm_customer_assist where customer_id = #{customerId} and create_time &lt; #{createTime}
+    </select>
 
     <insert id="insertCrmCustomerAssist" parameterType="CrmCustomerAssist" useGeneratedKeys="true" keyProperty="id">
         insert into crm_customer_assist

+ 3 - 0
fs-service-system/src/main/resources/mapper/crm/CrmCustomerMapper.xml

@@ -422,4 +422,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
         order by cu.customer_user_id desc
     </select>
+    <select id="selectCustomerIdByCompanyUserId" resultType="java.lang.Long">
+        SELECT customer_id FROM crm_customer_user where company_user_id = #{companyUserId}
+    </select>
 </mapper>

+ 33 - 0
fs-service-system/src/main/resources/mapper/store/FsStoreOrderMapper.xml

@@ -474,4 +474,37 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
         group by user_id
     </select>
+    <select id="selectOrderByCustomerIds" resultType="com.fs.statis.domain.Report">
+        SELECT
+        order_code AS orderSn,
+        real_name AS userName,
+        pay_price AS money,
+        pay_time AS payTime,
+        status AS orderStatus,
+        customer_id AS customerId
+        FROM
+        fs_store_order
+        WHERE
+        <choose>
+            <when test="map.orderStatus != null and map.orderStatus != ''">
+                status = #{map.orderStatus}
+            </when>
+            <otherwise>
+                status &gt;= 2
+            </otherwise>
+        </choose>
+        <if test="map.companyId != null and map.companyId!=''">
+            AND company_id = #{map.companyId}
+        </if>
+        <if test="map.customerIds!=null and map.customerIds.size() > 0">
+            AND customer_id IN
+            <foreach collection="map.customerIds" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
+        <if test="map.payTime!=null">
+            AND pay_time &gt;= STR_TO_DATE(#{map.payTime}, '%Y-%m-%d')
+            AND pay_time &lt; DATE_ADD(STR_TO_DATE(#{map.payTime}, '%Y-%m-%d'), INTERVAL 1 DAY)
+        </if>
+    </select>
 </mapper>