ly пре 1 година
родитељ
комит
3e8448a44b

+ 16 - 4
src/main/java/cn/ezhizao/project/business/collection/controller/BizCollectionController.java

@@ -15,6 +15,8 @@ import cn.ezhizao.project.business.collection.domain.BizCollection;
 import cn.ezhizao.project.business.collection.domain.BizCollectionDetail;
 import cn.ezhizao.project.business.collection.domain.CollectionExcelLoopModel;
 import cn.ezhizao.project.business.collection.domain.CollectionExcelOnceModel;
+import cn.ezhizao.project.business.collection.domain.vo.ReqStatisticsVo;
+import cn.ezhizao.project.business.collection.domain.vo.ResStatisticsVo;
 import cn.ezhizao.project.business.collection.service.IBizCollectionDetailService;
 import cn.ezhizao.project.business.collection.service.IBizCollectionService;
 import cn.ezhizao.project.business.company.domain.BizCompany;
@@ -23,6 +25,8 @@ import cn.ezhizao.project.business.order.domain.BizArchiveInput;
 import cn.ezhizao.project.business.order.domain.BizArchiveInputDetail;
 import cn.ezhizao.project.business.order.service.IBizArchiveInputDetailService;
 import cn.ezhizao.project.business.order.service.IBizArchiveInputService;
+import cn.ezhizao.project.business.taskType.domain.BizTaskType;
+import cn.ezhizao.project.business.taskType.service.IBizTaskTypeService;
 import cn.ezhizao.project.system.domain.SysFileStorage;
 import cn.ezhizao.project.system.domain.SysUser;
 import cn.ezhizao.project.system.service.ISysFileStorageService;
