소스 검색

按月合同统计

lamphua 2 달 전
부모
커밋
a8342b1cf3

+ 135
- 36
oa-back/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/CmcContractController.java 파일 보기

@@ -76,6 +76,8 @@ public class CmcContractController extends BaseController
76 76
         JSONObject jsonObject = new JSONObject();
77 77
         JSONArray yearArray = new JSONArray();
78 78
         JSONObject yearObject = new JSONObject();
79
+        JSONArray monthArray = new JSONArray();
80
+        JSONObject monthObject = new JSONObject();
79 81
         JSONArray sourceArray = new JSONArray();
80 82
         JSONObject sourceObject = new JSONObject();
81 83
         JSONArray amountArray = new JSONArray();
@@ -90,51 +92,93 @@ public class CmcContractController extends BaseController
90 92
         JSONObject paidAmountObject = new JSONObject();
91 93
         JSONArray paidCwAmountArray = new JSONArray();
92 94
         JSONObject paidCwAmountObject = new JSONObject();
95
+        int count = 0;
96
+        int paidCount = 0;
97
+        BigDecimal amount = new BigDecimal(0);
98
+        BigDecimal paidAmount = new BigDecimal(0);
93 99
         //每年合同数量及金额
94 100
         if (cmcContract.getSignDate() == null) {
95
-            for (int i = 2019; i <= Calendar.getInstance().get(Calendar.YEAR); i++) {
96
-                cmcContract.setSignDate(new SimpleDateFormat("yyyy").parse(String.valueOf(i)));
97
-                List<CmcContract> yearList = cmcContractService.selectCmcContractList(cmcContract);
98
-                yearObject.put(String.valueOf(i), yearList.size());
99
-                int count = 0;
100
-                BigDecimal amount = new BigDecimal(0);
101
-                BigDecimal paidAmount = new BigDecimal(0);
102
-                for (CmcContract contract : yearList) {
103
-                    if (contract.getAmount() != null)
104
-                        amount = amount.add(contract.getAmount());
105
-                    if (contract.getPaidAmount() != null) {
106
-                        paidAmount = paidAmount.add(contract.getPaidAmount());
107
-                        if (contract.getPaidAmount().compareTo(contract.getAmount()) >= 0)
108
-                            count ++;
101
+            if (cmcContract.getParams().size() == 0) {
102
+                for (int i = 2019; i <= Calendar.getInstance().get(Calendar.YEAR); i++) {
103
+                    cmcContract.setSignDate(new SimpleDateFormat("yyyy").parse(String.valueOf(i)));
104
+                    List<CmcContract> yearList = cmcContractService.selectCmcContractList(cmcContract);
105
+                    int countI = yearList.size();
106
+                    count += countI;
107
+                    yearObject.put(String.valueOf(i), countI);
108
+                    int paidCountI = 0;
109
+                    BigDecimal amountI = new BigDecimal(0);
110
+                    BigDecimal paidAmountI = new BigDecimal(0);
111
+                    for (CmcContract contract : yearList) {
112
+                        if (contract.getAmount() != null)
113
+                            amountI = amountI.add(contract.getAmount());
114
+                        if (contract.getPaidAmount() != null) {
115
+                            paidAmountI = paidAmountI.add(contract.getPaidAmount());
116
+                            if (contract.getPaidAmount().compareTo(contract.getAmount()) >= 0)
117
+                                paidCountI++;
118
+                        }
109 119
                     }
120
+                    paidCount += paidCountI;
121
+                    amount = amount.add(amountI);
122
+                    paidAmount = paidAmount.add(paidAmountI);
123
+                    paidYearObject.put(String.valueOf(i), paidCountI);
124
+                    amountObject.put(String.valueOf(i), amountI);
125
+                    paidAmountObject.put(String.valueOf(i), paidAmountI);
126
+                }
127
+            }
128
+            else {
129
+                String beginTime = (String) cmcContract.getParams().get("beginTime");
130
+                String endTime = (String) cmcContract.getParams().get("endTime");
131
+                List<String> monthList = getMonthBetweenDate(beginTime, endTime);
132
+                for (int i = 0; i < monthList.size(); i++) {
133
+                    String beginTimeString = monthList.get(i) + "-01";
134
+                    Calendar calendar = Calendar.getInstance();
135
+                    calendar.set(Calendar.YEAR, Integer.parseInt(monthList.get(i).split("-")[0]));
136
+                    calendar.set(Calendar.MONTH, Integer.parseInt(monthList.get(i).split("-")[1]) - 1);
137
+                    String endTimeString = monthList.get(i) + "-" + calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
138
+                    cmcContract.setSignDate(new SimpleDateFormat("yyyy").parse(beginTimeString));
139
+                    Map<String, Object> params = new HashMap<>();
140
+                    params.put("beginTime", beginTimeString + " 00:00:00");
141
+                    params.put("endTime", endTimeString + " 23:59:59");
142
+                    cmcContract.setParams(params);
143
+                    monthObject.put(monthList.get(i) + "月", cmcContractService.selectCmcContractListByRange(cmcContract).size());
110 144
                 }
111
-                paidYearObject.put(String.valueOf(i), count);
112
-                amountObject.put(String.valueOf(i), amount);
113
-                paidAmountObject.put(String.valueOf(i), paidAmount);
114 145
             }
115 146
             cmcContract.setSignDate(null);
116 147
         }
117
-        else {
148
+        else if (cmcContract.getSignDate() != null) {
118 149
             //输入年份合同数量及金额
119
-            yearObject.put(new SimpleDateFormat("yyyy").format(cmcContract.getSignDate()), cmcContractService.selectCmcContractList(cmcContract).size());
120
-            int count = 0;
121
-            BigDecimal amount = new BigDecimal(0);
122
-            BigDecimal paidAmount = new BigDecimal(0);
150
+            count = cmcContractService.selectCmcContractList(cmcContract).size();
151
+            yearObject.put(new SimpleDateFormat("yyyy").format(cmcContract.getSignDate()), count);
152
+            for (int i = 1; i <= 12; i++) {
153
+                String month = i < 10 ? "0" + i : String.valueOf(i);
154
+                String beginTimeString = new SimpleDateFormat("yyyy").format(cmcContract.getSignDate()) + "-" + month + "-01";
155
+                Calendar calendar = Calendar.getInstance();
156
+                calendar.set(Calendar.YEAR, Integer.parseInt(new SimpleDateFormat("yyyy").format(cmcContract.getSignDate())));
157
+                calendar.set(Calendar.MONTH, i - 1);
158
+                String endTimeString = new SimpleDateFormat("yyyy").format(cmcContract.getSignDate()) + "-" + month + "-" + calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
159
+                cmcContract.setSignDate(new SimpleDateFormat("yyyy").parse(beginTimeString));
160
+                Map<String, Object> params = new HashMap<>();
161
+                params.put("beginTime", beginTimeString + " 00:00:00");
162
+                params.put("endTime", endTimeString + " 23:59:59");
163
+                cmcContract.setParams(params);
164
+                monthObject.put(i + "月", cmcContractService.selectCmcContractListByRange(cmcContract).size());
165
+            }
123 166
             for (CmcContract contract : cmcContractService.selectCmcContractList(cmcContract)) {
124 167
                 if (contract.getAmount() != null)
125 168
                     amount = amount.add(contract.getAmount());
126 169
                 if (contract.getPaidAmount() != null) {
127 170
                     paidAmount = paidAmount.add(contract.getPaidAmount());
128 171
                     if (contract.getPaidAmount().compareTo(contract.getAmount()) >= 0)
129
-                        count ++;
172
+                        paidCount ++;
130 173
                 }
131 174
             }
132
-            paidYearObject.put(new SimpleDateFormat("yyyy").format(cmcContract.getSignDate()), count);
175
+            paidYearObject.put(new SimpleDateFormat("yyyy").format(cmcContract.getSignDate()), paidCount);
133 176
             amountObject.put(new SimpleDateFormat("yyyy").format(cmcContract.getSignDate()), amount);
134 177
             paidAmountObject.put(new SimpleDateFormat("yyyy").format(cmcContract.getSignDate()), paidAmount);
135 178
         }
136
-        getProjectSourceStatistic(cmcContract, sourceObject, paidSourceObject, cwAmountObject, paidCwAmountObject);
179
+        getProjectSourceStatistic(cmcContract, sourceObject, paidSourceObject, cwAmountObject, paidCwAmountObject, count, paidCount, amount, paidAmount);
137 180
         yearArray.add(yearObject);
181
+        monthArray.add(monthObject);
138 182
         sourceArray.add(sourceObject);
139 183
         amountArray.add(amountObject);
140 184
         cwAmountArray.add(cwAmountObject);
@@ -143,6 +187,7 @@ public class CmcContractController extends BaseController
143 187
         paidAmountArray.add(paidAmountObject);
144 188
         paidCwAmountArray.add(paidCwAmountObject);
145 189
         jsonObject.put("year", yearArray);
190
+        jsonObject.put("month", monthArray);
146 191
         jsonObject.put("source", sourceArray);
147 192
         jsonObject.put("amount", amountArray);
148 193
         jsonObject.put("cwAmount", cwAmountArray);
@@ -244,44 +289,98 @@ public class CmcContractController extends BaseController
244 289
     }
245 290
 
246 291
     //院内外项目数量及金额
247
-    public void getProjectSourceStatistic(CmcContract cmcContract, JSONObject sourceObject, JSONObject paidSourceObject, JSONObject cwAmountObject, JSONObject paidCwAmountObject) {
248
-        cmcContract.setProjectSource("1");
249
-        List<CmcContract> sourceList = cmcContractService.selectCmcContractList(cmcContract);
250
-        int cCount = 0;
251
-        int wCount = 0;
292
+    public void getProjectSourceStatistic(CmcContract cmcContract, JSONObject sourceObject, JSONObject paidSourceObject, JSONObject cwAmountObject, JSONObject paidCwAmountObject,
293
+                                          int count, int paidCount, BigDecimal amount, BigDecimal paidAmount) {
294
+        int cCount;
295
+        int wCount;
296
+        int nCount;
297
+        int paidCCount = 0;
298
+        int paidWCount = 0;
299
+        int paidNCount;
252 300
         BigDecimal cAmount = new BigDecimal(0);
253 301
         BigDecimal wAmount = new BigDecimal(0);
302
+        BigDecimal nAmount;
254 303
         BigDecimal paidCAmount = new BigDecimal(0);
255 304
         BigDecimal paidWAmount = new BigDecimal(0);
305
+        BigDecimal paidNAmount;
306
+        cmcContract.setProjectSource("1");
307
+        List<CmcContract> sourceList = cmcContractService.selectCmcContractList(cmcContract);
308
+        wCount = sourceList.size();
256 309
         for (CmcContract contract : sourceList) {
257 310
             if (contract.getAmount() != null)
258 311
                 wAmount = wAmount.add(contract.getAmount());
259 312
             if (contract.getPaidAmount() != null) {
260 313
                 paidWAmount = paidWAmount.add(contract.getPaidAmount());
261 314
                 if (contract.getPaidAmount().compareTo(contract.getAmount()) >= 0)
262
-                    wCount ++;
315
+                    paidWCount ++;
263 316
             }
264 317
         }
265
-        sourceObject.put("院外项目", sourceList.size());
266
-        paidSourceObject.put("已完成回款院外项目", wCount);
318
+        nCount = count - wCount;
319
+        paidNCount = paidCount - wCount;
320
+        nAmount = amount.subtract(wAmount);
321
+        paidNAmount = paidAmount.subtract(paidWAmount);
322
+        sourceObject.put("院外项目", wCount);
323
+        paidSourceObject.put("已完成回款院外项目", paidWCount);
267 324
         cwAmountObject.put("院外项目承接金额", wAmount);
268 325
         paidCwAmountObject.put("院外项目回款金额", paidWAmount);
269 326
         cmcContract.setProjectSource("0");
270 327
         sourceList = cmcContractService.selectCmcContractList(cmcContract);
328
+        cCount = sourceList.size();
271 329
         for (CmcContract contract : sourceList) {
272 330
             if (contract.getAmount() != null)
273 331
                 cAmount = cAmount.add(contract.getAmount());
274 332
             if (contract.getPaidAmount() != null) {
275 333
                 paidCAmount = paidCAmount.add(contract.getPaidAmount());
276 334
                 if (contract.getPaidAmount().compareTo(contract.getAmount()) >= 0)
277
-                    cCount ++;
335
+                    paidCCount ++;
278 336
             }
279 337
         }
280
-        sourceObject.put("院内项目", sourceList.size());
281
-        paidSourceObject.put("已完成回款院内项目", cCount);
338
+        nCount = nCount - cCount;
339
+        paidNCount = paidNCount - cCount;
340
+        nAmount = nAmount.subtract(cAmount);
341
+        paidNAmount = paidNAmount.subtract(paidCAmount);
342
+        sourceObject.put("院内项目", cCount);
343
+        paidSourceObject.put("已完成回款院内项目", paidCCount);
282 344
         cwAmountObject.put("院内项目承接金额", cAmount);
283 345
         paidCwAmountObject.put("院内项目回款金额", paidCAmount);
284 346
         cmcContract.setProjectSource(null);
347
+        sourceObject.put("未关联项目", nCount);
348
+        paidSourceObject.put("已完成回款未关联项目", paidNCount);
349
+        cwAmountObject.put("未关联项目承接金额", nAmount);
350
+        paidCwAmountObject.put("未关联项目回款金额", paidNAmount);
351
+    }
352
+    /**
353
+     * 获取两个日期之间的所有月份 (年月)
354
+     *
355
+     * @param startTime
356
+     * @param endTime
357
+     * @return:YYYY-MM
358
+     */
359
+    public static List<String> getMonthBetweenDate(String startTime, String endTime){
360
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
361
+        // 声明保存日期集合
362
+        List<String> list = new ArrayList<String>();
363
+        try {
364
+            // 转化成日期类型
365
+            Date startDate = sdf.parse(startTime);
366
+            Date endDate = sdf.parse(endTime);
367
+
368
+            //用Calendar 进行日期比较判断
369
+            Calendar calendar = Calendar.getInstance();
370
+            while (startDate.getTime()<=endDate.getTime()){
371
+                // 把日期添加到集合
372
+                list.add(sdf.format(startDate));
373
+                // 设置日期
374
+                calendar.setTime(startDate);
375
+                //把日期增加一天
376
+                calendar.add(Calendar.MONTH, 1);
377
+                // 获取增加后的日期
378
+                startDate=calendar.getTime();
379
+            }
380
+        } catch (ParseException e) {
381
+            e.printStackTrace();
382
+        }
383
+        return list;
285 384
     }
286 385
 
287 386
 }

+ 8
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/mapper/CmcContractMapper.java 파일 보기

@@ -37,6 +37,14 @@ public interface CmcContractMapper
37 37
      */
38 38
     public List<CmcContract> selectCmcContractList(CmcContract cmcContract);
39 39
 
40
+    /**
41
+     * 按时间范围查询cmc合同评审列表
42
+     *
43
+     * @param cmcContract cmc合同评审
44
+     * @return cmc合同评审集合
45
+     */
46
+    public List<CmcContract> selectCmcContractListByRange(CmcContract cmcContract);
47
+
40 48
     /**
41 49
      * 新增cmc合同评审
42 50
      * 

+ 8
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/service/ICmcContractService.java 파일 보기

@@ -38,6 +38,14 @@ public interface ICmcContractService
38 38
      */
39 39
     public List<CmcContract> selectCmcContractList(CmcContract cmcContract);
40 40
 
41
+    /**
42
+     * 按时间范围查询cmc合同评审列表
43
+     *
44
+     * @param cmcContract cmc合同评审
45
+     * @return cmc合同评审集合
46
+     */
47
+    public List<CmcContract> selectCmcContractListByRange(CmcContract cmcContract);
48
+
41 49
     /**
42 50
      * 新增cmc合同评审
43 51
      * 

+ 12
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/service/impl/CmcContractServiceImpl.java 파일 보기

@@ -57,6 +57,18 @@ public class CmcContractServiceImpl implements ICmcContractService
57 57
         return cmcContractMapper.selectCmcContractList(cmcContract);
58 58
     }
59 59
 
60
+    /**
61
+     * 按时间范围查询cmc合同评审列表
62
+     *
63
+     * @param cmcContract cmc合同评审
64
+     * @return cmc合同评审
65
+     */
66
+    @Override
67
+    public List<CmcContract> selectCmcContractListByRange(CmcContract cmcContract)
68
+    {
69
+        return cmcContractMapper.selectCmcContractListByRange(cmcContract);
70
+    }
71
+
60 72
     /**
61 73
      * 新增cmc合同评审
62 74
      * 

+ 26
- 0
oa-back/ruoyi-system/src/main/resources/mapper/oa/CmcContractMapper.xml 파일 보기

@@ -109,6 +109,32 @@
109 109
             <if test="projectSource != null  and projectSource != ''"> and p.project_source = #{projectSource}</if>
110 110
             <if test="projectName != null  and projectName != ''"> and p.project_name like concat('%', #{projectName}, '%')</if>
111 111
             <if test="partyAName != null  and partyAName != ''"> and pa.party_a_name like concat('%', #{partyAName}, '%')</if>
112
+        </where>
113
+        group by c.contract_id
114
+        order by c.draft_time desc
115
+    </select>
116
+
117
+    <select id="selectCmcContractListByRange" parameterType="CmcContract" resultMap="CmcContractResult">
118
+        <include refid="selectCmcContractVo"/>
119
+        <where>
120
+            <if test="contractId != null  and contractId != ''"> and c.contract_id like concat('%', #{contractId}, '%')</if>
121
+            <if test="contractName!= null  and contractName != ''"> and c.contract_name like concat('%', #{contractName}, '%')</if>
122
+            <if test="contractCode!= null  and contractCode != ''"> and c.contract_code like concat('%', #{contractCode}, '%')</if>
123
+            <if test="tenderId != null  and tenderId != ''"> and c.tender_id = #{tenderId}</if>
124
+            <if test="contractNumber != null  and contractNumber != ''"> and c.contract_number = #{contractNumber}</if>
125
+            <if test="partyAId != null  and partyAId != ''"> and c.party_a_id = #{partyAId}</if>
126
+            <if test="amount != null "> and c.amount = #{amount}</if>
127
+            <if test="deposit != null "> and c.deposit = #{deposit}</if>
128
+            <if test="contractDocument != null  and contractDocument != ''"> and c.contract_document = #{contractDocument}</if>
129
+            <if test="drafter != null "> and c.drafter = #{drafter}</if>
130
+            <if test="draftTime != null "> and c.draft_time = #{draftTime}</if>
131
+            <if test="signDate != null"> and YEAR(c.sign_date) = YEAR(#{signDate})</if>
132
+            <if test="signRemark != null  and signRemark != ''"> and c.sign_remark = #{signRemark}</if>
133
+            <if test="signScan != null  and signScan != ''"> and c.sign_scan = #{signScan}</if>
134
+            <if test="commentType != null  and commentType != ''"> and c.comment_type = #{commentType}</if>
135
+            <if test="projectSource != null  and projectSource != ''"> and p.project_source = #{projectSource}</if>
136
+            <if test="projectName != null  and projectName != ''"> and p.project_name like concat('%', #{projectName}, '%')</if>
137
+            <if test="partyAName != null  and partyAName != ''"> and pa.party_a_name like concat('%', #{partyAName}, '%')</if>
112 138
             <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
113 139
                 and date_format(c.sign_date,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
114 140
             </if>

Loading…
취소
저장