@@ -78,6 +82,8 @@ public class BizCollectionController extends BaseController {
     @Resource
     IBizAccountService accountService;
 
+    @Resource
+    IBizTaskTypeService taskTypeService;
     @PreAuthorize("@ss.hasPermi('business:collection:query')")
     @GetMapping(value = "/{id}")
     @ResponseBody
@@ -470,13 +476,19 @@ public class BizCollectionController extends BaseController {
     }
 
     @ApiOperation("收款统计报表")
-    @PostMapping("/statistics")
+    @GetMapping("/statistics")
 //    @PreAuthorize("@ss.hasPermi('business:collection:statistics')")
-    public TableDataInfo statistics(@RequestBody BizCollection collection) throws NoSuchFieldException, IllegalAccessException {
-        setTenantId(collection);
+    public TableDataInfo statistics( ReqStatisticsVo conditions) throws NoSuchFieldException, IllegalAccessException {
         startPage();
-        List<?> list  =  collectionService.statistics(collection);
+        List<ResStatisticsVo> list  =  collectionService.statistics(conditions);
         return getDataTable(list);
     }
 
+    //@ApiOperation("导出收款统计报表")
+
+    @ApiOperation("获取任务列表")
+    @PostMapping("/listTask")
+    public List<BizTaskType>  listTask(){
+        return taskTypeService.getList(new BizTaskType());
+    }
 }

+ 29 - 0
src/main/java/cn/ezhizao/project/business/collection/domain/vo/ReqStatisticsVo.java

@@ -0,0 +1,29 @@
+package cn.ezhizao.project.business.collection.domain.vo;
+
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description:收款报表请求
+ * @Author: ly
+ */
+@Data
+@Accessors(chain = true)
+public class ReqStatisticsVo {
+    private String companyName;
+    private String contractNo;
+    private List<Integer> taskTypeIds;
+    private List<String> receiptDateFilter;
+    private List<String> examineTimeFilter;
+    private Integer isProject;
+    private Integer isNew;
+    private Long tenantId;
+
+}

+ 58 - 0
src/main/java/cn/ezhizao/project/business/collection/domain/vo/ResStatisticsVo.java

@@ -0,0 +1,58 @@
+package cn.ezhizao.project.business.collection.domain.vo;
+
+
+import cn.ezhizao.framework.aspectj.lang.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Description:收款报表响应
+ * @Author: ly
+ */
+@Data
+@Accessors(chain = true)
+public class ResStatisticsVo {
+
+    private Long companyId;
+    @Excel(name = "公司名称")
+    private String companyName;
+    private Integer taskTypeId;
+    @Excel(name = "产品名称")
+    private String typeName;
+    private Long contractId;
+    @Excel(name = "合同编号")
+    private String contractNo;
+    //到账日期
+    @Excel(name = "到账日期", width = 20, dateFormat = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date receiptDate;
+    //提收款金额
+    @Excel(name = "提收款金额")
+    private BigDecimal withdrawalAmount;
+    @Excel(name = "申请人")
+    private String applierName;
+    @Excel(name = "合同类型")
+    private String contractType;
+    @Excel(name = "是否是项目")
+    private String isProject;
+    //服务金额
+    @Excel(name = "服务金额")
+    private BigDecimal detailAllAmount;
+    //实收
+    @Excel(name = "实收")
+    private BigDecimal reallyDetailAmount;
+    //待收
+    @Excel(name = "待收")
+    private BigDecimal waitDetailAmount;
+    //支出
+    @Excel(name = "支出")
+    private BigDecimal outAmount;
+    //审核时间
+    @Excel(name = "审核时间")
+    private String examineTime;
+
+}

+ 4 - 1
src/main/java/cn/ezhizao/project/business/collection/mapper/BizCollectionMapper.java

@@ -1,8 +1,11 @@
 package cn.ezhizao.project.business.collection.mapper;
 
 import cn.ezhizao.project.business.collection.domain.BizCollection;
+import cn.ezhizao.project.business.collection.domain.vo.ReqStatisticsVo;
+import cn.ezhizao.project.business.collection.domain.vo.ResStatisticsVo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
@@ -38,7 +41,7 @@ public interface BizCollectionMapper extends BaseMapper<BizCollection> {
     int getTotal(Map<String, Object> conditions);
 
 
-    List<?> statistics(BizCollection collection);
+    List<ResStatisticsVo> statistics(@Param("conditions") ReqStatisticsVo conditions);
 }
 
 

+ 3 - 1
src/main/java/cn/ezhizao/project/business/collection/service/IBizCollectionService.java

@@ -3,6 +3,8 @@ package cn.ezhizao.project.business.collection.service;
 import cn.ezhizao.project.business.collection.domain.BizCollection;
 import cn.ezhizao.project.business.collection.domain.CollectionExcelLoopModel;
 import cn.ezhizao.project.business.collection.domain.CollectionExcelOnceModel;
+import cn.ezhizao.project.business.collection.domain.vo.ReqStatisticsVo;
+import cn.ezhizao.project.business.collection.domain.vo.ResStatisticsVo;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.List;
@@ -46,5 +48,5 @@ public interface IBizCollectionService extends IService<BizCollection> {
 
     boolean removeCollectionBatchByIds(List<Long> ids);
 
-    List<?> statistics(BizCollection collection);
+    List<ResStatisticsVo> statistics(ReqStatisticsVo conditions);
 }

+ 4 - 2
src/main/java/cn/ezhizao/project/business/collection/service/impl/BizCollectionServiceImpl.java

@@ -7,6 +7,8 @@ import cn.ezhizao.project.business.collection.domain.BizCollection;
 import cn.ezhizao.project.business.collection.domain.BizCollectionDetail;
 import cn.ezhizao.project.business.collection.domain.CollectionExcelLoopModel;
 import cn.ezhizao.project.business.collection.domain.CollectionExcelOnceModel;
+import cn.ezhizao.project.business.collection.domain.vo.ReqStatisticsVo;
+import cn.ezhizao.project.business.collection.domain.vo.ResStatisticsVo;
 import cn.ezhizao.project.business.collection.mapper.BizCollectionDetailMapper;
 import cn.ezhizao.project.business.collection.mapper.BizCollectionMapper;
 import cn.ezhizao.project.business.collection.service.IBizCollectionService;
@@ -451,7 +453,7 @@ public class BizCollectionServiceImpl extends ServiceImpl<BizCollectionMapper, B
     }
 
     @Override
-    public List<?> statistics(BizCollection collection) {
-        return collectionDao.statistics(collection);
+    public List<ResStatisticsVo> statistics(ReqStatisticsVo conditions) {
+        return collectionDao.statistics(conditions);
     }
 }

+ 163 - 16
src/main/resources/mybatis/business/BizCollectionMapper.xml

@@ -15,26 +15,173 @@
     <select id="getTotal" resultType="java.lang.Integer">
         SELECT COUNT(1) FROM (<include refid="getListSql"/>) AS C
     </select>
-    <select id="statistics" resultType="java.util.List">
+    <select id="statistics" resultType="resStatisticsVo" >
+        SELECT
+        tt1.company_id as companyId,
+        tt1.name as companyName,
+        tt1.task_type_id as taskTypeId,
+        tt1.typeName,
+        tt1.contract_id as contractId,
+        tt1.contract_no as contractNo,
+        date_format(tt1.daozhangriqi, '%Y-%m-%d') as receiptDate,
+        tt1.tishoukuanjine as withdrawalAmount,
+        tt1.hetongleixing as contractType,
+        tt1.shenqingren as applierName,
+        tt1.shifouweixiangmu as isProject,
+        tt1.fuwujine as detailAllAmount,
+        tt1.shishoujine as reallyDetailAmount,
+        tt1.daishoukuanjine as waitDetailAmount,
+        tt1.shenheshijian as examineTime,
+        tt2.zhichu as outAmount
+        FROM
+        (
+        SELECT
+        c.company_id,
+        com.NAME,
+        detail.task_type_id,
+        type.`name` as typeName,
+        c.contract_id,
+        input.contract_no,
+        GROUP_CONCAT( DISTINCT arrive_date ) AS daozhangriqi,
+        SUM( detail.arrive_amount ) AS tishoukuanjine,
+        GROUP_CONCAT( DISTINCT u.nick_name ) AS shenqingren,
+        CASE
+
+        WHEN input.contract_type = 1 THEN
+        "续签" ELSE "新签"
+        END AS hetongleixing,
+        CASE
+
+        WHEN c.is_project = 1 THEN
+        "项目" ELSE
+        CASE
+
+        WHEN c.is_project = 2 THEN
+        "非项目" ELSE ""
+        END
+        END AS shifouweixiangmu,
+        detail.amount AS fuwujine,
+        SUM( CASE WHEN c.STATUS = 1 THEN detail.arrive_amount ELSE 0 END ) AS shishoujine,
+        (
+        SUM( detail.arrive_amount ) - SUM( CASE WHEN c.STATUS = 1 THEN detail.arrive_amount ELSE 0 END )) AS
+        daishoukuanjine,
+        GROUP_CONCAT(
+        IF
+        ( c.STATUS = 1, c.verify_date, NULL )) AS shenheshijian
+        FROM
+        biz_collection c
+        LEFT JOIN biz_collection_detail detail ON c.id = detail.collection_id
+        LEFT JOIN biz_company com ON com.id = c.company_id
+        LEFT JOIN biz_archive_input input ON input.id = c.contract_id
+        LEFT JOIN sys_user u ON u.user_id = c.applier_id
+        LEFT JOIN biz_task_type type on type.id = detail.task_type_id
+        WHERE
+        c.deleted = 0
+        AND c.STATUS != 2
+        AND com.tenant_id = #{conditions.tenantId}
+        <if test="conditions.companyName != null and conditions.companyName != ''">
+            AND com.NAME LIKE CONCAT('%',#{conditions.companyName},'%')
+        </if>
+        <if test="conditions.contractNo != null and conditions.contractNo != ''">
+            AND input.contract_no LIKE  CONCAT('%',#{conditions.contractNo},'%')
+        </if>
+        <if test="conditions.taskTypeIds != null and conditions.taskTypeIds.size() &gt; 0">
+            AND detail.task_type_id IN
+            <foreach collection="conditions.taskTypeIds" index="index" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditions.receiptDateFilter != null and conditions.receiptDateFilter.size() ">
+            AND (
+            DATE_FORMAT(c.arrive_date,'%Y-%m-%d') &gt;= #{conditions.receiptDateFilter[0]}
+            AND
+            DATE_FORMAT(c.arrive_date,'%Y-%m-%d') &lt;= #{conditions.receiptDateFilter[1]}
+            )
+        </if>
+        <if test="conditions.examineTimeFilter != null and conditions.examineTimeFilter.size() ">
+            AND(
+            DATE_FORMAT(c.verify_date,'%Y-%m-%d') &gt;= #{conditions.examineTimeFilter[1]}
+            AND
+            DATE_FORMAT(c.verify_date,'%Y-%m-%d') &lt;= #{conditions.examineTimeFilter[1]}
+            )
+        </if>
+        <if test="conditions.isProject != null">
+            AND c.is_project = #{conditions.isProject}
+        </if>
+        <if test="conditions.isNew != null">
+            AND c.is_new = #{conditions.isNew}
+        </if>
+        GROUP BY
+        c.company_id,
+        detail.task_type_id,
+        c.contract_id
+        order by
+        c.create_time desc
+        ) tt1
+        LEFT JOIN (
+        SELECT
+        t1.company_id,
+        t3.task_type_id,
+        t1.contract_id,
+        SUM( CASE WHEN t1.payment_status = 1 THEN t3.payment_amount ELSE 0 END ) zhichu
+        FROM
+        biz_payment t1
+        LEFT JOIN biz_archive_input t2 ON t1.contract_id = t2.id
+        LEFT JOIN biz_payment_detail t3 ON t1.id = t3.payment_id
+        left join biz_company com on com.id = t1.company_id
+        left join biz_archive_input input on input.id = t1.contract_id
+        WHERE
+        t1.deleted = 0
+        AND t1.payment_status = 1
+        AND t1.verify_status = 3
+        AND com.tenant_id = #{conditions.tenantId}
+        <if test="conditions.companyName != null and conditions.companyName != ''">
+            AND com.NAME LIKE CONCAT('%',#{conditions.companyName},'%')
+        </if>
+        <if test="conditions.contractNo != null and conditions.contractNo != ''">
+            AND input.contract_no LIKE CONCAT('%',#{conditions.contractNo},'%')
+        </if>
+        <if test="conditions.taskTypeIds != null and conditions.taskTypeIds.size() &gt; 0">
+            AND t3.task_type_id IN
+            <foreach collection="conditions.taskTypeIds" index="index" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="conditions.receiptDateFilter != null and conditions.receiptDateFilter.size() ">
+            AND (
+            DATE_FORMAT(t1.verify_date,'%Y-%m-%d') &gt;= #{conditions.receiptDateFilter[0]}
+            AND
+            DATE_FORMAT(t1.verify_date,'%Y-%m-%d') &lt;= #{conditions.receiptDateFilter[1]}
+            )
+        </if>
+
+        GROUP BY
+        t1.company_id,
+        t3.task_type_id,
+        t1.contract_id
+        ) tt2 ON tt1.company_id = tt2.company_id
+        AND tt1.task_type_id = tt2.task_type_id
+        AND tt1.contract_id = tt2.contract_id
 
     </select>
 
     <sql id="getListSql">
         SELECT a.id, a.flow_no, a.subsidiary_id, a.subsidiary, a.subsidiary_name, a.subsidiary_bank_account, a.form_date
-             , a.subsidiary_bank_name, a.company_id, b.name as company_name
-             , a.is_new, a.is_project, a.project_name, a.project_no, a.project_main_name
-             , a.amount
-             , a.verify_status
-             , a.arrive_amount
-             , a.arrive_date
-             , a.arrive_time, a.status, a.applier_id, a.verify_date, a.verify_comment
-             , a.arrive_status, a.apply_name
-             , a.appy_account, a.create_time, a.creator_id, a.update_time, a.updater_id
-             , a.deleted, a.version, a.remark
-             , a.actually_date
-             , b.name as company_name, t5.nick_name as applier_name
-             , ai.contract_no
-             , (select ifnull(sum(amount), 0) from biz_collection col where col.contract_id = a.contract_id and col.status = 1) payment_amount
+        , a.subsidiary_bank_name, a.company_id, b.name as company_name
+        , a.is_new, a.is_project, a.project_name, a.project_no, a.project_main_name
+        , a.amount
+        , a.verify_status
+        , a.arrive_amount
+        , a.arrive_date
+        , a.arrive_time, a.status, a.applier_id, a.verify_date, a.verify_comment
+        , a.arrive_status, a.apply_name
+        , a.appy_account, a.create_time, a.creator_id, a.update_time, a.updater_id
+        , a.deleted, a.version, a.remark
+        , a.actually_date
+        , b.name as company_name, t5.nick_name as applier_name
+        , ai.contract_no
+        , (select ifnull(sum(amount), 0) from biz_collection col where col.contract_id = a.contract_id and col.status =
+        1) payment_amount
         FROM biz_collection a left join biz_company b on b.id = a.company_id
         left join biz_archive_input ai on ai.id = a.contract_id
         left join sys_user t5 on t5.user_id = a.applier_id
@@ -115,7 +262,7 @@
             <if test="appyAccount != null  and appyAccount != '' ">
                 a.appy_account = #{appyAccount} AND
             </if>
-            <if test="verifyDate != null" >
+            <if test="verifyDate != null">
                 a.verify_date = #{verifyDate}
             </if>
             <if test="remark != null  and remark != '' ">