Commit 8015840e511c497d3b529b84a6f86193712ed728
1 parent
56ba16e6
feat : 1.增加生成对账单的Excel功能(AccountStatement)
2.对于invoice和check的状态增加 两个状态,提供两个状态的手动设置接口 3.添加扣款单审核功能(需要手动审核) fix : 1.以前数据库中存储文件oss的永久链接访问,现在只存储文件oss的前缀域名和文件名,后续获取文件都是采用拼接accesskey实时链接获取 2.对于订单状态重新设置
Showing
41 changed files
with
1919 additions
and
210 deletions
src/main/java/com/order/erp/common/constant/Constant.java
@@ -162,7 +162,7 @@ public class Constant { | @@ -162,7 +162,7 @@ public class Constant { | ||
162 | public static final int SEVEN = 7; | 162 | public static final int SEVEN = 7; |
163 | public static final int FOURTEEN= 14; | 163 | public static final int FOURTEEN= 14; |
164 | public static final int THIRTY = 30; | 164 | public static final int THIRTY = 30; |
165 | - | 165 | + public static final int SIXTY = 60; |
166 | public static final int TWENTY_FIRST = 21; | 166 | public static final int TWENTY_FIRST = 21; |
167 | 167 | ||
168 | 168 | ||
@@ -337,7 +337,7 @@ public class Constant { | @@ -337,7 +337,7 @@ public class Constant { | ||
337 | * redis过期时间。 | 337 | * redis过期时间。 |
338 | */ | 338 | */ |
339 | public static final long REDIS_EMAIL_TIME = 90; | 339 | public static final long REDIS_EMAIL_TIME = 90; |
340 | - | 340 | + public static final long ONEPOINTNINE_HOURS = 6840; //1.9个小时 114分钟。 |
341 | public static final String FINANCE_EVENT_TIME = "请自行去系统中查询!"; | 341 | public static final String FINANCE_EVENT_TIME = "请自行去系统中查询!"; |
342 | 342 | ||
343 | public static final String FINANCE_EVENT_TITLE_INNERNO = " , 对应内部编号为 : "; | 343 | public static final String FINANCE_EVENT_TITLE_INNERNO = " , 对应内部编号为 : "; |
@@ -345,4 +345,13 @@ public class Constant { | @@ -345,4 +345,13 @@ public class Constant { | ||
345 | public static final String FINANCE_EVENT_TITLE_PROJECTNO = " , 对应项目号为 : "; | 345 | public static final String FINANCE_EVENT_TITLE_PROJECTNO = " , 对应项目号为 : "; |
346 | public static final String ORDERBASEINFO_PRODUCTIONCOMMENT = " , 更新信息为 : "; | 346 | public static final String ORDERBASEINFO_PRODUCTIONCOMMENT = " , 更新信息为 : "; |
347 | 347 | ||
348 | + /** | ||
349 | + * 文件oss。 | ||
350 | + */ | ||
351 | + public static final String OSS_PIC_URL="oss_pic_url"; //图片资源 | ||
352 | + public static final String OSS_SMALL_PIC_URL="oss_small_pic_url"; //缩略图资源 | ||
353 | + public static final String OSS_INVOICE_DEDUCT_URL="oss_invoice_deduct_url"; //invoice扣款单 | ||
354 | + public static final String OSS_CHECK_DEDUCT_URL="oss_check_deduct_url"; //check扣款单 | ||
355 | + public static final String OSS_BG_URL="oss_bg_url"; //报关单 | ||
356 | + public static final String OSS_INVOICE_URL="oss_invoice_url"; //发票 | ||
348 | } | 357 | } |
src/main/java/com/order/erp/common/utils/AccountStatementExcel.java
0 → 100644
1 | +package com.order.erp.common.utils; | ||
2 | + | ||
3 | +import com.order.erp.common.constant.Constant; | ||
4 | +import com.order.erp.domain.excel.AccountStatementExcelVO; | ||
5 | +import lombok.extern.slf4j.Slf4j; | ||
6 | +import org.apache.poi.ss.usermodel.*; | ||
7 | +import org.apache.poi.ss.util.CellRangeAddress; | ||
8 | +import org.apache.poi.util.IOUtils; | ||
9 | +import org.apache.poi.xssf.usermodel.XSSFWorkbook; | ||
10 | +import org.joda.time.DateTime; | ||
11 | +import org.springframework.stereotype.Service; | ||
12 | + | ||
13 | +import javax.servlet.http.HttpServletResponse; | ||
14 | +import java.io.IOException; | ||
15 | +import java.io.InputStream; | ||
16 | +import java.net.URL; | ||
17 | +import java.util.HashMap; | ||
18 | +import java.util.List; | ||
19 | +@Service | ||
20 | +@Slf4j | ||
21 | +public class AccountStatementExcel { | ||
22 | + public void AccountStatementExcel(HttpServletResponse response, List<AccountStatementExcelVO> accountStatementExcelVOList) throws IOException { | ||
23 | + Workbook workbook = new XSSFWorkbook(); | ||
24 | + Sheet sheet = workbook.createSheet("对账单"); | ||
25 | + Font font = workbook.createFont(); | ||
26 | + font.setFontHeightInPoints((short) 14); | ||
27 | + | ||
28 | + CellStyle borderStyle = workbook.createCellStyle(); | ||
29 | + borderStyle.setFont(font); | ||
30 | + borderStyle.setBorderTop(BorderStyle.THIN); | ||
31 | + borderStyle.setBorderBottom(BorderStyle.THIN); | ||
32 | + borderStyle.setBorderLeft(BorderStyle.THIN); | ||
33 | + borderStyle.setBorderRight(BorderStyle.THIN); | ||
34 | + | ||
35 | + Row titleRow = sheet.createRow(0); // 第一行 | ||
36 | + Cell titleheaderCell = titleRow.createCell(0); | ||
37 | + titleheaderCell.setCellValue(accountStatementExcelVOList.get(0).getTitleCompany()); // 设置你想要的标题内容 | ||
38 | + titleheaderCell.setCellStyle(borderStyle); // 设置样式 | ||
39 | + | ||
40 | + CellStyle titleStyle = workbook.createCellStyle(); | ||
41 | + Font titleFont = workbook.createFont(); | ||
42 | + titleFont.setFontHeightInPoints((short) 20); | ||
43 | + titleStyle.setFont(titleFont); | ||
44 | + titleStyle.setAlignment(HorizontalAlignment.CENTER); // 水平居中 | ||
45 | + titleStyle.setVerticalAlignment(VerticalAlignment.CENTER); // 垂直居中 | ||
46 | + titleheaderCell.setCellStyle(titleStyle); // 将样式应用到单元格 | ||
47 | + | ||
48 | +// 合并单元格(例如合并 A1 到 L1) | ||
49 | + sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 11)); | ||
50 | + | ||
51 | +// 设置标题栏的列宽 | ||
52 | + for (int i = 0; i < 12; i++) { | ||
53 | + sheet.setColumnWidth(i, 5000); // 根据需求调整宽度 | ||
54 | + } | ||
55 | + titleRow.setHeightInPoints(30); | ||
56 | +// 设置每页的顶部重复显示标题栏 | ||
57 | + sheet.setRepeatingRows(new CellRangeAddress(0,1,-1,-1)); // 从第1行到第2行(即标题行和生产科,内部编号等等那一行)在每一页重复显示 | ||
58 | + | ||
59 | + Row headerRow = sheet.createRow(1); | ||
60 | + String[] headers = {"生产科", "内部编号", "Client PC", "STYLE", "REFERENCE", "颜色中文", "PIC 图片", "数量", "拖货时间", "包装类型", "生产科单价", "生产科总价"}; | ||
61 | + for (int i = 0; i < headers.length; i++) { | ||
62 | + Cell cell = headerRow.createCell(i); | ||
63 | + cell.setCellValue(headers[i]); | ||
64 | + cell.setCellStyle(borderStyle); | ||
65 | + } | ||
66 | + | ||
67 | + long totalQuantity = 0; | ||
68 | + double totalPrice = 0; | ||
69 | + | ||
70 | + for (int i = 0; i < accountStatementExcelVOList.size(); i++) { | ||
71 | + AccountStatementExcelVO item = accountStatementExcelVOList.get(i); | ||
72 | + | ||
73 | + URL imageURL = new URL( AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(item.getSmallPicUrl()),SplitUrlGetBucketName.getFileName(item.getSmallPicUrl()),new DateTime().plusYears(Constant.ENABLE_TEN).toDate())); | ||
74 | + InputStream inputStream = imageURL.openStream(); | ||
75 | + byte[] imageBytes = IOUtils.toByteArray(inputStream); | ||
76 | + int pictureIndex = workbook.addPicture(imageBytes, Workbook.PICTURE_TYPE_PNG); | ||
77 | + inputStream.close(); | ||
78 | + | ||
79 | + CreationHelper helper = workbook.getCreationHelper(); | ||
80 | + Drawing<?> drawing = sheet.createDrawingPatriarch(); | ||
81 | + ClientAnchor anchor = helper.createClientAnchor(); | ||
82 | + anchor.setCol1(6); | ||
83 | + anchor.setRow1(i + 2); | ||
84 | + anchor.setAnchorType(ClientAnchor.AnchorType.DONT_MOVE_AND_RESIZE); | ||
85 | + | ||
86 | + Picture picture = drawing.createPicture(anchor, pictureIndex); | ||
87 | + picture.resize(1.0); | ||
88 | + | ||
89 | + Row row = sheet.createRow(i + 2); | ||
90 | + String[] rowData = { | ||
91 | + item.getProductionDepartment(), item.getInnerNo(), item.getCustomerPo(), | ||
92 | + item.getCustomerStyle(), item.getModeleLo(), item.getCnColor(), | ||
93 | + item.getSmallPicUrl(), String.valueOf(item.getOrderCount()), | ||
94 | + item.getProductionDepartmentConsignTime().split(" ")[0], item.getPacketType(), | ||
95 | + "¥" + String.format("%.2f", item.getProductionDepartmentPrice()), | ||
96 | + "¥" + String.format("%.2f", item.getProductionDepartmentTotalPrice()) | ||
97 | + }; | ||
98 | + | ||
99 | + for (int j = 0; j < rowData.length; j++) { | ||
100 | + Cell cell = row.createCell(j); | ||
101 | + cell.setCellValue(rowData[j]); | ||
102 | + cell.setCellStyle(borderStyle); | ||
103 | + } | ||
104 | + | ||
105 | + totalQuantity += item.getOrderCount(); | ||
106 | + totalPrice += item.getProductionDepartmentTotalPrice(); | ||
107 | + row.setHeightInPoints(90); | ||
108 | + } | ||
109 | + | ||
110 | + int lastRowNum = accountStatementExcelVOList.size() + 2; | ||
111 | + Row totalRow = sheet.createRow(lastRowNum); | ||
112 | + for (int j = 0; j < 12; j++) { | ||
113 | + totalRow.createCell(j); | ||
114 | + } | ||
115 | + | ||
116 | + totalRow.getCell(0).setCellValue("合计"); | ||
117 | + totalRow.getCell(7).setCellValue(totalQuantity ); | ||
118 | + totalRow.getCell(11).setCellValue(totalPrice > 0 ? "¥" + String.format("%.2f", totalPrice) : "无数据"); | ||
119 | + | ||
120 | + | ||
121 | + | ||
122 | + for (int j = 0; j < 12; j++) { | ||
123 | + totalRow.getCell(j).setCellStyle(borderStyle); | ||
124 | + } | ||
125 | + totalRow.setHeightInPoints(50); | ||
126 | + | ||
127 | + int[] columnWidths = {3000, 4000, 7000, 6000, 6000, 4000, 4400, 2500, 4000, 3000, 3100, 4000}; | ||
128 | + for (int i = 0; i < columnWidths.length; i++) { | ||
129 | + sheet.setColumnWidth(i, columnWidths[i]); | ||
130 | + } | ||
131 | + | ||
132 | + //两个小的表格 | ||
133 | + Font smallFont = workbook.createFont(); | ||
134 | + smallFont.setFontHeightInPoints((short) 14); | ||
135 | + // 记录开始行 | ||
136 | + int smallTableStartRow = lastRowNum + 2; | ||
137 | + | ||
138 | + List<HashMap<String, Double>> disbursement = accountStatementExcelVOList.get(0).getDisbursement(); | ||
139 | + List<HashMap<String, Double>> deduction = accountStatementExcelVOList.get(0).getDeduction(); | ||
140 | + | ||
141 | +// 小表格边框样式 | ||
142 | + CellStyle smallTableStyle = workbook.createCellStyle(); | ||
143 | + smallTableStyle.setFont(smallFont); | ||
144 | + smallTableStyle.setBorderTop(BorderStyle.THIN); | ||
145 | + smallTableStyle.setBorderBottom(BorderStyle.THIN); | ||
146 | + smallTableStyle.setBorderLeft(BorderStyle.THIN); | ||
147 | + smallTableStyle.setBorderRight(BorderStyle.THIN); | ||
148 | + smallTableStyle.setAlignment(HorizontalAlignment.CENTER); | ||
149 | + | ||
150 | +// **加粗标题样式** | ||
151 | + CellStyle boldTitleStyle = workbook.createCellStyle(); | ||
152 | + Font boldFont = workbook.createFont(); | ||
153 | + boldFont.setBold(true); | ||
154 | + boldFont.setFontHeightInPoints((short) 14); | ||
155 | + boldTitleStyle.setFont(boldFont); | ||
156 | + boldTitleStyle.setAlignment(HorizontalAlignment.CENTER); | ||
157 | + | ||
158 | +// 创建黄色背景的单元格样式 | ||
159 | + CellStyle yellowBackgroundStyle = workbook.createCellStyle(); | ||
160 | + yellowBackgroundStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex()); | ||
161 | + yellowBackgroundStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); // 设置为实心背景 | ||
162 | + | ||
163 | +// **左侧小表格(扣费费用)** | ||
164 | + Row leftTitleRow = sheet.getRow(smallTableStartRow); | ||
165 | + if (leftTitleRow == null) { | ||
166 | + leftTitleRow = sheet.createRow(smallTableStartRow); | ||
167 | + } | ||
168 | + Cell titleCell = leftTitleRow.createCell(2); | ||
169 | + titleCell.setCellValue("扣费项目"); | ||
170 | + titleCell.setCellStyle(boldTitleStyle); | ||
171 | + titleCell.setCellStyle(yellowBackgroundStyle); | ||
172 | + | ||
173 | + Row leftHeaderRow = sheet.createRow(smallTableStartRow + 1); | ||
174 | + Cell nameHeaderCell = leftHeaderRow.createCell(2); | ||
175 | + Cell amountHeaderCell = leftHeaderRow.createCell(3); | ||
176 | + nameHeaderCell.setCellValue("名称"); | ||
177 | + amountHeaderCell.setCellValue("金额"); | ||
178 | + nameHeaderCell.setCellStyle(boldTitleStyle); | ||
179 | + amountHeaderCell.setCellStyle(boldTitleStyle); | ||
180 | + | ||
181 | + int rowIndex = smallTableStartRow + 2; | ||
182 | + double totalDisbursement = 0.0; | ||
183 | + | ||
184 | + | ||
185 | + for (HashMap<String, Double> map : disbursement) { | ||
186 | + for (String key : map.keySet()) { | ||
187 | + Row row = sheet.getRow(rowIndex); | ||
188 | + if (row == null) { | ||
189 | + row = sheet.createRow(rowIndex); | ||
190 | + } | ||
191 | + | ||
192 | + Cell nameCell = row.createCell(2); | ||
193 | + Cell amountCell = row.createCell(3); | ||
194 | + | ||
195 | + | ||
196 | + | ||
197 | + nameCell.setCellValue(key); | ||
198 | + amountCell.setCellValue("¥"+String.format("%.2f",map.get(key))); | ||
199 | + | ||
200 | + nameCell.setCellStyle(smallTableStyle); | ||
201 | + amountCell.setCellStyle(smallTableStyle); | ||
202 | + | ||
203 | + row.setHeightInPoints(30); | ||
204 | + rowIndex++; | ||
205 | + | ||
206 | + totalDisbursement += map.get(key); | ||
207 | + | ||
208 | + } | ||
209 | + } | ||
210 | + | ||
211 | +// **左侧合计行** | ||
212 | +// **创建合并样式** | ||
213 | + CellStyle boldBorderStyle = workbook.createCellStyle(); | ||
214 | + boldBorderStyle.cloneStyleFrom(smallTableStyle); // 继承边框样式 | ||
215 | + boldBorderStyle.setFont(boldFont); // 加粗 | ||
216 | + | ||
217 | +// **左侧合计行** | ||
218 | + Row leftTotalRow = sheet.createRow(rowIndex); | ||
219 | + Cell totalTitleCell = leftTotalRow.createCell(2); | ||
220 | + Cell totalValueCell = leftTotalRow.createCell(3); | ||
221 | + | ||
222 | + totalTitleCell.setCellValue("合计"); | ||
223 | + totalValueCell.setCellValue("¥"+String.format("%.2f",totalDisbursement)); | ||
224 | + | ||
225 | + totalTitleCell.setCellStyle(boldBorderStyle); | ||
226 | + totalValueCell.setCellStyle(boldBorderStyle); | ||
227 | + | ||
228 | + rowIndex=rowIndex+1; | ||
229 | +// **右侧小表格(垫带费用)** | ||
230 | +// 增加一个空白行以增加间距 | ||
231 | + int totalAmountRowStart= rowIndex++; // 在创建“代垫费用”标题之前增加一个空白行 | ||
232 | + | ||
233 | + Row rightTitleRow = sheet.createRow(rowIndex); // 创建代垫费用标题 | ||
234 | + rightTitleRow.createCell(2).setCellValue("代垫费用"); | ||
235 | + rightTitleRow.getCell(2).setCellStyle(boldTitleStyle); | ||
236 | + | ||
237 | +// **设置黄色背景** | ||
238 | + rightTitleRow.getCell(2).setCellStyle(yellowBackgroundStyle); | ||
239 | + | ||
240 | + rowIndex++; // 下一行开始填充数据 | ||
241 | + Row rightHeaderRow = sheet.createRow(rowIndex); // 创建表头 | ||
242 | + rightHeaderRow.createCell(2).setCellValue("名称"); | ||
243 | + rightHeaderRow.createCell(3).setCellValue("金额"); | ||
244 | + | ||
245 | +// **为表头添加黄色背景** | ||
246 | + rightHeaderRow.getCell(2).setCellStyle(yellowBackgroundStyle); | ||
247 | + rightHeaderRow.getCell(3).setCellStyle(yellowBackgroundStyle); | ||
248 | + | ||
249 | + rightHeaderRow.getCell(2).setCellStyle(boldTitleStyle); | ||
250 | + rightHeaderRow.getCell(3).setCellStyle(boldTitleStyle); | ||
251 | + | ||
252 | + rowIndex++; // 继续到下一行 | ||
253 | + double totalDeduction = 0.0; | ||
254 | + | ||
255 | + for (HashMap<String, Double> map : deduction) { | ||
256 | + for (String key : map.keySet()) { | ||
257 | + Row row = sheet.getRow(rowIndex); | ||
258 | + if (row == null) { | ||
259 | + row = sheet.createRow(rowIndex); | ||
260 | + } | ||
261 | + row.createCell(2).setCellValue(key); | ||
262 | + row.createCell(3).setCellValue("¥"+String.format("%.2f",map.get(key))); | ||
263 | + | ||
264 | + row.getCell(2).setCellStyle(smallTableStyle); | ||
265 | + row.getCell(3).setCellStyle(smallTableStyle); | ||
266 | + row.setHeightInPoints(30); | ||
267 | + rowIndex++; | ||
268 | + | ||
269 | + totalDeduction += map.get(key); // 计算合计 | ||
270 | + } | ||
271 | + } | ||
272 | + | ||
273 | +// **右侧合计行** | ||
274 | + Row rightTotalRow = sheet.createRow(rowIndex); | ||
275 | + rightTotalRow.createCell(2).setCellValue("合计"); | ||
276 | + rightTotalRow.createCell(3).setCellValue("¥"+String.format("%.2f",totalDeduction)); | ||
277 | + | ||
278 | +// **添加边框样式到合计行** | ||
279 | + CellStyle totalCellStyle = workbook.createCellStyle(); | ||
280 | + totalCellStyle.cloneStyleFrom(boldBorderStyle); | ||
281 | + totalCellStyle.setBorderBottom(BorderStyle.THIN); | ||
282 | + totalCellStyle.setBorderTop(BorderStyle.THIN); | ||
283 | + totalCellStyle.setBorderLeft(BorderStyle.THIN); | ||
284 | + totalCellStyle.setBorderRight(BorderStyle.THIN); | ||
285 | + | ||
286 | + rightTotalRow.getCell(2).setCellStyle(totalCellStyle); | ||
287 | + rightTotalRow.getCell(3).setCellStyle(totalCellStyle); | ||
288 | + | ||
289 | + | ||
290 | +// 调整小表格列宽 | ||
291 | + sheet.setColumnWidth(2, 7000); | ||
292 | + sheet.setColumnWidth(3, 6000); | ||
293 | + | ||
294 | + // 计算总金额: 大表合计 - 小表格合计 | ||
295 | + double totalAmount = totalPrice - totalDisbursement - totalDeduction; | ||
296 | + | ||
297 | +// 在两个小表格的右方展示总金额 | ||
298 | + Row totalAmountRow = sheet.createRow(totalAmountRowStart); // 新建行 | ||
299 | + totalAmountRow.createCell(10).setCellValue("总金额"); | ||
300 | + totalAmountRow.createCell(11).setCellValue("¥"+String.format("%.2f", totalAmount)); | ||
301 | + | ||
302 | +// 添加样式 | ||
303 | + CellStyle totalAmountStyle = workbook.createCellStyle(); | ||
304 | + totalAmountStyle.cloneStyleFrom(boldBorderStyle); // 继承合计行样式 | ||
305 | + totalAmountRow.getCell(10).setCellStyle(totalAmountStyle); | ||
306 | + totalAmountRow.getCell(11).setCellStyle(totalAmountStyle); | ||
307 | + | ||
308 | + | ||
309 | + | ||
310 | + | ||
311 | + PrintSetup printSetup = sheet.getPrintSetup(); | ||
312 | + printSetup.setPaperSize(PrintSetup.A4_PAPERSIZE); | ||
313 | + sheet.setFitToPage(true); | ||
314 | + sheet.getPrintSetup().setFitWidth((short) 1); | ||
315 | + sheet.getPrintSetup().setFitHeight((short) 0); | ||
316 | + sheet.getPrintSetup().setHeaderMargin(0.5); | ||
317 | + sheet.getPrintSetup().setFooterMargin(0.5); | ||
318 | + sheet.setMargin(Sheet.TopMargin, 1.0); | ||
319 | + sheet.setMargin(Sheet.BottomMargin, 0.5); | ||
320 | + sheet.setMargin(Sheet.LeftMargin, 0.5); | ||
321 | + sheet.setMargin(Sheet.RightMargin, 0.5); | ||
322 | + | ||
323 | + Footer footer = sheet.getFooter(); | ||
324 | + footer.setCenter("第 &P 页,共 &N 页"); | ||
325 | +// response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=UTF-8"); | ||
326 | + response.setHeader("Content-Disposition", "attachment; filename=\"-.xlsx\""); | ||
327 | + workbook.write(response.getOutputStream()); | ||
328 | + workbook.close(); | ||
329 | + } | ||
330 | + | ||
331 | +} |
src/main/java/com/order/erp/common/utils/EasyPdfUtils.java
@@ -13,6 +13,7 @@ import com.order.erp.service.LocalStorageService; | @@ -13,6 +13,7 @@ import com.order.erp.service.LocalStorageService; | ||
13 | import com.order.erp.service.order.OrderBaseInfoService; | 13 | import com.order.erp.service.order.OrderBaseInfoService; |
14 | import com.order.erp.service.order.OrderProfitAnalysisService; | 14 | import com.order.erp.service.order.OrderProfitAnalysisService; |
15 | import lombok.extern.slf4j.Slf4j; | 15 | import lombok.extern.slf4j.Slf4j; |
16 | +import org.joda.time.DateTime; | ||
16 | import org.springframework.beans.BeanUtils; | 17 | import org.springframework.beans.BeanUtils; |
17 | import org.springframework.beans.factory.annotation.Value; | 18 | import org.springframework.beans.factory.annotation.Value; |
18 | import org.springframework.stereotype.Service; | 19 | import org.springframework.stereotype.Service; |
@@ -402,7 +403,8 @@ public class EasyPdfUtils { | @@ -402,7 +403,8 @@ public class EasyPdfUtils { | ||
402 | } | 403 | } |
403 | dataCellList.add(createCell(StringUtils.isNotEmpty(producePdfVO.getCnColor()) ? producePdfVO.getCnColor() : "", 100F)); | 404 | dataCellList.add(createCell(StringUtils.isNotEmpty(producePdfVO.getCnColor()) ? producePdfVO.getCnColor() : "", 100F)); |
404 | if (StringUtils.isNotBlank(producePdfVO.getPicUrl())) { | 405 | if (StringUtils.isNotBlank(producePdfVO.getPicUrl())) { |
405 | - URL url = new URL(producePdfVO.getPicUrl()); | 406 | + String onlineUrl = AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(producePdfVO.getPicUrl()), SplitUrlGetBucketName.getFileName(producePdfVO.getPicUrl()), new DateTime().plusMinutes(Constant.ENABLE_TEN).toDate()); |
407 | + URL url = new URL(onlineUrl); | ||
406 | InputStream inputStream = url.openStream(); | 408 | InputStream inputStream = url.openStream(); |
407 | File imageFile = FileUtil.inputStreamToFile(inputStream, "order" + System.currentTimeMillis() + ".png"); | 409 | File imageFile = FileUtil.inputStreamToFile(inputStream, "order" + System.currentTimeMillis() + ".png"); |
408 | 410 |
src/main/java/com/order/erp/common/utils/SplitUrlGetBucketName.java
0 → 100644
1 | +package com.order.erp.common.utils; | ||
2 | + | ||
3 | +import lombok.extern.slf4j.Slf4j; | ||
4 | + | ||
5 | +import java.io.UnsupportedEncodingException; | ||
6 | +import java.net.URLDecoder; | ||
7 | +import java.nio.charset.StandardCharsets; | ||
8 | +import java.util.regex.Matcher; | ||
9 | +import java.util.regex.Pattern; | ||
10 | + | ||
11 | +@Slf4j | ||
12 | +public class SplitUrlGetBucketName { | ||
13 | + //获取文件名称以及域名。 | ||
14 | + /** | ||
15 | + 例如: https://alterego.oss-cn-qingdao.aliyuncs.com/Thumbnails-1731807674577-943%E5%9B%BE%E7%89%871.png?accesskey=.... | ||
16 | + ==> | ||
17 | + https://alterego.oss-cn-qingdao.aliyuncs.com/Thumbnails-1731807674577-943%E5%9B%BE%E7%89%871.png | ||
18 | + */ | ||
19 | + public static String getUrlFileName(String url){ | ||
20 | + if(StringUtils.isNotEmpty(url)){ | ||
21 | + return url.split("\\?")[0]; | ||
22 | + } | ||
23 | + return null; | ||
24 | + } | ||
25 | + | ||
26 | + //获取bucket名称。 | ||
27 | + /** | ||
28 | + * 例如: https://alterego.oss-cn-qingdao.aliyuncs.com/Thumbnails-1731807674577-943%E5%9B%BE%E7%89%871.png | ||
29 | + * ==> | ||
30 | + * alterego | ||
31 | + * */ | ||
32 | + public static String getBucket(String url){ | ||
33 | + if(StringUtils.isNotEmpty(url)){ | ||
34 | + String domain = url.replaceFirst("^https?://", "").split("/")[0]; | ||
35 | + return domain.split("\\.")[0]; | ||
36 | + } | ||
37 | + return null; | ||
38 | + | ||
39 | + } | ||
40 | + //获取文件名称。 | ||
41 | + /** | ||
42 | + * 例如:Thumbnails-1731807674577-943%E5%9B%BE%E7%89%871.png,如果原始文件中有中文,就返回中文,因为后续还会编码变成乱码,要是这里不返回中文,后面再次编码就相当于中文编码再编码了。 | ||
43 | + * 如果不为中文,则返回文件名。因为不包含中文名的文件名不会编译成乱码。为原始文件名。 | ||
44 | + */ | ||
45 | + public static String getFileName(String url){ | ||
46 | + if(StringUtils.isNotEmpty(url)){ | ||
47 | + //在上传pdf文件时,有时候存到数据库中,会在文件名前加上/upload_file_oss前缀,所以在这里判断一下。 | ||
48 | + /** | ||
49 | + * https://alterego.oss-cn-qingdao.aliyuncs.com/Thumbnails-1731807674577-943%E5%9B%BE%E7%89%871.png 则返回 Thumbnails-1731807674577-943%E5%9B%BE%E7%89%871.png | ||
50 | + * https://alterego.oss-cn-qingdao.aliyuncs.com/upload_file_oss/Thumbnails-1731807674577-943%E5%9B%BE%E7%89%871.pdf 则返回upload_file_oss/Thumbnails-1731807674577-943%E5%9B%BE%E7%89%871.pdf | ||
51 | + * */ | ||
52 | + if(url.contains("/upload_file_oss")){ | ||
53 | + String path = url.replaceFirst("https://[^/]+/", ""); | ||
54 | + try { | ||
55 | + return URLDecoder.decode(path, StandardCharsets.UTF_8.name()); | ||
56 | + } catch (UnsupportedEncodingException e) { | ||
57 | + throw new RuntimeException("文件名称解析失败"+e); | ||
58 | + } | ||
59 | + }else{ | ||
60 | + String regex = "%[0-9A-Fa-f]{2}"; | ||
61 | + Pattern pattern = Pattern.compile(regex); | ||
62 | + String fileName = url.substring(url.lastIndexOf("/") + 1); | ||
63 | + Matcher matcher = pattern.matcher(fileName); | ||
64 | + if(matcher.find()){ | ||
65 | + // URL 解码 如果包含中文名称就进行解析,回显中文名称。 | ||
66 | + try { | ||
67 | + return URLDecoder.decode(fileName, StandardCharsets.UTF_8.name()); | ||
68 | + // 判断解码后的文件名是否是中文字符 | ||
69 | + } catch (UnsupportedEncodingException e) { | ||
70 | + throw new RuntimeException("文件名称解析失败:"+e); | ||
71 | + } | ||
72 | + }else{ | ||
73 | + return fileName; | ||
74 | + } | ||
75 | + } | ||
76 | + } | ||
77 | + return null; | ||
78 | + } | ||
79 | +} | ||
80 | + |
src/main/java/com/order/erp/controller/AuditController.java
@@ -3,6 +3,7 @@ package com.order.erp.controller; | @@ -3,6 +3,7 @@ package com.order.erp.controller; | ||
3 | import com.order.erp.common.annotation.AnonymousAccess; | 3 | import com.order.erp.common.annotation.AnonymousAccess; |
4 | import com.order.erp.common.constant.ServerResult; | 4 | import com.order.erp.common.constant.ServerResult; |
5 | import com.order.erp.domain.AuditStatusEnum; | 5 | import com.order.erp.domain.AuditStatusEnum; |
6 | +import com.order.erp.domain.vo.order.AuditDetailQueryVO; | ||
6 | import com.order.erp.domain.vo.order.AuditVO; | 7 | import com.order.erp.domain.vo.order.AuditVO; |
7 | import com.order.erp.domain.vo.order.OrderFieldLockApplyQueryVO; | 8 | import com.order.erp.domain.vo.order.OrderFieldLockApplyQueryVO; |
8 | import com.order.erp.service.order.OrderFieldLockApplyService; | 9 | import com.order.erp.service.order.OrderFieldLockApplyService; |
@@ -85,5 +86,18 @@ public class AuditController { | @@ -85,5 +86,18 @@ public class AuditController { | ||
85 | public ServerResult doAudit(@RequestBody @Validated AuditVO auditVO) { | 86 | public ServerResult doAudit(@RequestBody @Validated AuditVO auditVO) { |
86 | return applyService.doAudit(auditVO); | 87 | return applyService.doAudit(auditVO); |
87 | } | 88 | } |
89 | + | ||
90 | + /** | ||
91 | + * 详情 | ||
92 | + * | ||
93 | + * @param auditDetailQueryVO 查询条件 | ||
94 | + * @return 查询结果 | ||
95 | + */ | ||
96 | + @ApiOperation("详情接口") | ||
97 | + @PostMapping("/audit_detail") | ||
98 | + @AnonymousAccess | ||
99 | + public ServerResult audit_detail(@RequestBody @Validated AuditDetailQueryVO auditDetailQueryVO) { | ||
100 | + return applyService.audit_detail(auditDetailQueryVO); | ||
101 | + } | ||
88 | } | 102 | } |
89 | 103 |
src/main/java/com/order/erp/controller/InvoiceBillOrderController.java
@@ -205,8 +205,8 @@ public class InvoiceBillOrderController { | @@ -205,8 +205,8 @@ public class InvoiceBillOrderController { | ||
205 | return invoiceBillOrderService.deleteDeductUrlById(deleteVo); | 205 | return invoiceBillOrderService.deleteDeductUrlById(deleteVo); |
206 | } | 206 | } |
207 | 207 | ||
208 | - /** | ||
209 | - *最后一步,确认是否已经完成最终收款,即使审核通过之后,invoice的状态为已收款,这里的作用是在已收款状态的基础上,最后手动确认是否完成收款。人工校验。 | 208 | + /** 删除 |
209 | + *最后一步,确认是否已经完成最终收款,即使审核通过之后,invoice的状态从未收款转化为待收款,,这里的作用是在待收款状态的基础上,最后手动确认是否完成收款。人工校验,状态为已收款。 | ||
210 | * @param invoiceBillDeductInfoVO id | 210 | * @param invoiceBillDeductInfoVO id |
211 | * @return | 211 | * @return |
212 | */ | 212 | */ |
src/main/java/com/order/erp/controller/OrderController.java
@@ -4,6 +4,7 @@ import com.order.erp.common.annotation.AnonymousAccess; | @@ -4,6 +4,7 @@ import com.order.erp.common.annotation.AnonymousAccess; | ||
4 | import com.order.erp.common.constant.ServerResult; | 4 | import com.order.erp.common.constant.ServerResult; |
5 | import com.order.erp.common.excel4j.exceptions.Excel4JException; | 5 | import com.order.erp.common.excel4j.exceptions.Excel4JException; |
6 | import com.order.erp.common.exception.BusinessException; | 6 | import com.order.erp.common.exception.BusinessException; |
7 | +import com.order.erp.domain.vo.AccountStatementVO; | ||
7 | import com.order.erp.domain.vo.ProducePdfVO; | 8 | import com.order.erp.domain.vo.ProducePdfVO; |
8 | import com.order.erp.domain.vo.order.*; | 9 | import com.order.erp.domain.vo.order.*; |
9 | import com.order.erp.mapper.order.OrderBaseInfoMapper; | 10 | import com.order.erp.mapper.order.OrderBaseInfoMapper; |
@@ -169,17 +170,35 @@ public class OrderController { | @@ -169,17 +170,35 @@ public class OrderController { | ||
169 | public ServerResult oneTimePassRate(@RequestBody OrderOpinionLogVO orderOpinionLogVO) { | 170 | public ServerResult oneTimePassRate(@RequestBody OrderOpinionLogVO orderOpinionLogVO) { |
170 | return orderBaseInfoService.passRate(orderOpinionLogVO); | 171 | return orderBaseInfoService.passRate(orderOpinionLogVO); |
171 | } | 172 | } |
172 | - | 173 | + /** |
174 | + * 生产指示书 | ||
175 | + * | ||
176 | + * @param producePdfVO 生成列表 | ||
177 | + * | ||
178 | + */ | ||
173 | @PostMapping("/produceReport") | 179 | @PostMapping("/produceReport") |
174 | public ServerResult produceReport(@RequestBody ProducePdfVO producePdfVO) { | 180 | public ServerResult produceReport(@RequestBody ProducePdfVO producePdfVO) { |
175 | return orderBaseInfoService.produceReport(producePdfVO); | 181 | return orderBaseInfoService.produceReport(producePdfVO); |
176 | } | 182 | } |
177 | - | 183 | + /** |
184 | + * 发送生产指示书至邮箱 | ||
185 | + * | ||
186 | + * @param producePdfVO 生成列表 | ||
187 | + * | ||
188 | + */ | ||
178 | @PostMapping("/send") | 189 | @PostMapping("/send") |
179 | public ServerResult send(@RequestBody ProducePdfVO producePdfVO) throws Exception { | 190 | public ServerResult send(@RequestBody ProducePdfVO producePdfVO) throws Exception { |
180 | return orderBaseInfoService.send(producePdfVO); | 191 | return orderBaseInfoService.send(producePdfVO); |
181 | } | 192 | } |
182 | - | ||
183 | - | 193 | + /** |
194 | + * 生产对账单 | ||
195 | + * | ||
196 | + * @param accountStatementVO 生成列表 | ||
197 | + * | ||
198 | + */ | ||
199 | + @PostMapping("/accountStatement") | ||
200 | + public ServerResult accountStatement(HttpServletResponse response,@RequestBody AccountStatementVO accountStatementVO) throws Exception { | ||
201 | + return orderBaseInfoService.accountStatement(response,accountStatementVO); | ||
202 | + } | ||
184 | } | 203 | } |
185 | 204 |
src/main/java/com/order/erp/controller/ProducePaymentCheckBillOrderController.java
@@ -217,8 +217,8 @@ public class ProducePaymentCheckBillOrderController { | @@ -217,8 +217,8 @@ public class ProducePaymentCheckBillOrderController { | ||
217 | return producePaymentCheckBillOrderService.deleteDeductUrlById(deleteVo); | 217 | return producePaymentCheckBillOrderService.deleteDeductUrlById(deleteVo); |
218 | } | 218 | } |
219 | 219 | ||
220 | - /** | ||
221 | - *最后一步,确认是否已经完成最终收款,即使审核通过之后,invoice的状态为已收款,这里的作用是在已收款状态的基础上,最后手动确认是否完成收款。人工校验。 | 220 | + /** 删除 |
221 | + *最后一步,确认是否已经完成最终收款,即使审核通过之后,check的状态从未收款转化为待收款,这里的作用是在已收款状态的基础上,最后手动确认是否完成收款。人工校验,转化为已收款状态。 | ||
222 | * @param producePaymentCheckBillInvoiceInfoVO id | 222 | * @param producePaymentCheckBillInvoiceInfoVO id |
223 | * @return | 223 | * @return |
224 | */ | 224 | */ |
@@ -226,6 +226,7 @@ public class ProducePaymentCheckBillOrderController { | @@ -226,6 +226,7 @@ public class ProducePaymentCheckBillOrderController { | ||
226 | public ServerResult isFinishStatus(@RequestBody ProducePaymentCheckBillInvoiceInfoVO producePaymentCheckBillInvoiceInfoVO) { | 226 | public ServerResult isFinishStatus(@RequestBody ProducePaymentCheckBillInvoiceInfoVO producePaymentCheckBillInvoiceInfoVO) { |
227 | return producePaymentCheckBillOrderService.isFinishStatus(producePaymentCheckBillInvoiceInfoVO); | 227 | return producePaymentCheckBillOrderService.isFinishStatus(producePaymentCheckBillInvoiceInfoVO); |
228 | } | 228 | } |
229 | + | ||
229 | } | 230 | } |
230 | 231 | ||
231 | 232 |
src/main/java/com/order/erp/domain/FinanceEnum.java
@@ -16,8 +16,10 @@ public enum FinanceEnum { | @@ -16,8 +16,10 @@ public enum FinanceEnum { | ||
16 | NOT_CREATED(-1,"未创建"), | 16 | NOT_CREATED(-1,"未创建"), |
17 | //创建了invoice号没有提交审核,或者审核被驳回了。 | 17 | //创建了invoice号没有提交审核,或者审核被驳回了。 |
18 | UNPAID_PAYMENTS(0,"未收款"), | 18 | UNPAID_PAYMENTS(0,"未收款"), |
19 | - //审核通过了。 | ||
20 | - RECEIVED_PAYMENT(10,"已收款"), | 19 | + //审核通过了。但是还是叫做待收款。 |
20 | + RECEIVED_PAYMENT(10,"待收款"), | ||
21 | + //审核通过以后叫做待收款,人工确认之后才会由待收款转化为已收款。 | ||
22 | + OK_PAYMENT(40,"已收款"), | ||
21 | ; | 23 | ; |
22 | private Integer status; | 24 | private Integer status; |
23 | 25 |
src/main/java/com/order/erp/domain/FinanceOverEnum.java
@@ -14,6 +14,10 @@ public enum FinanceOverEnum { | @@ -14,6 +14,10 @@ public enum FinanceOverEnum { | ||
14 | CHECK_FAIL("你提交的生产科对账单未通过审核","Hi All 你提交的生产科对账单未通过审核,请重新查看原因并提交审核!\n生产科对账单号为: "), | 14 | CHECK_FAIL("你提交的生产科对账单未通过审核","Hi All 你提交的生产科对账单未通过审核,请重新查看原因并提交审核!\n生产科对账单号为: "), |
15 | CHECK_INVOICEURL_PASS("你提交的生产科对账单发票通过审核","Hi All 你提交的生产科对账单发票通过审核,你现在可以提交生产科对账单了!\n生产科对账单号为: "), | 15 | CHECK_INVOICEURL_PASS("你提交的生产科对账单发票通过审核","Hi All 你提交的生产科对账单发票通过审核,你现在可以提交生产科对账单了!\n生产科对账单号为: "), |
16 | CHECK_INVOICEURL_FAIL("你提交的生产科对账单发票未通过审核","Hi All 你提交的生产科对账单未通过审核,请重新查看原因并提交审核!\n生产科对账单号为: "), | 16 | CHECK_INVOICEURL_FAIL("你提交的生产科对账单发票未通过审核","Hi All 你提交的生产科对账单未通过审核,请重新查看原因并提交审核!\n生产科对账单号为: "), |
17 | + CHECK_DEDUCTURL_PASS("你提交的生产科扣款单通过审核","Hi All 你提交的生产科扣款单通过审核,你现在可以提交生产科对账单了!\n生产科对账单号为: "), | ||
18 | + CHECK_DEDUCTURL_FAIL("你提交的生产科扣款单未通过审核","Hi All 你提交的生产科扣款单未通过审核,请重新查看原因并提交审核!\n生产科对账单号为: "), | ||
19 | + INVOICE_DEDUCTURL_PASS("你提交的invoice扣款单已通过审核","Hi All 你提交的invoice扣款单已通过审核,请查收!\nInvoice号为: "), | ||
20 | + INVOICE_DEDUCTURL_FAIL("你提交的invoice扣款单未通过审核","Hi All 你提交的invoice扣款单未通过审核,请重新查看原因并提交审核!请查收!\nInvoice号为: "), | ||
17 | ; | 21 | ; |
18 | 22 | ||
19 | private String title; | 23 | private String title; |
src/main/java/com/order/erp/domain/dto/order/InvoiceBillOrderDO.java
@@ -33,7 +33,7 @@ public class InvoiceBillOrderDO extends BaseDO implements Serializable { | @@ -33,7 +33,7 @@ public class InvoiceBillOrderDO extends BaseDO implements Serializable { | ||
33 | */ | 33 | */ |
34 | private Long orderId ; | 34 | private Long orderId ; |
35 | /** | 35 | /** |
36 | - * 报关单url地址 | 36 | + * 报关单url地址 数据库中只存储域名和文件名,不存储accesskey,所以每次获取时都应该拿着文件名去获取实时链接。 |
37 | */ | 37 | */ |
38 | private String bgUrl; | 38 | private String bgUrl; |
39 | /** | 39 | /** |
@@ -50,7 +50,7 @@ public class InvoiceBillOrderDO extends BaseDO implements Serializable { | @@ -50,7 +50,7 @@ public class InvoiceBillOrderDO extends BaseDO implements Serializable { | ||
50 | */ | 50 | */ |
51 | private BigDecimal deductAmount; | 51 | private BigDecimal deductAmount; |
52 | /** | 52 | /** |
53 | - * 扣款单url地址 | 53 | + * 扣款单url地址 数据库中只存储域名和文件名,不存储accesskey,所以每次获取时都应该拿着文件名去获取实时链接。 |
54 | */ | 54 | */ |
55 | private String deductUrl; | 55 | private String deductUrl; |
56 | /** | 56 | /** |
@@ -74,7 +74,7 @@ public class InvoiceBillOrderDO extends BaseDO implements Serializable { | @@ -74,7 +74,7 @@ public class InvoiceBillOrderDO extends BaseDO implements Serializable { | ||
74 | */ | 74 | */ |
75 | private BigDecimal otherAmount; | 75 | private BigDecimal otherAmount; |
76 | /** | 76 | /** |
77 | - * 状态 -1:未创建、0:未收款,10:已收款 | 77 | + * 状态 -1:未创建、0:未收款,10:待收款 20:已收款 |
78 | */ | 78 | */ |
79 | private Integer status; | 79 | private Integer status; |
80 | //需要在表中添加字段。 | 80 | //需要在表中添加字段。 |
@@ -109,8 +109,9 @@ public class InvoiceBillOrderDO extends BaseDO implements Serializable { | @@ -109,8 +109,9 @@ public class InvoiceBillOrderDO extends BaseDO implements Serializable { | ||
109 | * */ | 109 | * */ |
110 | private String notes; | 110 | private String notes; |
111 | 111 | ||
112 | + | ||
112 | /** | 113 | /** |
113 | - * 最终完成状态,需要手动确认 状态 0:未完成,10:已完成 | 114 | + * 扣款单状态 状态 0:待审批,10:已通过 20:已驳回 |
114 | * */ | 115 | * */ |
115 | - private Integer finishStatus; | 116 | + private Integer invoiceDeductUrlStatus; |
116 | } | 117 | } |
src/main/java/com/order/erp/domain/dto/order/OrderBaseInfoDO.java
@@ -64,12 +64,12 @@ public class OrderBaseInfoDO extends BaseDO implements Serializable { | @@ -64,12 +64,12 @@ public class OrderBaseInfoDO extends BaseDO implements Serializable { | ||
64 | * 颜色中文 | 64 | * 颜色中文 |
65 | */ | 65 | */ |
66 | private String cnColor; | 66 | private String cnColor; |
67 | - /** | ||
68 | - * pic图片地址 | 67 | + /**0 |
68 | + * pic图片地址 数据库中只存储域名和文件名,不存储accesskey,所以每次获取时都应该拿着文件名去获取实时链接。 | ||
69 | */ | 69 | */ |
70 | private String picUrl; | 70 | private String picUrl; |
71 | /** | 71 | /** |
72 | - * 缩略图地址 | 72 | + * 缩略图地址 数据库中只存储域名和文件名,不存储accesskey,所以每次获取时都应该拿着文件名去获取实时链接。 |
73 | */ | 73 | */ |
74 | private String smallPicUrl; | 74 | private String smallPicUrl; |
75 | /** | 75 | /** |
src/main/java/com/order/erp/domain/dto/order/ProducePaymentCheckBillOrderDO.java
@@ -34,11 +34,11 @@ public class ProducePaymentCheckBillOrderDO extends BaseDO implements Serializab | @@ -34,11 +34,11 @@ public class ProducePaymentCheckBillOrderDO extends BaseDO implements Serializab | ||
34 | */ | 34 | */ |
35 | private Long orderId; | 35 | private Long orderId; |
36 | /** | 36 | /** |
37 | - * 发票url地址 | 37 | + * 发票url地址 数据库中只存储域名和文件名,不存储accesskey,所以每次获取时都应该拿着文件名去获取实时链接。 |
38 | */ | 38 | */ |
39 | private String invoiceUrl; | 39 | private String invoiceUrl; |
40 | /** | 40 | /** |
41 | - * 扣款单url地址 | 41 | + * 扣款单url地址 数据库中只存储域名和文件名,不存储accesskey,所以每次获取时都应该拿着文件名去获取实时链接。 |
42 | */ | 42 | */ |
43 | private String deductUrl; | 43 | private String deductUrl; |
44 | /** | 44 | /** |
@@ -118,9 +118,9 @@ public class ProducePaymentCheckBillOrderDO extends BaseDO implements Serializab | @@ -118,9 +118,9 @@ public class ProducePaymentCheckBillOrderDO extends BaseDO implements Serializab | ||
118 | * */ | 118 | * */ |
119 | private String notes; | 119 | private String notes; |
120 | /** | 120 | /** |
121 | - * 最终完成状态,需要手动确认 状态 0:未完成,10:已完成 | 121 | + * 扣款单状态 0:待审核 10:已通过 20:已驳回 |
122 | * */ | 122 | * */ |
123 | - private Integer finishStatus; | 123 | + private Integer checkDeductUrlStatus; |
124 | 124 | ||
125 | 125 | ||
126 | } | 126 | } |
src/main/java/com/order/erp/domain/excel/AccountStatementExcelVO.java
0 → 100644
1 | +package com.order.erp.domain.excel; | ||
2 | + | ||
3 | +import lombok.*; | ||
4 | +import lombok.experimental.SuperBuilder; | ||
5 | + | ||
6 | +import java.util.HashMap; | ||
7 | +import java.util.List; | ||
8 | + | ||
9 | +@Data | ||
10 | +@AllArgsConstructor | ||
11 | +@ToString | ||
12 | +@NoArgsConstructor | ||
13 | +@EqualsAndHashCode(callSuper = false) | ||
14 | +@SuperBuilder | ||
15 | +public class AccountStatementExcelVO { | ||
16 | + | ||
17 | + /** | ||
18 | + * 生产科 | ||
19 | + */ | ||
20 | + private String productionDepartment; | ||
21 | + | ||
22 | + /** | ||
23 | + * 内部编号 | ||
24 | + */ | ||
25 | + private String innerNo; | ||
26 | + | ||
27 | + /** | ||
28 | + * 客户po号(客户订单号) | ||
29 | + */ | ||
30 | + private String customerPo; | ||
31 | + | ||
32 | + /** | ||
33 | + * 客户STYLE#(客户款号) | ||
34 | + */ | ||
35 | + private String customerStyle; | ||
36 | + /** | ||
37 | + * Modelo(REFERENCE) | ||
38 | + */ | ||
39 | + private String modeleLo; | ||
40 | + /** | ||
41 | + * 颜色中文 | ||
42 | + */ | ||
43 | + private String cnColor; | ||
44 | + | ||
45 | + /** | ||
46 | + * pic图片地址(订单图片) | ||
47 | + */ | ||
48 | + private String smallPicUrl; | ||
49 | + | ||
50 | + /** | ||
51 | + * 订单数量 | ||
52 | + */ | ||
53 | + private Integer orderCount; | ||
54 | + | ||
55 | + /** | ||
56 | + * 生成科拖货时间(生产科交期) | ||
57 | + */ | ||
58 | + private String productionDepartmentConsignTime; | ||
59 | + | ||
60 | + /** | ||
61 | + * 包装类型 | ||
62 | + */ | ||
63 | + private String packetType; | ||
64 | + | ||
65 | + /** | ||
66 | + * 生成科单价¥ | ||
67 | + */ | ||
68 | + private Double productionDepartmentPrice; | ||
69 | + | ||
70 | + /** | ||
71 | + * 生成科总价¥ | ||
72 | + */ | ||
73 | + private Double productionDepartmentTotalPrice; | ||
74 | + | ||
75 | + /** | ||
76 | + * 代垫费用 | ||
77 | + * */ | ||
78 | + private List<HashMap<String,Double>> disbursement; | ||
79 | + | ||
80 | + /** | ||
81 | + * 扣款项目 | ||
82 | + * */ | ||
83 | + | ||
84 | + private List<HashMap<String,Double>> deduction; | ||
85 | + /** | ||
86 | + * 公司名称 | ||
87 | + * */ | ||
88 | + private String titleCompany; | ||
89 | + | ||
90 | +} |
src/main/java/com/order/erp/domain/vo/AccountStatementVO.java
0 → 100644
1 | +package com.order.erp.domain.vo; | ||
2 | + | ||
3 | +import lombok.AllArgsConstructor; | ||
4 | +import lombok.Data; | ||
5 | +import lombok.NoArgsConstructor; | ||
6 | +import lombok.ToString; | ||
7 | + | ||
8 | +import java.util.HashMap; | ||
9 | +import java.util.List; | ||
10 | + | ||
11 | +@Data | ||
12 | +@AllArgsConstructor | ||
13 | +@NoArgsConstructor | ||
14 | +@ToString | ||
15 | +public class AccountStatementVO { | ||
16 | + /** | ||
17 | + * 订单id。 | ||
18 | + * */ | ||
19 | + private List<Long> ids; | ||
20 | + /** | ||
21 | + * 代垫费用 | ||
22 | + * */ | ||
23 | + private List<HashMap<String,Double>> disbursement; | ||
24 | + /** | ||
25 | + * 扣款项目 | ||
26 | + * */ | ||
27 | + | ||
28 | + private List<HashMap<String,Double>> deduction; | ||
29 | + /** | ||
30 | + * 公司名称 | ||
31 | + * */ | ||
32 | + | ||
33 | + private String titleCompany; | ||
34 | +} |
src/main/java/com/order/erp/domain/vo/ImageRespVO.java
@@ -27,4 +27,12 @@ public class ImageRespVO implements Serializable { | @@ -27,4 +27,12 @@ public class ImageRespVO implements Serializable { | ||
27 | * 缩略图地址 | 27 | * 缩略图地址 |
28 | */ | 28 | */ |
29 | private String smallPicUrl; | 29 | private String smallPicUrl; |
30 | + /** | ||
31 | + * 文件name。 | ||
32 | + */ | ||
33 | + private String fileName; | ||
34 | + /** | ||
35 | + * 缩略图文件name。 | ||
36 | + */ | ||
37 | + private String SmallfileName; | ||
30 | } | 38 | } |
src/main/java/com/order/erp/domain/vo/order/AuditDetailQueryVO.java
0 → 100644
1 | +package com.order.erp.domain.vo.order; | ||
2 | + | ||
3 | +import lombok.*; | ||
4 | +import lombok.experimental.SuperBuilder; | ||
5 | +@Data | ||
6 | +@AllArgsConstructor | ||
7 | +@ToString | ||
8 | +@NoArgsConstructor | ||
9 | +@EqualsAndHashCode(callSuper = false) | ||
10 | +@SuperBuilder | ||
11 | +public class AuditDetailQueryVO { | ||
12 | + | ||
13 | + /** | ||
14 | + * 申请id | ||
15 | + */ | ||
16 | + private Long id; | ||
17 | +} |
src/main/java/com/order/erp/domain/vo/order/CheckBillResultVO.java
0 → 100644
1 | +package com.order.erp.domain.vo.order; | ||
2 | + | ||
3 | +import lombok.*; | ||
4 | +import lombok.experimental.SuperBuilder; | ||
5 | + | ||
6 | +import java.math.BigDecimal; | ||
7 | + | ||
8 | +@Data | ||
9 | +@AllArgsConstructor | ||
10 | +@ToString | ||
11 | +@NoArgsConstructor | ||
12 | +@EqualsAndHashCode(callSuper = false) | ||
13 | +@SuperBuilder | ||
14 | +public class CheckBillResultVO { | ||
15 | + /** | ||
16 | + * id | ||
17 | + */ | ||
18 | + private Long id; | ||
19 | + /** | ||
20 | + * orderId | ||
21 | + */ | ||
22 | + private Long orderId; | ||
23 | + /** | ||
24 | + * 项目号 | ||
25 | + */ | ||
26 | + private String projectNo; | ||
27 | + /** | ||
28 | + * 生产科 | ||
29 | + */ | ||
30 | + private String productionDepartment; | ||
31 | + /** | ||
32 | + * 内部编号 | ||
33 | + */ | ||
34 | + private String innerNo; | ||
35 | + /** | ||
36 | + * 缩略图片地址 这里不确认前端拿到的数据是缩略图url还是图片url,先采用缩略图url。 | ||
37 | + */ | ||
38 | + private String smallPicUrl; | ||
39 | + /** | ||
40 | + * 数量 | ||
41 | + */ | ||
42 | + private Integer orderCount; | ||
43 | + /** | ||
44 | + * Modelo(REFERENCE) | ||
45 | + */ | ||
46 | + private String modeleLo; | ||
47 | + /** | ||
48 | + * 生产科单价 | ||
49 | + */ | ||
50 | + private Double productionDepartmentPrice; | ||
51 | + /** | ||
52 | + * 生产科总价 | ||
53 | + */ | ||
54 | + private Double productionDepartmentTotalPrice; | ||
55 | + /** | ||
56 | + * 生产科对账单 | ||
57 | + */ | ||
58 | + private String checkNo; | ||
59 | + /** | ||
60 | + * 生产科必须回款日期 | ||
61 | + */ | ||
62 | + private String payedDate; | ||
63 | + /** | ||
64 | + * 生产科扣款金额 | ||
65 | + */ | ||
66 | + private BigDecimal deductAmount; | ||
67 | + /** | ||
68 | + * 生产科扣款责任部门 | ||
69 | + */ | ||
70 | + private String deductDept; | ||
71 | + /** | ||
72 | + * 扣款单url地址 | ||
73 | + */ | ||
74 | + private String deductUrl; | ||
75 | + /** | ||
76 | + * 实际应付金额 | ||
77 | + */ | ||
78 | + private BigDecimal actualPayedAmount; | ||
79 | + /** | ||
80 | + * 发票url地址 | ||
81 | + */ | ||
82 | + private String invoiceUrl; | ||
83 | + /** | ||
84 | + * 实际应付金额1 | ||
85 | + */ | ||
86 | + private BigDecimal actualPayedAmount1; | ||
87 | + /** | ||
88 | + * 实际应付金额2 | ||
89 | + */ | ||
90 | + private BigDecimal actualPayedAmount2; | ||
91 | + /** | ||
92 | + * 实际应付金额3 | ||
93 | + */ | ||
94 | + private BigDecimal actualPayedAmount3; | ||
95 | + /** | ||
96 | + * 备注。 | ||
97 | + * */ | ||
98 | + private String notes; | ||
99 | +} |
src/main/java/com/order/erp/domain/vo/order/DeductionUrlFieldVO.java
0 → 100644
1 | +package com.order.erp.domain.vo.order; | ||
2 | + | ||
3 | +import lombok.*; | ||
4 | +import lombok.experimental.SuperBuilder; | ||
5 | + | ||
6 | +import java.math.BigDecimal; | ||
7 | + | ||
8 | +@Data | ||
9 | +@AllArgsConstructor | ||
10 | +@ToString | ||
11 | +@NoArgsConstructor | ||
12 | +@EqualsAndHashCode(callSuper = false) | ||
13 | +@SuperBuilder | ||
14 | +public class DeductionUrlFieldVO { | ||
15 | + /** | ||
16 | + * 订单id,。 | ||
17 | + */ | ||
18 | + private Long id; | ||
19 | + /** | ||
20 | + * 内部编号。 | ||
21 | + */ | ||
22 | + private String innerNo; | ||
23 | + /** | ||
24 | + * 发票单号 | ||
25 | + */ | ||
26 | + private String invoiceNo; | ||
27 | + | ||
28 | + /** | ||
29 | + * 跟单员 | ||
30 | + * */ | ||
31 | + private String trackerUser; | ||
32 | + /** | ||
33 | + * 业务员 | ||
34 | + * */ | ||
35 | + private String businesPerson; | ||
36 | + /** | ||
37 | + * 财务人员 | ||
38 | + * */ | ||
39 | + private String financePerson; | ||
40 | + | ||
41 | + /** | ||
42 | + * 生产科对账单 | ||
43 | + */ | ||
44 | + private String checkNo; | ||
45 | + | ||
46 | + /** | ||
47 | + * 生产科 | ||
48 | + * */ | ||
49 | + private String productionName; | ||
50 | + | ||
51 | + /** | ||
52 | + * 扣款单 | ||
53 | + * */ | ||
54 | + private String deductUrl; | ||
55 | + /** | ||
56 | + * 扣款金额 | ||
57 | + * */ | ||
58 | + private BigDecimal deductAmount; | ||
59 | +} |
src/main/java/com/order/erp/domain/vo/order/FinanceOrderResultVO.java
@@ -86,6 +86,10 @@ public class FinanceOrderResultVO extends OrderBaseInfoVO { | @@ -86,6 +86,10 @@ public class FinanceOrderResultVO extends OrderBaseInfoVO { | ||
86 | */ | 86 | */ |
87 | private String invoiceDeductUrl; | 87 | private String invoiceDeductUrl; |
88 | /** | 88 | /** |
89 | + * 扣款单状态状态。0:待审核 10:已通过 20:已驳回 | ||
90 | + * */ | ||
91 | + private Integer invoiceDeductUrlStatus; | ||
92 | + /** | ||
89 | * 实际应收金额 | 93 | * 实际应收金额 |
90 | */ | 94 | */ |
91 | private BigDecimal invoiceActualReceivableAmount; | 95 | private BigDecimal invoiceActualReceivableAmount; |
@@ -114,10 +118,6 @@ public class FinanceOrderResultVO extends OrderBaseInfoVO { | @@ -114,10 +118,6 @@ public class FinanceOrderResultVO extends OrderBaseInfoVO { | ||
114 | * 备注信息 | 118 | * 备注信息 |
115 | * */ | 119 | * */ |
116 | private String invoiceNotes; | 120 | private String invoiceNotes; |
117 | - /** | ||
118 | - * 最终确认,0:未完成 10:已完成 | ||
119 | - * */ | ||
120 | - private Integer invoiceFinishStatus; | ||
121 | 121 | ||
122 | //应付款信息 | 122 | //应付款信息 |
123 | // private ProducePaymentCheckBillOrderDO producePaymentCheckBillOrderDO; | 123 | // private ProducePaymentCheckBillOrderDO producePaymentCheckBillOrderDO; |
@@ -154,6 +154,10 @@ public class FinanceOrderResultVO extends OrderBaseInfoVO { | @@ -154,6 +154,10 @@ public class FinanceOrderResultVO extends OrderBaseInfoVO { | ||
154 | */ | 154 | */ |
155 | private BigDecimal checkDeductAmount; | 155 | private BigDecimal checkDeductAmount; |
156 | /** | 156 | /** |
157 | + * 扣款单状态状态。0:待审核 10:已通过 20:已驳回 | ||
158 | + * */ | ||
159 | + private Integer checkDeductUrlStatus; | ||
160 | + /** | ||
157 | * 实际应付金额 | 161 | * 实际应付金额 |
158 | */ | 162 | */ |
159 | private BigDecimal checkActualPayedAmount; | 163 | private BigDecimal checkActualPayedAmount; |
@@ -182,10 +186,6 @@ public class FinanceOrderResultVO extends OrderBaseInfoVO { | @@ -182,10 +186,6 @@ public class FinanceOrderResultVO extends OrderBaseInfoVO { | ||
182 | * 备注。 | 186 | * 备注。 |
183 | * */ | 187 | * */ |
184 | private String checkNotes; | 188 | private String checkNotes; |
185 | - /** | ||
186 | - * 最终确认状态。0:未完成 10:已完成 | ||
187 | - * */ | ||
188 | - private Integer checkFinishStatus; | ||
189 | 189 | ||
190 | 190 | ||
191 | //利润信息 | 191 | //利润信息 |
src/main/java/com/order/erp/domain/vo/order/InvoiceAndCheckBillSendEmailVO.java
@@ -24,6 +24,12 @@ public class InvoiceAndCheckBillSendEmailVO { | @@ -24,6 +24,12 @@ public class InvoiceAndCheckBillSendEmailVO { | ||
24 | private ProducePaymentCheckBillOrderDO checkBillOrderDO; | 24 | private ProducePaymentCheckBillOrderDO checkBillOrderDO; |
25 | 25 | ||
26 | /** | 26 | /** |
27 | + * 扣款单 | ||
28 | + * */ | ||
29 | + | ||
30 | + private DeductionUrlFieldVO deductionUrlFieldVO; | ||
31 | + | ||
32 | + /** | ||
27 | * 拒绝原因 | 33 | * 拒绝原因 |
28 | * */ | 34 | * */ |
29 | private String refuseRemark; | 35 | private String refuseRemark; |
src/main/java/com/order/erp/domain/vo/order/InvoiceBillOrderQueryVO.java
@@ -121,14 +121,6 @@ public class InvoiceBillOrderQueryVO extends BasePageVO implements Serializable | @@ -121,14 +121,6 @@ public class InvoiceBillOrderQueryVO extends BasePageVO implements Serializable | ||
121 | */ | 121 | */ |
122 | private String businessUserName; | 122 | private String businessUserName; |
123 | 123 | ||
124 | - /** | ||
125 | - * 最终确认状态 0:未完成,10:已完成 | ||
126 | - */ | ||
127 | - private Integer invoiceFinishStatus; | ||
128 | - /** | ||
129 | - * 最终确认状态 0:未完成,10:已完成 | ||
130 | - */ | ||
131 | - private Integer checkFinishStatus; | ||
132 | 124 | ||
133 | } | 125 | } |
134 | 126 |
src/main/java/com/order/erp/domain/vo/order/InvoiceFieldVO.java
@@ -20,7 +20,7 @@ public class InvoiceFieldVO { | @@ -20,7 +20,7 @@ public class InvoiceFieldVO { | ||
20 | */ | 20 | */ |
21 | private List<Long> invoiceId; | 21 | private List<Long> invoiceId; |
22 | /** | 22 | /** |
23 | - * 订单id,这里取选中多个集合中的第第一个id作为申请id。 | 23 | + * 内部编号。 |
24 | */ | 24 | */ |
25 | private List<String> innerNo; | 25 | private List<String> innerNo; |
26 | /** | 26 | /** |
src/main/java/com/order/erp/domain/vo/order/InvoiceResultVO.java
0 → 100644
1 | +package com.order.erp.domain.vo.order; | ||
2 | + | ||
3 | +import lombok.*; | ||
4 | +import lombok.experimental.SuperBuilder; | ||
5 | + | ||
6 | +import java.math.BigDecimal; | ||
7 | + | ||
8 | +@Data | ||
9 | +@AllArgsConstructor | ||
10 | +@ToString | ||
11 | +@NoArgsConstructor | ||
12 | +@EqualsAndHashCode(callSuper = false) | ||
13 | +@SuperBuilder | ||
14 | +public class InvoiceResultVO { | ||
15 | + /** | ||
16 | + * id | ||
17 | + */ | ||
18 | + private Long id; | ||
19 | + /** | ||
20 | + * orderId | ||
21 | + */ | ||
22 | + private Long orderId; | ||
23 | + | ||
24 | + /** | ||
25 | + * 项目号 | ||
26 | + */ | ||
27 | + private String projectNo; | ||
28 | + /** | ||
29 | + * 生产科 | ||
30 | + */ | ||
31 | + private String productionDepartment; | ||
32 | + /** | ||
33 | + * 内部编号 | ||
34 | + */ | ||
35 | + private String innerNo; | ||
36 | + /** | ||
37 | + * 缩略图片地址 这里不确认前端拿到的数据是缩略图url还是图片url,先采用缩略图url。 | ||
38 | + */ | ||
39 | + private String smallPicUrl; | ||
40 | + /** | ||
41 | + * 数量 | ||
42 | + */ | ||
43 | + private Integer orderCount; | ||
44 | + /** | ||
45 | + * Modelo(REFERENCE) | ||
46 | + */ | ||
47 | + private String modeleLo; | ||
48 | + /** | ||
49 | + * 客户单价$ | ||
50 | + */ | ||
51 | + private Double customerPrice; | ||
52 | + /** | ||
53 | + * 客户总价$ | ||
54 | + */ | ||
55 | + private Double customerTotalPrice; | ||
56 | + /** | ||
57 | + * 发票单号 | ||
58 | + */ | ||
59 | + private String invoiceNo; | ||
60 | + /** | ||
61 | + * 报关单url地址 | ||
62 | + */ | ||
63 | + private String bgUrl; | ||
64 | + /** | ||
65 | + * 必须回款日期 | ||
66 | + */ | ||
67 | + private String backRefundDate; | ||
68 | + /** | ||
69 | + * 发生扣款金额 | ||
70 | + */ | ||
71 | + private BigDecimal deductAmount; | ||
72 | + /** | ||
73 | + * 扣款单url地址 | ||
74 | + */ | ||
75 | + private String deductUrl; | ||
76 | + /** | ||
77 | + * 实际应收金额 | ||
78 | + */ | ||
79 | + private BigDecimal actualReceivableAmount; | ||
80 | + /** | ||
81 | + * 实际应付金额1 | ||
82 | + */ | ||
83 | + private BigDecimal actualPayedAmount1; | ||
84 | + /** | ||
85 | + * 实际应付金额2 | ||
86 | + */ | ||
87 | + private BigDecimal actualPayedAmount2; | ||
88 | + /** | ||
89 | + * 实际应付金额3 | ||
90 | + */ | ||
91 | + private BigDecimal actualPayedAmount3; | ||
92 | + /** | ||
93 | + * 其他费用金额 | ||
94 | + */ | ||
95 | + private BigDecimal otherAmount; | ||
96 | + /** | ||
97 | + * 备注信息 | ||
98 | + * */ | ||
99 | + private String notes; | ||
100 | + | ||
101 | +} |
src/main/java/com/order/erp/domain/vo/order/OrderBaseInfoVO.java
@@ -80,6 +80,15 @@ public class OrderBaseInfoVO implements Serializable { | @@ -80,6 +80,15 @@ public class OrderBaseInfoVO implements Serializable { | ||
80 | */ | 80 | */ |
81 | private String smallPicUrl; | 81 | private String smallPicUrl; |
82 | /** | 82 | /** |
83 | + * pic图片名称 | ||
84 | + */ | ||
85 | + private String fileName; | ||
86 | + | ||
87 | + /** | ||
88 | + * 缩略图片名称 | ||
89 | + */ | ||
90 | + private String smallFileName; | ||
91 | + /** | ||
83 | * 生产要求 | 92 | * 生产要求 |
84 | */ | 93 | */ |
85 | private String productionComment; | 94 | private String productionComment; |
src/main/java/com/order/erp/domain/vo/order/OrderLockFieldVO.java
@@ -48,10 +48,11 @@ public class OrderLockFieldVO implements Serializable { | @@ -48,10 +48,11 @@ public class OrderLockFieldVO implements Serializable { | ||
48 | /** | 48 | /** |
49 | * 应收款账单字段 | 49 | * 应收款账单字段 |
50 | */ | 50 | */ |
51 | -// private List<InvoiceBillOrderDO> invoiceBillOrderDOList; | ||
52 | 51 | ||
53 | private InvoiceFieldVO invoiceFieldVO; | 52 | private InvoiceFieldVO invoiceFieldVO; |
54 | 53 | ||
54 | + //这个专门给扣款单使用(应收和应付都可以使用)。 | ||
55 | + private DeductionUrlFieldVO deductionUrlFieldVO; | ||
55 | /** | 56 | /** |
56 | * 应付款账单字段 | 57 | * 应付款账单字段 |
57 | */ | 58 | */ |
src/main/java/com/order/erp/job/OrderJob.java
@@ -6,10 +6,12 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; | @@ -6,10 +6,12 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; | ||
6 | import com.order.erp.common.constant.Constant; | 6 | import com.order.erp.common.constant.Constant; |
7 | import com.order.erp.common.utils.DateUtils; | 7 | import com.order.erp.common.utils.DateUtils; |
8 | import com.order.erp.common.utils.TransactionHelper; | 8 | import com.order.erp.common.utils.TransactionHelper; |
9 | +import com.order.erp.domain.ApplyStatusEnum; | ||
9 | import com.order.erp.domain.OrderStatusEnum; | 10 | import com.order.erp.domain.OrderStatusEnum; |
10 | import com.order.erp.domain.dto.BaseDO; | 11 | import com.order.erp.domain.dto.BaseDO; |
11 | import com.order.erp.domain.dto.order.*; | 12 | import com.order.erp.domain.dto.order.*; |
12 | import com.order.erp.domain.vo.order.OrderInfoResultVO; | 13 | import com.order.erp.domain.vo.order.OrderInfoResultVO; |
14 | +import com.order.erp.mapper.order.OrderBaseInfoMapper; | ||
13 | import com.order.erp.service.order.*; | 15 | import com.order.erp.service.order.*; |
14 | import lombok.extern.slf4j.Slf4j; | 16 | import lombok.extern.slf4j.Slf4j; |
15 | import org.joda.time.DateTime; | 17 | import org.joda.time.DateTime; |
@@ -17,10 +19,8 @@ import org.springframework.scheduling.annotation.Scheduled; | @@ -17,10 +19,8 @@ import org.springframework.scheduling.annotation.Scheduled; | ||
17 | import org.springframework.stereotype.Component; | 19 | import org.springframework.stereotype.Component; |
18 | 20 | ||
19 | import javax.annotation.Resource; | 21 | import javax.annotation.Resource; |
20 | -import java.util.List; | ||
21 | -import java.util.Map; | ||
22 | -import java.util.Objects; | ||
23 | -import java.util.Set; | 22 | +import java.time.LocalDate; |
23 | +import java.util.*; | ||
24 | import java.util.stream.Collectors; | 24 | import java.util.stream.Collectors; |
25 | 25 | ||
26 | /** | 26 | /** |
@@ -65,10 +65,17 @@ public class OrderJob { | @@ -65,10 +65,17 @@ public class OrderJob { | ||
65 | .le(OrderBaseInfoDO::getCreateTime, DateUtils.format(DateTime.now().toDate(), DateUtils.DATE_TIME)) | 65 | .le(OrderBaseInfoDO::getCreateTime, DateUtils.format(DateTime.now().toDate(), DateUtils.DATE_TIME)) |
66 | .ne(OrderBaseInfoDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); | 66 | .ne(OrderBaseInfoDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); |
67 | List<OrderBaseInfoDO> ordersDOS = orderBaseInfoService.list(queryWrapper); | 67 | List<OrderBaseInfoDO> ordersDOS = orderBaseInfoService.list(queryWrapper); |
68 | -//如果都填充完成为 1.25,如果只填写4个,则为1。 这里面的方法是否是要改成,只要对应的跟单,质检任何一个格子填写了数据,就算上完成就加一。 | ||
69 | List<OrderInfoResultVO> orderInfoResultVOS = orderBaseInfoService.wrapperOrderResultList(false, ordersDOS); | 68 | List<OrderInfoResultVO> orderInfoResultVOS = orderBaseInfoService.wrapperOrderResultList(false, ordersDOS); |
70 | - if (CollectionUtils.isNotEmpty(orderInfoResultVOS)) { | ||
71 | - Set<Long> orderIds = orderInfoResultVOS.stream().filter(x -> Objects.nonNull(x.getSchedule()) && Constant.ONE <= x.getSchedule()).map(OrderInfoResultVO::getId).collect(Collectors.toSet()); | 69 | + //遍历一下这个集合的数据,如果尾期尾期验货结果为PASS,pass 2ND,PASS 3ND,FAIL RELEASE就为订单完成。 |
70 | + Set<String> validResults = new HashSet<>(Arrays.asList("PASS", "PASS 2ND", "PASS 3RD", "FAIL RELEASE")); | ||
71 | + List<OrderInfoResultVO> filteredOrders = orderInfoResultVOS.stream() | ||
72 | + .filter(order -> order.getInspectionStageInfo() != null && | ||
73 | + validResults.contains(order.getInspectionStageInfo().getEndCheckResult())) | ||
74 | + .collect(Collectors.toList()); | ||
75 | + if (CollectionUtils.isNotEmpty(filteredOrders)) { | ||
76 | + Set<Long> orderIds = filteredOrders.stream().map(OrderInfoResultVO::getId).collect(Collectors.toSet()); | ||
77 | + | ||
78 | + //不再使用上述的方式, | ||
72 | if (CollectionUtils.isNotEmpty(orderIds)) { | 79 | if (CollectionUtils.isNotEmpty(orderIds)) { |
73 | LambdaUpdateWrapper<OrderBaseInfoDO> orderBaseUpdateWrapper = new LambdaUpdateWrapper<OrderBaseInfoDO>() | 80 | LambdaUpdateWrapper<OrderBaseInfoDO> orderBaseUpdateWrapper = new LambdaUpdateWrapper<OrderBaseInfoDO>() |
74 | .in(OrderBaseInfoDO::getId, orderIds).set(OrderBaseInfoDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); | 81 | .in(OrderBaseInfoDO::getId, orderIds).set(OrderBaseInfoDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); |
@@ -213,4 +220,47 @@ public class OrderJob { | @@ -213,4 +220,47 @@ public class OrderJob { | ||
213 | log.info("执行结束时间:{}", DateTime.now().toString("yyyy-MM-dd HH:mm:ss")); | 220 | log.info("执行结束时间:{}", DateTime.now().toString("yyyy-MM-dd HH:mm:ss")); |
214 | } | 221 | } |
215 | 222 | ||
223 | + | ||
224 | +//重新扫描一遍,扫描规则为:不扫描所有表,只扫描25年的数据,如果尾期验货为PASS,PASS 2DN,PASS 3ND,或者为FAIL RELEASE,那么它就设置为订单完成状态。并且,如果这个订单设置为订单完成状态。去看看这些订单是否存在相同的 | ||
225 | + //project_no和inner_no,如果存在就进行也设置为订单完成。 | ||
226 | + | ||
227 | + | ||
228 | + | ||
229 | + | ||
230 | + | ||
231 | + //这里需要改成某个时间段只执行一次。 | ||
232 | +//@Scheduled(cron = "0 */5 * * * ?") | ||
233 | +public void orderStatusFinishCheck() { | ||
234 | + LocalDate localDate = LocalDate.of(2023, 10, 1); | ||
235 | + //查询2023年末之后的基础订单订单。 | ||
236 | + List<OrderBaseInfoDO> orderBaseInfoDOS = orderBaseInfoService.list(new LambdaQueryWrapper<OrderBaseInfoDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | ||
237 | + .ge(OrderBaseInfoDO::getCreateTime, localDate)); | ||
238 | + List<Long> orderIds = orderBaseInfoDOS.stream().map(orderBaseInfoDO -> orderBaseInfoDO.getId()).collect(Collectors.toList()); | ||
239 | + //先把状态设置为跟单中。(因为现在很多虚假的订单完成状态,所以现在把这些订单设置为跟单中,然后重新扫描过滤。) | ||
240 | + orderBaseInfoDOS.forEach(orderBaseInfoDO -> | ||
241 | + orderBaseInfoDO.setOrderStatus(OrderStatusEnum.TRACK_ING.getStatus())); | ||
242 | + orderBaseInfoService.updateBatchById(orderBaseInfoDOS); | ||
243 | + | ||
244 | + | ||
245 | + //查询质检信息。 | ||
246 | + List<OrderInspectionStageDO> inspectionStageDOList = inspectionStageService.list(new LambdaQueryWrapper<OrderInspectionStageDO>().eq(BaseDO::getEnableFlag,Constant.ENABLE_TEN).in(OrderInspectionStageDO::getOrderId,orderIds)); | ||
247 | + | ||
248 | + Set<String> validResults = new HashSet<>(Arrays.asList("PASS", "PASS 2ND", "PASS 3RD", "FAIL RELEASE")); | ||
249 | + | ||
250 | + List<OrderInspectionStageDO> filteredList = inspectionStageDOList.stream() | ||
251 | + .filter(order -> order.getEndCheckResult() != null && validResults.contains(order.getEndCheckResult())) | ||
252 | + .collect(Collectors.toList()); | ||
253 | + List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(filteredList.stream().map(OrderInspectionStageDO::getOrderId).collect(Collectors.toList())); | ||
254 | + | ||
255 | + Set<String> uniqueCombinations=orderBaseInfoDOList.stream().map(order -> order.getProjectNo()+"-"+order.getInnerNo()).collect(Collectors.toSet()); | ||
256 | + | ||
257 | + List<OrderBaseInfoDO> finishStatusOrderBaseinfoList = orderBaseInfoDOS.stream().filter(order -> { | ||
258 | + String combination = order.getProjectNo() + "-" + order.getInnerNo(); | ||
259 | + return uniqueCombinations.contains(combination); | ||
260 | + }) | ||
261 | + .collect(Collectors.toList()); | ||
262 | + finishStatusOrderBaseinfoList.forEach(orderBaseInfoDO -> orderBaseInfoDO.setOrderStatus(OrderStatusEnum.ORDER_FINISH.getStatus())); | ||
263 | + orderBaseInfoService.updateBatchById(finishStatusOrderBaseinfoList); | ||
264 | + } | ||
265 | + | ||
216 | } | 266 | } |
src/main/java/com/order/erp/job/OrderOverTimeEventJob.java
@@ -23,6 +23,7 @@ import com.order.erp.service.admin.AdminUserRoleService; | @@ -23,6 +23,7 @@ import com.order.erp.service.admin.AdminUserRoleService; | ||
23 | import com.order.erp.service.admin.AdminUserService; | 23 | import com.order.erp.service.admin.AdminUserService; |
24 | import com.order.erp.service.order.*; | 24 | import com.order.erp.service.order.*; |
25 | import lombok.extern.slf4j.Slf4j; | 25 | import lombok.extern.slf4j.Slf4j; |
26 | +import org.joda.time.DateTime; | ||
26 | import org.springframework.scheduling.annotation.Scheduled; | 27 | import org.springframework.scheduling.annotation.Scheduled; |
27 | import org.springframework.stereotype.Component; | 28 | import org.springframework.stereotype.Component; |
28 | import org.w3c.dom.events.Event; | 29 | import org.w3c.dom.events.Event; |
@@ -139,6 +140,7 @@ public class OrderOverTimeEventJob { | @@ -139,6 +140,7 @@ public class OrderOverTimeEventJob { | ||
139 | OrderBaseInfoVO orderBaseInfoFormat = getDateFormat(orderEventJob.getBaseInfo().getProductionDepartmentConsignTime(), orderEventJob.getBaseInfo().getOrderHodTime()); | 140 | OrderBaseInfoVO orderBaseInfoFormat = getDateFormat(orderEventJob.getBaseInfo().getProductionDepartmentConsignTime(), orderEventJob.getBaseInfo().getOrderHodTime()); |
140 | orderEventJob.getBaseInfo().setProductionDepartmentConsignTime(orderBaseInfoFormat.getProductionDepartmentConsignTime()); | 141 | orderEventJob.getBaseInfo().setProductionDepartmentConsignTime(orderBaseInfoFormat.getProductionDepartmentConsignTime()); |
141 | orderEventJob.getBaseInfo().setOrderHodTime(orderBaseInfoFormat.getOrderHodTime()); | 142 | orderEventJob.getBaseInfo().setOrderHodTime(orderBaseInfoFormat.getOrderHodTime()); |
143 | + orderEventJob.getBaseInfo().setSmallPicUrl(AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(orderEventJob.getBaseInfo().getSmallPicUrl()), SplitUrlGetBucketName.getFileName(orderEventJob.getBaseInfo().getSmallPicUrl()), new DateTime().plusYears(Constant.ENABLE_TEN).toDate())); | ||
142 | String productionDepartment = orderEventJob.getBaseInfo().getProductionDepartment(); | 144 | String productionDepartment = orderEventJob.getBaseInfo().getProductionDepartment(); |
143 | //根据订单的生产科得到生产科用户信息。 | 145 | //根据订单的生产科得到生产科用户信息。 |
144 | AdminUserDO productionDepartmentUser = adminUserService.getOne(new LambdaQueryWrapper<AdminUserDO>() | 146 | AdminUserDO productionDepartmentUser = adminUserService.getOne(new LambdaQueryWrapper<AdminUserDO>() |
@@ -230,6 +232,7 @@ public class OrderOverTimeEventJob { | @@ -230,6 +232,7 @@ public class OrderOverTimeEventJob { | ||
230 | OrderBaseInfoVO orderBaseInfoFormat = getDateFormat(orderEventJob.getBaseInfo().getProductionDepartmentConsignTime(), orderEventJob.getBaseInfo().getOrderHodTime()); | 232 | OrderBaseInfoVO orderBaseInfoFormat = getDateFormat(orderEventJob.getBaseInfo().getProductionDepartmentConsignTime(), orderEventJob.getBaseInfo().getOrderHodTime()); |
231 | orderEventJob.getBaseInfo().setProductionDepartmentConsignTime(orderBaseInfoFormat.getProductionDepartmentConsignTime()); | 233 | orderEventJob.getBaseInfo().setProductionDepartmentConsignTime(orderBaseInfoFormat.getProductionDepartmentConsignTime()); |
232 | orderEventJob.getBaseInfo().setOrderHodTime(orderBaseInfoFormat.getOrderHodTime()); | 234 | orderEventJob.getBaseInfo().setOrderHodTime(orderBaseInfoFormat.getOrderHodTime()); |
235 | + orderEventJob.getBaseInfo().setSmallPicUrl(AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(orderEventJob.getBaseInfo().getSmallPicUrl()), SplitUrlGetBucketName.getFileName(orderEventJob.getBaseInfo().getSmallPicUrl()), new DateTime().plusYears(Constant.ENABLE_TEN).toDate())); | ||
233 | emailSendUtils.sendEmail(EmailTemplateEnum.byTemplate(eventEnum.getTemplateId()), | 236 | emailSendUtils.sendEmail(EmailTemplateEnum.byTemplate(eventEnum.getTemplateId()), |
234 | map.get(map.keySet().iterator().next()), orderEventJob); | 237 | map.get(map.keySet().iterator().next()), orderEventJob); |
235 | redisUtils.set(EmailTemplateEnum.byTemplate( | 238 | redisUtils.set(EmailTemplateEnum.byTemplate( |
src/main/java/com/order/erp/mapper/order/OrderBaseInfoMapper.java
@@ -49,21 +49,19 @@ public interface OrderBaseInfoMapper extends BaseMapper<OrderBaseInfoDO> { | @@ -49,21 +49,19 @@ public interface OrderBaseInfoMapper extends BaseMapper<OrderBaseInfoDO> { | ||
49 | 49 | ||
50 | @Select("SELECT YEAR(obi.create_time) AS date, SUM(opa.customer_total_price) AS totalPrice FROM order_base_info obi JOIN order_profit_analysis opa ON opa.order_id = obi.id AND opa.enable_flag = 10 WHERE obi.enable_flag = 10 GROUP BY YEAR(obi.create_time) ORDER BY date;") | 50 | @Select("SELECT YEAR(obi.create_time) AS date, SUM(opa.customer_total_price) AS totalPrice FROM order_base_info obi JOIN order_profit_analysis opa ON opa.order_id = obi.id AND opa.enable_flag = 10 WHERE obi.enable_flag = 10 GROUP BY YEAR(obi.create_time) ORDER BY date;") |
51 | List<DateYearMonthTimeVO> countRecentYearByOrderStatus(); | 51 | List<DateYearMonthTimeVO> countRecentYearByOrderStatus(); |
52 | - @Select("SELECT count(*) AS count FROM order_base_info WHERE order_status=#{orderStatus} and enable_flag=10;") | ||
53 | - long countAllYearByOrderStatus(Integer orderStatus); | 52 | + |
53 | + long countAllYearByOrderStatus(@Param("orderStatus") Integer orderStatus); | ||
54 | List<DateYearMonthTimeVO> countRecentMonthValueByOrderStatus(List<Integer> years); | 54 | List<DateYearMonthTimeVO> countRecentMonthValueByOrderStatus(List<Integer> years); |
55 | - @Select("SELECT count(*) FROM order_base_info WHERE enable_flag=10;") | 55 | + |
56 | long countRecentYearByOrderInit(); | 56 | long countRecentYearByOrderInit(); |
57 | - @Select("SELECT count(*) AS count FROM order_base_info WHERE enable_flag=10 AND create_time >= #{startOfYear} AND create_time < #{endOfYear};") | ||
58 | - long countRecentMonthValueByOrderInit(LocalDate startOfYear, LocalDate endOfYear); | ||
59 | - @Select("SELECT count(*) AS count FROM order_base_info WHERE order_status=#{orderStatus} and enable_flag=10 AND create_time >= #{startOfYear} AND create_time < #{endOfYear};") | ||
60 | - long countAllMonthByOrderStatus(Integer orderStatus,LocalDate startOfYear,LocalDate endOfYear); | 57 | + long countRecentMonthValueByOrderInit(@Param("dataYear") Long dataYear); |
58 | + long countAllMonthByOrderStatus(@Param("orderStatus") Integer orderStatus,@Param("dataYear") Long dataYear); | ||
61 | @Select("SELECT DATE(obi.create_time) AS date,SUM(opa.customer_total_price) AS totalPrice FROM order_base_info obi JOIN order_profit_analysis opa ON opa.order_id=obi.id AND opa.enable_flag = 10 WHERE obi.enable_flag = 10 AND obi.create_time >=#{startDate} AND obi.create_time < #{endDate} GROUP BY DATE(obi.create_time) ORDER BY date;") | 59 | @Select("SELECT DATE(obi.create_time) AS date,SUM(opa.customer_total_price) AS totalPrice FROM order_base_info obi JOIN order_profit_analysis opa ON opa.order_id=obi.id AND opa.enable_flag = 10 WHERE obi.enable_flag = 10 AND obi.create_time >=#{startDate} AND obi.create_time < #{endDate} GROUP BY DATE(obi.create_time) ORDER BY date;") |
62 | List<DateYearMonthTimeVO> countRecentDayvalueByOrderStatus(LocalDate startDate, LocalDate endDate); | 60 | List<DateYearMonthTimeVO> countRecentDayvalueByOrderStatus(LocalDate startDate, LocalDate endDate); |
63 | - @Select("SELECT count(*) AS count FROM order_base_info WHERE order_status=#{orderStatus} AND enable_flag=10 AND create_time >= #{startDate} AND create_time < #{endDate};") | ||
64 | - long countAllDayvalueByOrderStatus(Integer orderStatus, LocalDate startDate, LocalDate endDate); | ||
65 | - @Select("SELECT count(*) AS count FROM order_base_info WHERE enable_flag=10 AND create_time >= #{startDate} AND create_time < #{endDate};") | ||
66 | - long countRecentDayByOrderInit(LocalDate startDate, LocalDate endDate); | 61 | + |
62 | + long countAllDayvalueByOrderStatus(@Param("orderStatus") Integer orderStatus, @Param("startDate") LocalDate startDate,@Param("endDate") LocalDate endDate,@Param("year") Long year); | ||
63 | + | ||
64 | + long countRecentDayByOrderInit(@Param("startDate") LocalDate startDate,@Param("endDate") LocalDate endDate,@Param("year") Long year); | ||
67 | List<OrderBaseInfoDO> sameAttributeOrder(@Param("customerStyle") String customerStyle, | 65 | List<OrderBaseInfoDO> sameAttributeOrder(@Param("customerStyle") String customerStyle, |
68 | @Param("innerNo") String innerNo, | 66 | @Param("innerNo") String innerNo, |
69 | @Param("isReturnOrder") String isReturnOrder, | 67 | @Param("isReturnOrder") String isReturnOrder, |
src/main/java/com/order/erp/service/impl/LocalStorageServiceImpl.java
@@ -61,7 +61,7 @@ public class LocalStorageServiceImpl extends ServiceImpl<LocalStorageMapper, Loc | @@ -61,7 +61,7 @@ public class LocalStorageServiceImpl extends ServiceImpl<LocalStorageMapper, Loc | ||
61 | try { | 61 | try { |
62 | File tempFile = new File(path + "files" + File.separator + tempFileName); | 62 | File tempFile = new File(path + "files" + File.separator + tempFileName); |
63 | if (AliOssUtil.upload(AliOssConfig.ALIYUN_BUCKET, fileName, file.getBytes())) { | 63 | if (AliOssUtil.upload(AliOssConfig.ALIYUN_BUCKET, fileName, file.getBytes())) { |
64 | - String fileUrl = AliOssUtil.createUrl(AliOssConfig.ALIYUN_BUCKET, fileName, new DateTime().plusYears(Constant.ENABLE_TEN).toDate()); | 64 | + String fileUrl = AliOssUtil.createUrl(AliOssConfig.ALIYUN_BUCKET, fileName, new DateTime().plusHours(Constant.TWO).toDate()); |
65 | fileRespVO.setFileUrl(fileUrl); | 65 | fileRespVO.setFileUrl(fileUrl); |
66 | FileUtil.del(tempFile); | 66 | FileUtil.del(tempFile); |
67 | } | 67 | } |
@@ -72,6 +72,8 @@ public class LocalStorageServiceImpl extends ServiceImpl<LocalStorageMapper, Loc | @@ -72,6 +72,8 @@ public class LocalStorageServiceImpl extends ServiceImpl<LocalStorageMapper, Loc | ||
72 | } | 72 | } |
73 | } | 73 | } |
74 | 74 | ||
75 | + | ||
76 | + //oss | ||
75 | @Override | 77 | @Override |
76 | public ServerResult uploadByAliOss(String name, MultipartFile file) { | 78 | public ServerResult uploadByAliOss(String name, MultipartFile file) { |
77 | FileUtil.checkSize(maxSize, file.getSize()); | 79 | FileUtil.checkSize(maxSize, file.getSize()); |
@@ -81,13 +83,15 @@ public class LocalStorageServiceImpl extends ServiceImpl<LocalStorageMapper, Loc | @@ -81,13 +83,15 @@ public class LocalStorageServiceImpl extends ServiceImpl<LocalStorageMapper, Loc | ||
81 | try { | 83 | try { |
82 | File tempFile = new File(path + "images" + File.separator + tempFileName); | 84 | File tempFile = new File(path + "images" + File.separator + tempFileName); |
83 | if (AliOssUtil.upload(AliOssConfig.ALIYUN_BUCKET, fileName, file.getBytes())) { | 85 | if (AliOssUtil.upload(AliOssConfig.ALIYUN_BUCKET, fileName, file.getBytes())) { |
84 | - String originImageUrl = AliOssUtil.createUrl(AliOssConfig.ALIYUN_BUCKET, fileName, new DateTime().plusYears(Constant.ENABLE_TEN).toDate()); | 86 | + String originImageUrl = AliOssUtil.createUrl(AliOssConfig.ALIYUN_BUCKET, fileName, new DateTime().plusHours(Constant.TWO).toDate()); |
85 | imageRespVO.setPicUrl(originImageUrl); | 87 | imageRespVO.setPicUrl(originImageUrl); |
88 | + imageRespVO.setFileName(fileName); | ||
86 | // 生成缩略图 | 89 | // 生成缩略图 |
87 | Thumbnails.of(file.getInputStream()).size(100, 100).toFile(tempFile); | 90 | Thumbnails.of(file.getInputStream()).size(100, 100).toFile(tempFile); |
88 | if (AliOssUtil.upload(AliOssConfig.ALIYUN_BUCKET, tempFileName, FileUtil.readBytes(tempFile))) { | 91 | if (AliOssUtil.upload(AliOssConfig.ALIYUN_BUCKET, tempFileName, FileUtil.readBytes(tempFile))) { |
89 | - String thumbnailImageUrl = AliOssUtil.createUrl(AliOssConfig.ALIYUN_BUCKET, tempFileName, new DateTime().plusYears(Constant.ENABLE_TEN).toDate()); | ||
90 | - imageRespVO.setSmallPicUrl(thumbnailImageUrl); | 92 | + String thumbnailImageUrl = AliOssUtil.createUrl(AliOssConfig.ALIYUN_BUCKET, tempFileName, new DateTime().plusHours(Constant.TWO).toDate()); |
93 | + imageRespVO.setSmallPicUrl(thumbnailImageUrl); | ||
94 | + imageRespVO.setSmallfileName(tempFileName); | ||
91 | } | 95 | } |
92 | FileUtil.del(tempFile); | 96 | FileUtil.del(tempFile); |
93 | } | 97 | } |
src/main/java/com/order/erp/service/order/OrderBaseInfoService.java
@@ -6,6 +6,7 @@ import com.order.erp.common.constant.ServerResult; | @@ -6,6 +6,7 @@ import com.order.erp.common.constant.ServerResult; | ||
6 | import com.order.erp.common.excel4j.exceptions.Excel4JException; | 6 | import com.order.erp.common.excel4j.exceptions.Excel4JException; |
7 | import com.order.erp.domain.dto.order.OrderBaseInfoDO; | 7 | import com.order.erp.domain.dto.order.OrderBaseInfoDO; |
8 | import com.order.erp.domain.dto.order.QuerySalesStatisticeDO; | 8 | import com.order.erp.domain.dto.order.QuerySalesStatisticeDO; |
9 | +import com.order.erp.domain.vo.AccountStatementVO; | ||
9 | import com.order.erp.domain.vo.ProducePdfVO; | 10 | import com.order.erp.domain.vo.ProducePdfVO; |
10 | import com.order.erp.domain.vo.order.*; | 11 | import com.order.erp.domain.vo.order.*; |
11 | import freemarker.template.TemplateException; | 12 | import freemarker.template.TemplateException; |
@@ -131,4 +132,6 @@ public interface OrderBaseInfoService extends IService<OrderBaseInfoDO> { | @@ -131,4 +132,6 @@ public interface OrderBaseInfoService extends IService<OrderBaseInfoDO> { | ||
131 | ServerResult countByYear(DateTimeVO dateTimeVO); | 132 | ServerResult countByYear(DateTimeVO dateTimeVO); |
132 | 133 | ||
133 | ServerResult countByDate(DateTimeVO dateTimeVO); | 134 | ServerResult countByDate(DateTimeVO dateTimeVO); |
135 | + | ||
136 | + ServerResult accountStatement(HttpServletResponse response,AccountStatementVO accountStatementVO) throws IOException; | ||
134 | } | 137 | } |
src/main/java/com/order/erp/service/order/OrderFieldLockApplyService.java
@@ -3,6 +3,7 @@ package com.order.erp.service.order; | @@ -3,6 +3,7 @@ package com.order.erp.service.order; | ||
3 | import com.baomidou.mybatisplus.extension.service.IService; | 3 | import com.baomidou.mybatisplus.extension.service.IService; |
4 | import com.order.erp.common.constant.ServerResult; | 4 | import com.order.erp.common.constant.ServerResult; |
5 | import com.order.erp.domain.dto.order.OrderFieldLockApplyDO; | 5 | import com.order.erp.domain.dto.order.OrderFieldLockApplyDO; |
6 | +import com.order.erp.domain.vo.order.AuditDetailQueryVO; | ||
6 | import com.order.erp.domain.vo.order.AuditVO; | 7 | import com.order.erp.domain.vo.order.AuditVO; |
7 | import com.order.erp.domain.vo.order.OrderFieldLockApplyQueryVO; | 8 | import com.order.erp.domain.vo.order.OrderFieldLockApplyQueryVO; |
8 | import com.order.erp.domain.vo.order.OrderFieldLockApplyVO; | 9 | import com.order.erp.domain.vo.order.OrderFieldLockApplyVO; |
@@ -53,6 +54,7 @@ public interface OrderFieldLockApplyService extends IService<OrderFieldLockApply | @@ -53,6 +54,7 @@ public interface OrderFieldLockApplyService extends IService<OrderFieldLockApply | ||
53 | * @return | 54 | * @return |
54 | */ | 55 | */ |
55 | ServerResult doAudit(AuditVO auditVO); | 56 | ServerResult doAudit(AuditVO auditVO); |
57 | + ServerResult audit_detail(AuditDetailQueryVO auditDetailQueryVO); | ||
56 | 58 | ||
57 | /** | 59 | /** |
58 | * 修改数据 | 60 | * 修改数据 |
src/main/java/com/order/erp/service/order/impl/InvoiceBillOrderServiceImpl.java
@@ -14,10 +14,7 @@ import com.order.erp.common.constant.Constant; | @@ -14,10 +14,7 @@ import com.order.erp.common.constant.Constant; | ||
14 | import com.order.erp.common.constant.ServerResult; | 14 | import com.order.erp.common.constant.ServerResult; |
15 | import com.order.erp.common.constant.ServerResultCode; | 15 | import com.order.erp.common.constant.ServerResultCode; |
16 | import com.order.erp.common.exception.BusinessException; | 16 | import com.order.erp.common.exception.BusinessException; |
17 | -import com.order.erp.common.utils.DateUtils; | ||
18 | -import com.order.erp.common.utils.EmailSendUtils; | ||
19 | -import com.order.erp.common.utils.StringUtils; | ||
20 | -import com.order.erp.common.utils.TransactionHelper; | 17 | +import com.order.erp.common.utils.*; |
21 | import com.order.erp.config.DataScope; | 18 | import com.order.erp.config.DataScope; |
22 | import com.order.erp.domain.*; | 19 | import com.order.erp.domain.*; |
23 | import com.order.erp.domain.dto.BaseDO; | 20 | import com.order.erp.domain.dto.BaseDO; |
@@ -31,6 +28,7 @@ import lombok.extern.slf4j.Slf4j; | @@ -31,6 +28,7 @@ import lombok.extern.slf4j.Slf4j; | ||
31 | import org.apache.poi.ss.usermodel.*; | 28 | import org.apache.poi.ss.usermodel.*; |
32 | import org.apache.poi.ss.util.CellRangeAddress; | 29 | import org.apache.poi.ss.util.CellRangeAddress; |
33 | import org.apache.poi.xssf.usermodel.XSSFWorkbook; | 30 | import org.apache.poi.xssf.usermodel.XSSFWorkbook; |
31 | +import org.joda.time.DateTime; | ||
34 | import org.springframework.beans.BeanUtils; | 32 | import org.springframework.beans.BeanUtils; |
35 | import org.springframework.stereotype.Service; | 33 | import org.springframework.stereotype.Service; |
36 | 34 | ||
@@ -43,6 +41,7 @@ import java.net.URLDecoder; | @@ -43,6 +41,7 @@ import java.net.URLDecoder; | ||
43 | import java.nio.charset.StandardCharsets; | 41 | import java.nio.charset.StandardCharsets; |
44 | import java.time.LocalDateTime; | 42 | import java.time.LocalDateTime; |
45 | import java.util.*; | 43 | import java.util.*; |
44 | +import java.util.concurrent.TimeUnit; | ||
46 | import java.util.function.Function; | 45 | import java.util.function.Function; |
47 | import java.util.stream.Collectors; | 46 | import java.util.stream.Collectors; |
48 | import java.util.stream.Stream; | 47 | import java.util.stream.Stream; |
@@ -79,6 +78,8 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | @@ -79,6 +78,8 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | ||
79 | private TransactionHelper transactionHelper; | 78 | private TransactionHelper transactionHelper; |
80 | @Resource | 79 | @Resource |
81 | private EmailSendUtils emailSendUtils; | 80 | private EmailSendUtils emailSendUtils; |
81 | + @Resource | ||
82 | + private RedisUtils redisUtils; | ||
82 | 83 | ||
83 | 84 | ||
84 | /** | 85 | /** |
@@ -124,17 +125,98 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | @@ -124,17 +125,98 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | ||
124 | } | 125 | } |
125 | RoleEnum role = dataScope.getRole(); | 126 | RoleEnum role = dataScope.getRole(); |
126 | Page<FinanceOrderResultVO> page = new Page<>(queryVO.getPage(), queryVO.getPageSize()); | 127 | Page<FinanceOrderResultVO> page = new Page<>(queryVO.getPage(), queryVO.getPageSize()); |
128 | + //跟单员 | ||
127 | if(Objects.nonNull(role) && role.getId().equals(RoleEnum.TRACKER_USER.getId())) { | 129 | if(Objects.nonNull(role) && role.getId().equals(RoleEnum.TRACKER_USER.getId())) { |
128 | queryVO.setTrackerUserName(dataScope.getLoginUserName()); | 130 | queryVO.setTrackerUserName(dataScope.getLoginUserName()); |
129 | IPage<FinanceOrderResultVO> financeOrderResultVOIPage = baseMapper.byConditionGetOrder(page, queryVO); | 131 | IPage<FinanceOrderResultVO> financeOrderResultVOIPage = baseMapper.byConditionGetOrder(page, queryVO); |
132 | + financeOrderResultVOIPage.getRecords().stream().peek(x -> { | ||
133 | + String smallPicUrl=""; | ||
134 | + if(StringUtils.isNotEmpty(x.getSmallPicUrl())){ | ||
135 | + String smallPicUrlKey = Constant.OSS_SMALL_PIC_URL+x.getSmallPicUrl(); | ||
136 | + smallPicUrl= (String)redisUtils.get(smallPicUrlKey); | ||
137 | + if(StringUtils.isBlank(smallPicUrl)){ | ||
138 | + smallPicUrl= AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(x.getSmallPicUrl()) | ||
139 | + ,SplitUrlGetBucketName.getFileName(x.getSmallPicUrl()) | ||
140 | + , new DateTime().plusHours(Constant.TWO).toDate()); | ||
141 | + redisUtils.set(smallPicUrlKey,smallPicUrl,Constant.ONEPOINTNINE_HOURS, TimeUnit.SECONDS); | ||
142 | + } | ||
143 | + } | ||
144 | + x.setSmallPicUrl(smallPicUrl); | ||
145 | + | ||
146 | + if(StringUtils.isNotEmpty(x.getInvoiceBgUrl())){ | ||
147 | + String invoiceBgUrlKey = Constant.OSS_BG_URL + x.getInvoiceBgUrl(); | ||
148 | + String invoiceBgUrl = (String) redisUtils.get(invoiceBgUrlKey); | ||
149 | + if(StringUtils.isBlank(invoiceBgUrl)){ | ||
150 | + invoiceBgUrl= AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(x.getInvoiceBgUrl()) | ||
151 | + ,SplitUrlGetBucketName.getFileName(x.getInvoiceBgUrl()) | ||
152 | + , new DateTime().plusHours(Constant.TWO).toDate()); | ||
153 | + redisUtils.set(invoiceBgUrlKey,invoiceBgUrl,Constant.ONEPOINTNINE_HOURS,TimeUnit.SECONDS); | ||
154 | + } | ||
155 | + x.setInvoiceBgUrl(invoiceBgUrl); | ||
156 | + } | ||
157 | + }).collect(Collectors.toList()); | ||
130 | return ServerResult.success(financeOrderResultVOIPage); | 158 | return ServerResult.success(financeOrderResultVOIPage); |
131 | } | 159 | } |
160 | + //业务员 | ||
132 | if (Objects.nonNull(role) && role.getId().equals(RoleEnum.BUSINESS_USER.getId())) { | 161 | if (Objects.nonNull(role) && role.getId().equals(RoleEnum.BUSINESS_USER.getId())) { |
133 | queryVO.setBusinessUserName(dataScope.getLoginUserName()); | 162 | queryVO.setBusinessUserName(dataScope.getLoginUserName()); |
134 | IPage<FinanceOrderResultVO> financeOrderResultVOIPage = baseMapper.byConditionGetOrder(page,queryVO); | 163 | IPage<FinanceOrderResultVO> financeOrderResultVOIPage = baseMapper.byConditionGetOrder(page,queryVO); |
164 | + financeOrderResultVOIPage.getRecords().stream().peek(x -> { | ||
165 | + String smallPicUrl=""; | ||
166 | + if(StringUtils.isNotEmpty(x.getSmallPicUrl())){ | ||
167 | + String smallPicUrlKey = Constant.OSS_SMALL_PIC_URL+x.getSmallPicUrl(); | ||
168 | + smallPicUrl= (String)redisUtils.get(smallPicUrlKey); | ||
169 | + if(StringUtils.isBlank(smallPicUrl)){ | ||
170 | + smallPicUrl= AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(x.getSmallPicUrl()) | ||
171 | + ,SplitUrlGetBucketName.getFileName(x.getSmallPicUrl()) | ||
172 | + , new DateTime().plusHours(Constant.TWO).toDate()); | ||
173 | + redisUtils.set(smallPicUrlKey,smallPicUrl,Constant.ONEPOINTNINE_HOURS, TimeUnit.SECONDS); | ||
174 | + } | ||
175 | + } | ||
176 | + x.setSmallPicUrl(smallPicUrl); | ||
177 | + | ||
178 | + if(StringUtils.isNotEmpty(x.getInvoiceBgUrl())){ | ||
179 | + String invoiceBgUrlKey = Constant.OSS_BG_URL + x.getInvoiceBgUrl(); | ||
180 | + String invoiceBgUrl = (String) redisUtils.get(invoiceBgUrlKey); | ||
181 | + if(StringUtils.isBlank(invoiceBgUrl)){ | ||
182 | + invoiceBgUrl= AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(x.getInvoiceBgUrl()) | ||
183 | + ,SplitUrlGetBucketName.getFileName(x.getInvoiceBgUrl()) | ||
184 | + , new DateTime().plusHours(Constant.TWO).toDate()); | ||
185 | + redisUtils.set(invoiceBgUrlKey,invoiceBgUrl,Constant.ONEPOINTNINE_HOURS,TimeUnit.SECONDS); | ||
186 | + } | ||
187 | + x.setInvoiceBgUrl(invoiceBgUrl); | ||
188 | + } | ||
189 | + }).collect(Collectors.toList()); | ||
135 | return ServerResult.success(financeOrderResultVOIPage); | 190 | return ServerResult.success(financeOrderResultVOIPage); |
136 | } | 191 | } |
192 | + //管理员和财务能够看到所有订单。 | ||
137 | IPage<FinanceOrderResultVO> financeOrderResultVOIPage = baseMapper.byConditionGetOrder(page,queryVO); | 193 | IPage<FinanceOrderResultVO> financeOrderResultVOIPage = baseMapper.byConditionGetOrder(page,queryVO); |
194 | + financeOrderResultVOIPage.getRecords().stream().peek(x -> { | ||
195 | + String smallPicUrl=""; | ||
196 | + if(StringUtils.isNotEmpty(x.getSmallPicUrl())){ | ||
197 | + String smallPicUrlKey = Constant.OSS_SMALL_PIC_URL+x.getSmallPicUrl(); | ||
198 | + smallPicUrl= (String)redisUtils.get(smallPicUrlKey); | ||
199 | + if(StringUtils.isBlank(smallPicUrl)){ | ||
200 | + smallPicUrl= AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(x.getSmallPicUrl()) | ||
201 | + ,SplitUrlGetBucketName.getFileName(x.getSmallPicUrl()) | ||
202 | + , new DateTime().plusHours(Constant.TWO).toDate()); | ||
203 | + redisUtils.set(smallPicUrlKey,smallPicUrl,Constant.ONEPOINTNINE_HOURS, TimeUnit.SECONDS); | ||
204 | + } | ||
205 | + } | ||
206 | + x.setSmallPicUrl(smallPicUrl); | ||
207 | + | ||
208 | + if(StringUtils.isNotEmpty(x.getInvoiceBgUrl())){ | ||
209 | + String invoiceBgUrlKey = Constant.OSS_BG_URL + x.getInvoiceBgUrl(); | ||
210 | + String invoiceBgUrl = (String) redisUtils.get(invoiceBgUrlKey); | ||
211 | + if(StringUtils.isBlank(invoiceBgUrl)){ | ||
212 | + invoiceBgUrl= AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(x.getInvoiceBgUrl()) | ||
213 | + ,SplitUrlGetBucketName.getFileName(x.getInvoiceBgUrl()) | ||
214 | + , new DateTime().plusHours(Constant.TWO).toDate()); | ||
215 | + redisUtils.set(invoiceBgUrlKey,invoiceBgUrl,Constant.ONEPOINTNINE_HOURS,TimeUnit.SECONDS); | ||
216 | + } | ||
217 | + x.setInvoiceBgUrl(invoiceBgUrl); | ||
218 | + } | ||
219 | + }).collect(Collectors.toList()); | ||
138 | return ServerResult.success(financeOrderResultVOIPage); | 220 | return ServerResult.success(financeOrderResultVOIPage); |
139 | } | 221 | } |
140 | // } | 222 | // } |
@@ -977,10 +1059,9 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | @@ -977,10 +1059,9 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | ||
977 | return InvoiceBillOrderDO.builder() | 1059 | return InvoiceBillOrderDO.builder() |
978 | .invoiceNo(createVO.getInvoiceNo()) | 1060 | .invoiceNo(createVO.getInvoiceNo()) |
979 | .orderId(x.getId()) | 1061 | .orderId(x.getId()) |
980 | - .bgUrl(createVO.getBgUrl()) | 1062 | + .bgUrl(StringUtils.isNotEmpty(createVO.getBgUrl()) ?SplitUrlGetBucketName.getUrlFileName(createVO.getBgUrl()) : null) |
981 | .backRefundDate(createVO.getBackRefundDate()) | 1063 | .backRefundDate(createVO.getBackRefundDate()) |
982 | .status(FinanceEnum.UNPAID_PAYMENTS.getStatus()) | 1064 | .status(FinanceEnum.UNPAID_PAYMENTS.getStatus()) |
983 | - .finishStatus(FinanceEnum.UNPAID_PAYMENTS.getStatus()) | ||
984 | .businesPerson(x.getBusinessPerson()) | 1065 | .businesPerson(x.getBusinessPerson()) |
985 | .trackerUser(x.getCreateBy()) | 1066 | .trackerUser(x.getCreateBy()) |
986 | .build(); | 1067 | .build(); |
@@ -1057,6 +1138,7 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | @@ -1057,6 +1138,7 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | ||
1057 | */ | 1138 | */ |
1058 | @Override | 1139 | @Override |
1059 | public ServerResult updateDeductInfo(InvoiceBillDeductInfoVO deductInfoVO) { | 1140 | public ServerResult updateDeductInfo(InvoiceBillDeductInfoVO deductInfoVO) { |
1141 | + Long loginUserId = dataScope.getLoginUserId(); | ||
1060 | if (Objects.isNull(deductInfoVO.getId())) { | 1142 | if (Objects.isNull(deductInfoVO.getId())) { |
1061 | throw new BusinessException("id 不能为空"); | 1143 | throw new BusinessException("id 不能为空"); |
1062 | } | 1144 | } |
@@ -1064,14 +1146,62 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | @@ -1064,14 +1146,62 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | ||
1064 | if (Objects.isNull(invoiceBillOrderDo)) { | 1146 | if (Objects.isNull(invoiceBillOrderDo)) { |
1065 | throw new BusinessException("应收款单据不存在"); | 1147 | throw new BusinessException("应收款单据不存在"); |
1066 | } | 1148 | } |
1067 | - if(Objects.nonNull(invoiceBillOrderDo.getStatus()) && FinanceEnum.RECEIVED_PAYMENT.getStatus()==invoiceBillOrderDo.getStatus()){ | ||
1068 | - throw new BusinessException("应收款单据已收款,无法编辑"); | 1149 | + if(Objects.nonNull(invoiceBillOrderDo.getStatus()) && ((FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(invoiceBillOrderDo.getStatus())) || |
1150 | + (FinanceEnum.OK_PAYMENT.getStatus().equals(invoiceBillOrderDo.getStatus())))){ | ||
1151 | + throw new BusinessException("应收款单据已审核通过,无法编辑"); | ||
1069 | } | 1152 | } |
1070 | //todo 审核有问题 完成1 | 1153 | //todo 审核有问题 完成1 |
1071 | // checkCommitApply(invoiceBillOrderDo.getId()); | 1154 | // checkCommitApply(invoiceBillOrderDo.getId()); |
1072 | checkApply(new ArrayList<>(Arrays.asList(deductInfoVO.getId()))); | 1155 | checkApply(new ArrayList<>(Arrays.asList(deductInfoVO.getId()))); |
1156 | + //对扣款单进行审批。 | ||
1157 | + checkCommitDeductionUrlApply(invoiceBillOrderDo.getId()); | ||
1158 | + OrderLockFieldVO orderLockFieldVO = new OrderLockFieldVO(); | ||
1159 | + DeductionUrlFieldVO deductionUrlFieldVO=new DeductionUrlFieldVO(); | ||
1160 | + invoiceBillOrderDo.setDeductAmount((deductInfoVO.getDeductAmount()==null?BigDecimal.ZERO:deductInfoVO.getDeductAmount()).setScale(2, RoundingMode.HALF_UP)); | ||
1161 | + //客户总金额减去发生扣款金额。 | ||
1162 | + invoiceBillOrderDo.setActualReceivableAmount((invoiceBillOrderDo.getTotalCustomerAmount().subtract(deductInfoVO.getDeductAmount()==null?BigDecimal.ZERO:deductInfoVO.getDeductAmount())).setScale(2, RoundingMode.HALF_UP)); | ||
1163 | + if(StringUtils.isNotBlank(deductInfoVO.getDeductUrl())){ | ||
1164 | + invoiceBillOrderDo.setInvoiceDeductUrlStatus(ApplyStatusEnum.WAIT_AUDIT.getStatus()); | ||
1165 | + } | ||
1166 | + updateById(invoiceBillOrderDo); | ||
1167 | + if(StringUtils.isNotBlank(deductInfoVO.getDeductUrl())){ | ||
1168 | + OrderBaseInfoDO orderBaseInfoDO = orderBaseInfoService.getById(invoiceBillOrderDo.getOrderId()); | ||
1169 | + //以后对于文件类型,只存文件名,通过bucket每次实时访问。以前是设置过期时间很长,永久存在数据库中。 | ||
1170 | + String urlFileName = SplitUrlGetBucketName.getUrlFileName(deductInfoVO.getDeductUrl()); | ||
1171 | + //不保存,仅仅只是做一个审核,千万不要保存。目的是传递给审核的最新的扣款单,审核通过后才保存,不通过则不保存。 | ||
1172 | + invoiceBillOrderDo.setDeductUrl(urlFileName); | ||
1173 | + deductionUrlFieldVO.setInvoiceNo(invoiceBillOrderDo.getInvoiceNo()); | ||
1174 | + if(Objects.nonNull(orderBaseInfoDO)){ | ||
1175 | + deductionUrlFieldVO.setInnerNo(orderBaseInfoDO.getInnerNo()); | ||
1176 | + } | ||
1177 | + deductionUrlFieldVO.setId(invoiceBillOrderDo.getId()); | ||
1178 | + deductionUrlFieldVO.setBusinesPerson(invoiceBillOrderDo.getBusinesPerson()); | ||
1179 | + deductionUrlFieldVO.setFinancePerson(invoiceBillOrderDo.getFinancePerson()); | ||
1180 | + deductionUrlFieldVO.setTrackerUser(invoiceBillOrderDo.getTrackerUser()); | ||
1181 | + deductionUrlFieldVO.setDeductUrl(urlFileName); | ||
1182 | + deductionUrlFieldVO.setDeductAmount(deductInfoVO.getDeductAmount()); | ||
1183 | + orderLockFieldVO.setDeductionUrlFieldVO(deductionUrlFieldVO); | ||
1184 | + OrderFieldLockApplyDO applyDO = OrderFieldLockApplyDO.builder() | ||
1185 | + .applyUserId(loginUserId) | ||
1186 | + .auditUserId(null) | ||
1187 | + .fields(JSONObject.toJSONString(orderLockFieldVO)) | ||
1188 | + .orderId(invoiceBillOrderDo.getId()) | ||
1189 | + .type(ApplyTypeEnum.INVOICE_DEDUCT_URL.getType()) | ||
1190 | + .remark(ApplyTypeEnum.INVOICE_DEDUCT_URL.getDesc()) | ||
1191 | + .status(ApplyStatusEnum.WAIT_AUDIT.getStatus()) | ||
1192 | + .auditRoleCodes(RoleEnum.ADMIN.getCode() + Constant.COMMA_CHARACTER + RoleEnum.FINANCE_USER.getCode()) | ||
1193 | + .build(); | ||
1194 | + orderFieldLockApplyService.save(applyDO); | ||
1195 | + } | ||
1196 | + return ServerResult.success(); | ||
1197 | + | ||
1198 | + | ||
1199 | + | ||
1073 | 1200 | ||
1074 | - if(StringUtils.isNotBlank(invoiceBillOrderDo.getDeductUrl())){ | 1201 | + |
1202 | + | ||
1203 | + | ||
1204 | + /* if(StringUtils.isNotBlank(invoiceBillOrderDo.getDeductUrl())){ | ||
1075 | //记住:需要修改数据表对应的字段deduct_url的varchar数据范围,修改为1000左右。 | 1205 | //记住:需要修改数据表对应的字段deduct_url的varchar数据范围,修改为1000左右。 |
1076 | if(StringUtils.isNotBlank(deductInfoVO.getDeductUrl())){ | 1206 | if(StringUtils.isNotBlank(deductInfoVO.getDeductUrl())){ |
1077 | Set<String> deductUrlSet = new HashSet<>(Arrays.asList( | 1207 | Set<String> deductUrlSet = new HashSet<>(Arrays.asList( |
@@ -1092,7 +1222,7 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | @@ -1092,7 +1222,7 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | ||
1092 | //客户总金额减去发生扣款金额。 | 1222 | //客户总金额减去发生扣款金额。 |
1093 | invoiceBillOrderDo.setActualReceivableAmount((invoiceBillOrderDo.getTotalCustomerAmount().subtract(deductInfoVO.getDeductAmount()==null?BigDecimal.ZERO:deductInfoVO.getDeductAmount())).setScale(2, RoundingMode.HALF_UP)); | 1223 | invoiceBillOrderDo.setActualReceivableAmount((invoiceBillOrderDo.getTotalCustomerAmount().subtract(deductInfoVO.getDeductAmount()==null?BigDecimal.ZERO:deductInfoVO.getDeductAmount())).setScale(2, RoundingMode.HALF_UP)); |
1094 | updateById(invoiceBillOrderDo); | 1224 | updateById(invoiceBillOrderDo); |
1095 | - return ServerResult.success(); | 1225 | + return ServerResult.success();*/ |
1096 | } | 1226 | } |
1097 | 1227 | ||
1098 | @Override | 1228 | @Override |
@@ -1106,8 +1236,9 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | @@ -1106,8 +1236,9 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | ||
1106 | } | 1236 | } |
1107 | //todo 审核有问题 完成2 | 1237 | //todo 审核有问题 完成2 |
1108 | // checkCommitApply(invoiceBillOrderDo.getId()); | 1238 | // checkCommitApply(invoiceBillOrderDo.getId()); |
1109 | - if(Objects.nonNull(invoiceBillOrderDo.getStatus()) && FinanceEnum.RECEIVED_PAYMENT.getStatus()==invoiceBillOrderDo.getStatus()){ | ||
1110 | - throw new BusinessException("已完成收款,无法更新!"); | 1239 | + if(Objects.nonNull(invoiceBillOrderDo.getStatus()) && ((FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(invoiceBillOrderDo.getStatus())) || |
1240 | + (FinanceEnum.OK_PAYMENT.getStatus().equals(invoiceBillOrderDo.getStatus())))){ | ||
1241 | + throw new BusinessException("应收款单据已审核通过,无法编辑"); | ||
1111 | } | 1242 | } |
1112 | checkApply(new ArrayList<>(Arrays.asList(amountInfoVO.getId()))); | 1243 | checkApply(new ArrayList<>(Arrays.asList(amountInfoVO.getId()))); |
1113 | 1244 | ||
@@ -1153,7 +1284,8 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | @@ -1153,7 +1284,8 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | ||
1153 | throw new BusinessException("勾选订单的invoice需一致"); | 1284 | throw new BusinessException("勾选订单的invoice需一致"); |
1154 | } | 1285 | } |
1155 | //判断选择订单中是否包含已审核通过的订单。 todo:这里需要在审核处理之后,给orderid设置状态,给外带的finacneId集合也设置状态,这里才能生效。 | 1286 | //判断选择订单中是否包含已审核通过的订单。 todo:这里需要在审核处理之后,给orderid设置状态,给外带的finacneId集合也设置状态,这里才能生效。 |
1156 | - boolean isTrue = invoiceBillOrderDOS.stream().filter(Objects::nonNull).anyMatch(invoiceBillOrder -> FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(invoiceBillOrder.getStatus())); | 1287 | + boolean isTrue = invoiceBillOrderDOS.stream().filter(Objects::nonNull).anyMatch(invoiceBillOrder -> ((FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(invoiceBillOrder.getStatus()))) |
1288 | + || (FinanceEnum.OK_PAYMENT.getStatus().equals(invoiceBillOrder.getStatus()))); | ||
1157 | if(isTrue){ | 1289 | if(isTrue){ |
1158 | throw new BusinessException("订单中包含已收款的数据,无法提交!"); | 1290 | throw new BusinessException("订单中包含已收款的数据,无法提交!"); |
1159 | } | 1291 | } |
@@ -1250,6 +1382,22 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | @@ -1250,6 +1382,22 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | ||
1250 | } | 1382 | } |
1251 | } | 1383 | } |
1252 | 1384 | ||
1385 | + | ||
1386 | + /** | ||
1387 | + * @param id | ||
1388 | + * | ||
1389 | + */ | ||
1390 | + private void checkCommitDeductionUrlApply(Long id){ | ||
1391 | + List<OrderFieldLockApplyDO> orderFieldLockApplyDOList = orderFieldLockApplyService.list(new LambdaQueryWrapper<OrderFieldLockApplyDO>() | ||
1392 | + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | ||
1393 | + .eq(OrderFieldLockApplyDO::getType, ApplyTypeEnum.INVOICE_DEDUCT_URL.getType()) | ||
1394 | + .eq(OrderFieldLockApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT.getStatus()) | ||
1395 | + .eq(OrderFieldLockApplyDO::getOrderId, id)); | ||
1396 | + if(CollectionUtils.isNotEmpty(orderFieldLockApplyDOList)){ | ||
1397 | + throw new BusinessException("存在未审核的扣款单,请联系财务审批上一张扣款单后再上传"); | ||
1398 | + } | ||
1399 | + } | ||
1400 | + | ||
1253 | /** | 1401 | /** |
1254 | * @param ids | 1402 | * @param ids |
1255 | * @param userId | 1403 | * @param userId |
@@ -1334,7 +1482,8 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | @@ -1334,7 +1482,8 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | ||
1334 | 1482 | ||
1335 | //有一个审核通过不能删除。之所以这样做,是因为避免忘记其他订单创建invoice,然后遗落了,所以需要删掉重新创建,避免每一个都提交审核并且审核后通过了了。 | 1483 | //有一个审核通过不能删除。之所以这样做,是因为避免忘记其他订单创建invoice,然后遗落了,所以需要删掉重新创建,避免每一个都提交审核并且审核后通过了了。 |
1336 | boolean anyPaid = invoiceBillOrderList.stream().filter(Objects::nonNull) | 1484 | boolean anyPaid = invoiceBillOrderList.stream().filter(Objects::nonNull) |
1337 | - .anyMatch(invoiceBillOrderDO -> FinanceEnum.RECEIVED_PAYMENT.getStatus()== invoiceBillOrderDO.getStatus()); | 1485 | + .anyMatch(invoiceBillOrderDO -> (FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(invoiceBillOrderDO.getStatus())) |
1486 | + || (FinanceEnum.OK_PAYMENT.getStatus().equals( invoiceBillOrderDO.getStatus()))); | ||
1338 | if (anyPaid) { | 1487 | if (anyPaid) { |
1339 | throw new BusinessException("包含已收款的订单,无法删除!"); | 1488 | throw new BusinessException("包含已收款的订单,无法删除!"); |
1340 | } | 1489 | } |
@@ -1373,12 +1522,15 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | @@ -1373,12 +1522,15 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | ||
1373 | } | 1522 | } |
1374 | Map<String, String> hashMap = new HashMap<>(); | 1523 | Map<String, String> hashMap = new HashMap<>(); |
1375 | //获取每一个url的文件名称 | 1524 | //获取每一个url的文件名称 |
1525 | + // https://alterego.oss-cn-qingdao.aliyuncs.com/ | ||
1526 | + // Thumbnails-1735377429935-4024%E5%9B%BE%E7%89%871.png?Expires=1741938071&OSSAccessKeyId=LTAI5tHKVvrz1xxExYD7E3mo&Signature=rBFguaDI5fEl3Yk%2FjbXburRZ0ok%3D | ||
1376 | Arrays.stream( InvoiceBillOrderDO.getDeductUrl().split(",")).forEach(x->{ | 1527 | Arrays.stream( InvoiceBillOrderDO.getDeductUrl().split(",")).forEach(x->{ |
1377 | try{ | 1528 | try{ |
1378 | - String preUrl = x.split("\\?")[0]; | ||
1379 | - String fileName = preUrl.substring(preUrl.lastIndexOf("/") + 1); | 1529 | +// String preUrl = x.split("\\?")[0]; |
1530 | + String fileName = x.substring(x.lastIndexOf("/") + 1); | ||
1380 | String decodUrle = URLDecoder.decode(fileName, StandardCharsets.UTF_8.name()); | 1531 | String decodUrle = URLDecoder.decode(fileName, StandardCharsets.UTF_8.name()); |
1381 | - hashMap.put(decodUrle,x); | 1532 | + String url = AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(x), decodUrle, new DateTime().plusMinutes(Constant.TWO).toDate()); |
1533 | + hashMap.put(decodUrle,url); | ||
1382 | }catch (Exception e){ | 1534 | }catch (Exception e){ |
1383 | throw new BusinessException("文件名错误!"); | 1535 | throw new BusinessException("文件名错误!"); |
1384 | } | 1536 | } |
@@ -1404,7 +1556,7 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | @@ -1404,7 +1556,7 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | ||
1404 | .eq(InvoiceBillOrderDO::getInvoiceNo, invoiceBillOrderDO.getInvoiceNo())); | 1556 | .eq(InvoiceBillOrderDO::getInvoiceNo, invoiceBillOrderDO.getInvoiceNo())); |
1405 | List<InvoiceBillOrderDO> invoiceBillOrderDOList= invoiceBillOrderDOS.stream().map(invoiceBillOrder -> { | 1557 | List<InvoiceBillOrderDO> invoiceBillOrderDOList= invoiceBillOrderDOS.stream().map(invoiceBillOrder -> { |
1406 | //重新上传报关单 | 1558 | //重新上传报关单 |
1407 | - invoiceBillOrder.setBgUrl(bgUrl.getBgUrl()); | 1559 | + invoiceBillOrder.setBgUrl(SplitUrlGetBucketName.getUrlFileName(bgUrl.getBgUrl())); |
1408 | return invoiceBillOrder; | 1560 | return invoiceBillOrder; |
1409 | }).collect(Collectors.toList()); | 1561 | }).collect(Collectors.toList()); |
1410 | updateBatchById(invoiceBillOrderDOList); | 1562 | updateBatchById(invoiceBillOrderDOList); |
@@ -1496,9 +1648,10 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | @@ -1496,9 +1648,10 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | ||
1496 | } | 1648 | } |
1497 | List<InvoiceBillOrderDO> invoiceBillOrderDOList = list(new LambdaQueryWrapper<InvoiceBillOrderDO>().eq(InvoiceBillOrderDO::getEnableFlag, Constant.ENABLE_TEN) | 1649 | List<InvoiceBillOrderDO> invoiceBillOrderDOList = list(new LambdaQueryWrapper<InvoiceBillOrderDO>().eq(InvoiceBillOrderDO::getEnableFlag, Constant.ENABLE_TEN) |
1498 | .eq(InvoiceBillOrderDO::getInvoiceNo, invoiceBillOrderDO.getInvoiceNo())); | 1650 | .eq(InvoiceBillOrderDO::getInvoiceNo, invoiceBillOrderDO.getInvoiceNo())); |
1499 | - boolean anyPaid= invoiceBillOrderDOList.stream().filter(Objects::nonNull).anyMatch(invoiceBillOrder -> FinanceEnum.RECEIVED_PAYMENT.getStatus() == invoiceBillOrder.getStatus()); | 1651 | + boolean anyPaid= invoiceBillOrderDOList.stream().filter(Objects::nonNull).anyMatch(invoiceBillOrder -> (FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(invoiceBillOrder.getStatus())) |
1652 | + ||(FinanceEnum.OK_PAYMENT.getStatus().equals(invoiceBillOrder.getStatus())) ); | ||
1500 | if(anyPaid){ | 1653 | if(anyPaid){ |
1501 | - throw new BusinessException("相同invoiceNo的订单已收款完成,无法设置!"); | 1654 | + throw new BusinessException("相同invoiceNo的订单已审核通过,无法设置!"); |
1502 | } | 1655 | } |
1503 | //todo 要审核判断一下,是否处于审核状态。 完成4 | 1656 | //todo 要审核判断一下,是否处于审核状态。 完成4 |
1504 | checkApply(invoiceBillOrderDOList.stream().filter(Objects::nonNull).map(invoiceDO -> invoiceDO.getId()).collect(Collectors.toList())); | 1657 | checkApply(invoiceBillOrderDOList.stream().filter(Objects::nonNull).map(invoiceDO -> invoiceDO.getId()).collect(Collectors.toList())); |
@@ -1535,8 +1688,9 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | @@ -1535,8 +1688,9 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | ||
1535 | throw new BusinessException("应收款单不存在!"); | 1688 | throw new BusinessException("应收款单不存在!"); |
1536 | } | 1689 | } |
1537 | checkApply( new ArrayList<>(Arrays.asList(deleteVo.getId()))); | 1690 | checkApply( new ArrayList<>(Arrays.asList(deleteVo.getId()))); |
1538 | - if(Objects.nonNull(invoiceBillOrderDO.getStatus()) && FinanceEnum.RECEIVED_PAYMENT.getStatus()==invoiceBillOrderDO.getStatus()){ | ||
1539 | - throw new BusinessException("已完成收款,无法删除!"); | 1691 | + if(Objects.nonNull(invoiceBillOrderDO.getStatus()) && (FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(invoiceBillOrderDO.getStatus()) |
1692 | + || FinanceEnum.OK_PAYMENT.getStatus().equals(invoiceBillOrderDO.getStatus()))){ | ||
1693 | + throw new BusinessException("该订单已审核通过,无法删除!"); | ||
1540 | } | 1694 | } |
1541 | invoiceBillOrderDO.setDeductUrl(""); | 1695 | invoiceBillOrderDO.setDeductUrl(""); |
1542 | updateById(invoiceBillOrderDO); | 1696 | updateById(invoiceBillOrderDO); |
@@ -1545,20 +1699,34 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | @@ -1545,20 +1699,34 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap | ||
1545 | 1699 | ||
1546 | @Override | 1700 | @Override |
1547 | public ServerResult isFinishStatus(InvoiceBillDeductInfoVO invoiceBillDeductInfoVO) { | 1701 | public ServerResult isFinishStatus(InvoiceBillDeductInfoVO invoiceBillDeductInfoVO) { |
1702 | + if(Objects.isNull(invoiceBillDeductInfoVO.getId())){ | ||
1703 | + throw new BusinessException(ServerResultCode.PARAM_ERROR); | ||
1704 | + } | ||
1548 | InvoiceBillOrderDO invoiceBillOrderDO = getById(invoiceBillDeductInfoVO.getId()); | 1705 | InvoiceBillOrderDO invoiceBillOrderDO = getById(invoiceBillDeductInfoVO.getId()); |
1549 | if(Objects.nonNull(invoiceBillOrderDO)){ | 1706 | if(Objects.nonNull(invoiceBillOrderDO)){ |
1550 | - if(!FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(invoiceBillOrderDO.getStatus())){ | ||
1551 | - throw new BusinessException("该订单还没有完成最终收款,你无法设置最终状态为已完成!"); | 1707 | + if((!FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(invoiceBillOrderDO.getStatus())) && (!FinanceEnum.OK_PAYMENT.getStatus().equals(invoiceBillOrderDO.getStatus()))){ |
1708 | + throw new BusinessException("该订单还没有审核通过,你无法设置最终状态为已收款!"); | ||
1552 | } | 1709 | } |
1553 | List<InvoiceBillOrderDO> invoiceBillOrderDOList = list(new LambdaQueryWrapper<InvoiceBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | 1710 | List<InvoiceBillOrderDO> invoiceBillOrderDOList = list(new LambdaQueryWrapper<InvoiceBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) |
1554 | .eq(InvoiceBillOrderDO::getInvoiceNo, invoiceBillOrderDO.getInvoiceNo()) | 1711 | .eq(InvoiceBillOrderDO::getInvoiceNo, invoiceBillOrderDO.getInvoiceNo()) |
1555 | .eq(InvoiceBillOrderDO::getStatus, FinanceEnum.RECEIVED_PAYMENT.getStatus())); | 1712 | .eq(InvoiceBillOrderDO::getStatus, FinanceEnum.RECEIVED_PAYMENT.getStatus())); |
1556 | if(CollectionUtils.isNotEmpty(invoiceBillOrderDOList)){ | 1713 | if(CollectionUtils.isNotEmpty(invoiceBillOrderDOList)){ |
1557 | List<InvoiceBillOrderDO> finishSatusList = invoiceBillOrderDOList.stream().map(x -> { | 1714 | List<InvoiceBillOrderDO> finishSatusList = invoiceBillOrderDOList.stream().map(x -> { |
1558 | - x.setFinishStatus(FinanceEnum.RECEIVED_PAYMENT.getStatus()); | 1715 | + x.setStatus(FinanceEnum.OK_PAYMENT.getStatus()); |
1559 | return x; | 1716 | return x; |
1560 | }).collect(Collectors.toList()); | 1717 | }).collect(Collectors.toList()); |
1561 | - updateBatchById(finishSatusList); | 1718 | + //还需要把基础订单的状态也改一下。 |
1719 | + List<Long> orderIds = invoiceBillOrderDOList.stream().map(InvoiceBillOrderDO::getOrderId).collect(Collectors.toList()); | ||
1720 | + List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(orderIds); | ||
1721 | + List<OrderBaseInfoDO> orderBaseInfoDOS = orderBaseInfoDOList.stream().map(order -> { | ||
1722 | + order.setInvoiceStatus(FinanceEnum.OK_PAYMENT.getStatus()); | ||
1723 | + return order; | ||
1724 | + }).collect(Collectors.toList()); | ||
1725 | + transactionHelper.run(() ->{ | ||
1726 | + updateBatchById(finishSatusList); | ||
1727 | + orderBaseInfoService.updateBatchById(orderBaseInfoDOS); | ||
1728 | + }); | ||
1729 | + | ||
1562 | } | 1730 | } |
1563 | } | 1731 | } |
1564 | return ServerResult.success(); | 1732 | return ServerResult.success(); |
src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java
@@ -22,6 +22,7 @@ import com.order.erp.common.constant.ServerResultCode; | @@ -22,6 +22,7 @@ import com.order.erp.common.constant.ServerResultCode; | ||
22 | import com.order.erp.common.excel4j.exceptions.Excel4JException; | 22 | import com.order.erp.common.excel4j.exceptions.Excel4JException; |
23 | import com.order.erp.common.exception.BusinessException; | 23 | import com.order.erp.common.exception.BusinessException; |
24 | import com.order.erp.common.utils.*; | 24 | import com.order.erp.common.utils.*; |
25 | +import com.order.erp.config.AliOssConfig; | ||
25 | import com.order.erp.config.DataScope; | 26 | import com.order.erp.config.DataScope; |
26 | import com.order.erp.config.MapResultHandler; | 27 | import com.order.erp.config.MapResultHandler; |
27 | import com.order.erp.domain.*; | 28 | import com.order.erp.domain.*; |
@@ -30,6 +31,8 @@ import com.order.erp.domain.dto.SystemSettingDO; | @@ -30,6 +31,8 @@ import com.order.erp.domain.dto.SystemSettingDO; | ||
30 | import com.order.erp.domain.dto.admin.AdminUserDO; | 31 | import com.order.erp.domain.dto.admin.AdminUserDO; |
31 | import com.order.erp.domain.dto.admin.AdminUserRoleDO; | 32 | import com.order.erp.domain.dto.admin.AdminUserRoleDO; |
32 | import com.order.erp.domain.dto.order.*; | 33 | import com.order.erp.domain.dto.order.*; |
34 | +import com.order.erp.domain.excel.AccountStatementExcelVO; | ||
35 | +import com.order.erp.domain.vo.AccountStatementVO; | ||
33 | import com.order.erp.domain.vo.ProducePdfVO; | 36 | import com.order.erp.domain.vo.ProducePdfVO; |
34 | import com.order.erp.domain.vo.order.*; | 37 | import com.order.erp.domain.vo.order.*; |
35 | import com.order.erp.job.OrderOverTimeEventJob; | 38 | import com.order.erp.job.OrderOverTimeEventJob; |
@@ -49,11 +52,10 @@ import org.springframework.transaction.annotation.Transactional; | @@ -49,11 +52,10 @@ import org.springframework.transaction.annotation.Transactional; | ||
49 | import javax.annotation.Resource; | 52 | import javax.annotation.Resource; |
50 | import javax.mail.MessagingException; | 53 | import javax.mail.MessagingException; |
51 | import javax.servlet.http.HttpServletResponse; | 54 | import javax.servlet.http.HttpServletResponse; |
52 | -import java.io.File; | ||
53 | -import java.io.IOException; | ||
54 | -import java.io.InputStream; | 55 | +import java.io.*; |
55 | import java.math.BigDecimal; | 56 | import java.math.BigDecimal; |
56 | import java.math.RoundingMode; | 57 | import java.math.RoundingMode; |
58 | +import java.net.MalformedURLException; | ||
57 | import java.net.URL; | 59 | import java.net.URL; |
58 | import java.text.DecimalFormat; | 60 | import java.text.DecimalFormat; |
59 | import java.time.LocalDate; | 61 | import java.time.LocalDate; |
@@ -151,6 +153,8 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O | @@ -151,6 +153,8 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O | ||
151 | 153 | ||
152 | @Resource | 154 | @Resource |
153 | private OrderTrackStageService orderTrackStageService; | 155 | private OrderTrackStageService orderTrackStageService; |
156 | + @Resource | ||
157 | + private AccountStatementExcel accountStatementExcel; | ||
154 | 158 | ||
155 | 159 | ||
156 | 160 | ||
@@ -218,6 +222,32 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O | @@ -218,6 +222,32 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O | ||
218 | List<OrderInfoResultVO> resultVOList = new ArrayList<>(); | 222 | List<OrderInfoResultVO> resultVOList = new ArrayList<>(); |
219 | if (CollectionUtils.isNotEmpty(orderBaseInfoDOList)) { | 223 | if (CollectionUtils.isNotEmpty(orderBaseInfoDOList)) { |
220 | resultVOList = orderBaseInfoDOList.stream().map(x -> { | 224 | resultVOList = orderBaseInfoDOList.stream().map(x -> { |
225 | + String picUrl = ""; | ||
226 | + if(com.order.erp.common.utils.StringUtils.isNotEmpty(x.getPicUrl())){ | ||
227 | + String picUrlKey=Constant.OSS_PIC_URL+x.getPicUrl(); | ||
228 | + picUrl= (String) redisUtils.get(picUrlKey); | ||
229 | + if(StringUtils.isBlank(picUrl)){ | ||
230 | + picUrl = AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(x.getPicUrl()) | ||
231 | + ,SplitUrlGetBucketName.getFileName(x.getPicUrl()) | ||
232 | + , new DateTime().plusHours(Constant.TWO).toDate()); | ||
233 | + //设置redis过期时间为1.9小时。 oss的实时链接为2小时。 | ||
234 | + redisUtils.set(picUrlKey,picUrl, Constant.ONEPOINTNINE_HOURS, TimeUnit.SECONDS); | ||
235 | + } | ||
236 | + } | ||
237 | + x.setPicUrl(picUrl); | ||
238 | + String smallPicUrl = ""; | ||
239 | + if(com.order.erp.common.utils.StringUtils.isNotEmpty(x.getSmallPicUrl())){ | ||
240 | + String smallPicUrlKey=Constant.OSS_SMALL_PIC_URL+x.getSmallPicUrl(); | ||
241 | + smallPicUrl= (String) redisUtils.get(smallPicUrlKey); | ||
242 | + if(StringUtils.isBlank(smallPicUrl)){ | ||
243 | + smallPicUrl = AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(x.getSmallPicUrl()) | ||
244 | + , SplitUrlGetBucketName.getFileName(x.getSmallPicUrl()), | ||
245 | + new DateTime().plusHours(Constant.TWO).toDate()); | ||
246 | + //设置redis过期时间为1.9小时。 oss的实时链接为2小时。 | ||
247 | + redisUtils.set(smallPicUrlKey,smallPicUrl, Constant.ONEPOINTNINE_HOURS, TimeUnit.SECONDS); | ||
248 | + } | ||
249 | + } | ||
250 | + x.setSmallPicUrl(smallPicUrl); | ||
221 | OrderInfoResultVO resultVO = new OrderInfoResultVO(); | 251 | OrderInfoResultVO resultVO = new OrderInfoResultVO(); |
222 | BeanUtils.copyProperties(x, resultVO); | 252 | BeanUtils.copyProperties(x, resultVO); |
223 | return resultVO; | 253 | return resultVO; |
@@ -279,6 +309,27 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O | @@ -279,6 +309,27 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O | ||
279 | String productionComment = productionCommentS[productionCommentS.length - 1]; | 309 | String productionComment = productionCommentS[productionCommentS.length - 1]; |
280 | x.setProductionComment(productionComment); | 310 | x.setProductionComment(productionComment); |
281 | } | 311 | } |
312 | + String picUrl=""; | ||
313 | + if(com.order.erp.common.utils.StringUtils.isNotEmpty(x.getPicUrl())){ | ||
314 | + String picUrlKey = Constant.OSS_PIC_URL + x.getPicUrl(); | ||
315 | + picUrl =(String)redisUtils.get(picUrlKey); | ||
316 | + if(StringUtils.isBlank(picUrl)){ | ||
317 | + picUrl= AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(x.getPicUrl()),SplitUrlGetBucketName.getFileName(x.getPicUrl()),new DateTime().plusHours(Constant.TWO).toDate()); | ||
318 | + redisUtils.set(picUrlKey,picUrl,Constant.ONEPOINTNINE_HOURS,TimeUnit.SECONDS); | ||
319 | + } | ||
320 | + } | ||
321 | + x.setPicUrl(picUrl); | ||
322 | + String smallPicUrl=""; | ||
323 | + if(com.order.erp.common.utils.StringUtils.isNotEmpty(x.getSmallPicUrl())){ | ||
324 | + String smallPicUrlKey=Constant.OSS_SMALL_PIC_URL+x.getSmallPicUrl(); | ||
325 | + smallPicUrl=(String)redisUtils.get(smallPicUrlKey); | ||
326 | + if(StringUtils.isBlank(smallPicUrl)){ | ||
327 | + smallPicUrl= AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(x.getSmallPicUrl()),SplitUrlGetBucketName.getFileName(x.getSmallPicUrl()),new DateTime().plusHours(Constant.TWO).toDate()); | ||
328 | + redisUtils.set(smallPicUrlKey,smallPicUrl,Constant.ONEPOINTNINE_HOURS,TimeUnit.SECONDS); | ||
329 | + } | ||
330 | + | ||
331 | + } | ||
332 | + x.setSmallPicUrl(smallPicUrl); | ||
282 | OrderInfoResultVO resultVO = new OrderInfoResultVO(); | 333 | OrderInfoResultVO resultVO = new OrderInfoResultVO(); |
283 | BeanUtils.copyProperties(x, resultVO); | 334 | BeanUtils.copyProperties(x, resultVO); |
284 | return resultVO; | 335 | return resultVO; |
@@ -1566,10 +1617,13 @@ end | @@ -1566,10 +1617,13 @@ end | ||
1566 | } | 1617 | } |
1567 | Long userId = dataScope.getLoginUserId(); | 1618 | Long userId = dataScope.getLoginUserId(); |
1568 | OrderBaseInfoDO baseInfoDO = new OrderBaseInfoDO(); | 1619 | OrderBaseInfoDO baseInfoDO = new OrderBaseInfoDO(); |
1569 | - BeanUtils.copyProperties(baseInfoVO, baseInfoDO); | 1620 | + BeanUtils.copyProperties(baseInfoVO, baseInfoDO,"picUrl","smallPicUrl"); |
1570 | baseInfoDO.setOrderStatus(OrderStatusEnum.CREATE_FINISH.getStatus()); | 1621 | baseInfoDO.setOrderStatus(OrderStatusEnum.CREATE_FINISH.getStatus()); |
1571 | baseInfoDO.setCheckStatus(FinanceEnum.NOT_CREATED.getStatus()); | 1622 | baseInfoDO.setCheckStatus(FinanceEnum.NOT_CREATED.getStatus()); |
1572 | baseInfoDO.setInvoiceStatus(FinanceEnum.NOT_CREATED.getStatus()); | 1623 | baseInfoDO.setInvoiceStatus(FinanceEnum.NOT_CREATED.getStatus()); |
1624 | + //存储时不再存储过期时间为十年的url,而是存储文件名称,到时候访问图片资源时,携带bucket,访问重新生成的携带accesskey的url。 | ||
1625 | + baseInfoDO.setPicUrl(SplitUrlGetBucketName.getUrlFileName(baseInfoVO.getPicUrl())); | ||
1626 | + baseInfoDO.setSmallPicUrl(SplitUrlGetBucketName.getUrlFileName(baseInfoVO.getSmallPicUrl())); | ||
1573 | save(baseInfoDO); | 1627 | save(baseInfoDO); |
1574 | 1628 | ||
1575 | OrderOpinionLogDO orderOpinionLogDO = buildOrderOpinionLogDo(baseInfoDO.getId(), | 1629 | OrderOpinionLogDO orderOpinionLogDO = buildOrderOpinionLogDo(baseInfoDO.getId(), |
@@ -2318,10 +2372,10 @@ end | @@ -2318,10 +2372,10 @@ end | ||
2318 | baseInfoDO.setCnColor(baseInfoVO.getCnColor()); | 2372 | baseInfoDO.setCnColor(baseInfoVO.getCnColor()); |
2319 | } | 2373 | } |
2320 | if (StringUtils.isNotBlank(baseInfoVO.getPicUrl())) { | 2374 | if (StringUtils.isNotBlank(baseInfoVO.getPicUrl())) { |
2321 | - baseInfoDO.setPicUrl(baseInfoVO.getPicUrl()); | 2375 | + baseInfoDO.setPicUrl(SplitUrlGetBucketName.getUrlFileName(baseInfoVO.getPicUrl())); |
2322 | } | 2376 | } |
2323 | if (StringUtils.isNotBlank(baseInfoVO.getSmallPicUrl())) { | 2377 | if (StringUtils.isNotBlank(baseInfoVO.getSmallPicUrl())) { |
2324 | - baseInfoDO.setSmallPicUrl(baseInfoVO.getSmallPicUrl()); | 2378 | + baseInfoDO.setSmallPicUrl(SplitUrlGetBucketName.getUrlFileName(baseInfoVO.getSmallPicUrl())); |
2325 | } | 2379 | } |
2326 | if (StringUtils.isNotBlank(baseInfoVO.getProductionComment())) { | 2380 | if (StringUtils.isNotBlank(baseInfoVO.getProductionComment())) { |
2327 | baseInfoDO.setProductionComment(baseInfoVO.getProductionComment()); | 2381 | baseInfoDO.setProductionComment(baseInfoVO.getProductionComment()); |
@@ -2680,7 +2734,17 @@ end | @@ -2680,7 +2734,17 @@ end | ||
2680 | //邮箱收集完毕。 | 2734 | //邮箱收集完毕。 |
2681 | OrderEventJobVO orderEventJobVO = new OrderEventJobVO(); | 2735 | OrderEventJobVO orderEventJobVO = new OrderEventJobVO(); |
2682 | orderEventJobVO.setInspectionStageInfo(updateVO.getInspectionStageInfo()); | 2736 | orderEventJobVO.setInspectionStageInfo(updateVO.getInspectionStageInfo()); |
2683 | - OrderBaseInfoVO orderBaseInfoVo = BeanUtil.copyProperties(orderBaseInfoDO, OrderBaseInfoVO.class); | 2737 | + OrderBaseInfoVO orderBaseInfoVo = BeanUtil.copyProperties(orderBaseInfoDO, OrderBaseInfoVO.class,"smallPicUrl"); |
2738 | + String smallPicUrl=""; | ||
2739 | + if(com.order.erp.common.utils.StringUtils.isNotEmpty(orderBaseInfoDO.getSmallPicUrl())){ | ||
2740 | + String smallPicUrlKey=Constant.OSS_SMALL_PIC_URL+orderBaseInfoDO.getSmallPicUrl(); | ||
2741 | + smallPicUrl=(String)redisUtils.get(smallPicUrlKey); | ||
2742 | + if(StringUtils.isBlank(smallPicUrl)){ | ||
2743 | + smallPicUrl= AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(orderBaseInfoDO.getSmallPicUrl()), SplitUrlGetBucketName.getFileName(orderBaseInfoDO.getSmallPicUrl()), new DateTime().plusHours(Constant.TWO).toDate()); | ||
2744 | + redisUtils.set(smallPicUrlKey,smallPicUrl,Constant.ONEPOINTNINE_HOURS,TimeUnit.SECONDS); | ||
2745 | + } | ||
2746 | + } | ||
2747 | + orderBaseInfoVo.setSmallPicUrl(smallPicUrl); | ||
2684 | orderEventJobVO.setBaseInfo(orderBaseInfoVo); | 2748 | orderEventJobVO.setBaseInfo(orderBaseInfoVo); |
2685 | 2749 | ||
2686 | //一旦修改完质检信息就自动发送邮件对应的生产科。多次编辑保存多次发送。 只有当这次的尾期结果与上一次不一样才不会发送。 | 2750 | //一旦修改完质检信息就自动发送邮件对应的生产科。多次编辑保存多次发送。 只有当这次的尾期结果与上一次不一样才不会发送。 |
@@ -2723,7 +2787,17 @@ end | @@ -2723,7 +2787,17 @@ end | ||
2723 | List<String> allEmails=new ArrayList<>(emailsSet); | 2787 | List<String> allEmails=new ArrayList<>(emailsSet); |
2724 | OrderEventJobVO orderEventJobVO = new OrderEventJobVO(); | 2788 | OrderEventJobVO orderEventJobVO = new OrderEventJobVO(); |
2725 | orderEventJobVO.setInspectionStageInfo(inspectionStageVO); | 2789 | orderEventJobVO.setInspectionStageInfo(inspectionStageVO); |
2726 | - OrderBaseInfoVO orderBaseInfoVo = BeanUtil.copyProperties(orderBaseInfoDO, OrderBaseInfoVO.class); | 2790 | + OrderBaseInfoVO orderBaseInfoVo = BeanUtil.copyProperties(orderBaseInfoDO, OrderBaseInfoVO.class,"smallPicUrl"); |
2791 | + String smallPicUrl=""; | ||
2792 | + if(com.order.erp.common.utils.StringUtils.isNotEmpty(orderBaseInfoDO.getSmallPicUrl())){ | ||
2793 | + String smallPicUrlKey=Constant.OSS_SMALL_PIC_URL+orderBaseInfoDO.getSmallPicUrl(); | ||
2794 | + smallPicUrl=(String)redisUtils.get(smallPicUrlKey); | ||
2795 | + if(StringUtils.isBlank(smallPicUrl)){ | ||
2796 | + smallPicUrl= AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(orderBaseInfoDO.getSmallPicUrl()),SplitUrlGetBucketName.getFileName(orderBaseInfoDO.getSmallPicUrl()),new DateTime().plusHours(Constant.TWO).toDate()); | ||
2797 | + redisUtils.set(smallPicUrlKey,smallPicUrl,Constant.ONEPOINTNINE_HOURS,TimeUnit.SECONDS); | ||
2798 | + } | ||
2799 | + } | ||
2800 | + orderBaseInfoVo.setSmallPicUrl(smallPicUrl); | ||
2727 | orderEventJobVO.setBaseInfo(orderBaseInfoVo); | 2801 | orderEventJobVO.setBaseInfo(orderBaseInfoVo); |
2728 | emailSendUtils.sendCheckResultEmail(EmailTemplateEnum.END_CHECK_REPORT_TEMPLATE, allEmails, orderEventJobVO); | 2802 | emailSendUtils.sendCheckResultEmail(EmailTemplateEnum.END_CHECK_REPORT_TEMPLATE, allEmails, orderEventJobVO); |
2729 | }else{ | 2803 | }else{ |
@@ -2811,7 +2885,16 @@ end | @@ -2811,7 +2885,16 @@ end | ||
2811 | orderEventJobVO.getBaseInfo().setCustomerPo(orderBaseInfoDo.getCustomerPo()); | 2885 | orderEventJobVO.getBaseInfo().setCustomerPo(orderBaseInfoDo.getCustomerPo()); |
2812 | orderEventJobVO.getBaseInfo().setCustomerStyle(orderBaseInfoDo.getCustomerStyle()); | 2886 | orderEventJobVO.getBaseInfo().setCustomerStyle(orderBaseInfoDo.getCustomerStyle()); |
2813 | orderEventJobVO.getBaseInfo().setPoColor(orderBaseInfoDo.getPoColor()); | 2887 | orderEventJobVO.getBaseInfo().setPoColor(orderBaseInfoDo.getPoColor()); |
2814 | - orderEventJobVO.getBaseInfo().setSmallPicUrl(orderBaseInfoDo.getSmallPicUrl()); | 2888 | + String smallPicUrl=""; |
2889 | + if(com.order.erp.common.utils.StringUtils.isNotEmpty(orderBaseInfoDo.getSmallPicUrl())){ | ||
2890 | + String smallPicUrlKey=Constant.OSS_SMALL_PIC_URL+orderBaseInfoDo.getSmallPicUrl(); | ||
2891 | + smallPicUrl=(String)redisUtils.get(smallPicUrlKey); | ||
2892 | + if(StringUtils.isBlank(smallPicUrl)){ | ||
2893 | + smallPicUrl= AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(orderBaseInfoDo.getSmallPicUrl()),SplitUrlGetBucketName.getFileName(orderBaseInfoDo.getSmallPicUrl()),new DateTime().plusHours(Constant.TWO).toDate()); | ||
2894 | + redisUtils.set(smallPicUrlKey,smallPicUrl,Constant.ONEPOINTNINE_HOURS,TimeUnit.SECONDS); | ||
2895 | + } | ||
2896 | + } | ||
2897 | + orderEventJobVO.getBaseInfo().setSmallPicUrl(smallPicUrl); | ||
2815 | orderEventJobVO.getBaseInfo().setOrderCount(orderBaseInfoDo.getOrderCount()); | 2898 | orderEventJobVO.getBaseInfo().setOrderCount(orderBaseInfoDo.getOrderCount()); |
2816 | // String[] split = productionComment.split("\n"); | 2899 | // String[] split = productionComment.split("\n"); |
2817 | // String[] split1 = split[split.length - 1].split("[::]+"); | 2900 | // String[] split1 = split[split.length - 1].split("[::]+"); |
@@ -2844,25 +2927,32 @@ end | @@ -2844,25 +2927,32 @@ end | ||
2844 | if (TimePeriod.YEAR.getDescription().equals(dateTimeVO.getPeriod())) { | 2927 | if (TimePeriod.YEAR.getDescription().equals(dateTimeVO.getPeriod())) { |
2845 | //查询每一年份的已完成订单数据。 | 2928 | //查询每一年份的已完成订单数据。 |
2846 | //查询所有年份的完成订单数据。 | 2929 | //查询所有年份的完成订单数据。 |
2847 | - long allYearCount = this.baseMapper.countAllYearByOrderStatus(OrderStatusEnum.ORDER_FINISH.getStatus()); | ||
2848 | - //查询所有年份的跟单和质检中的数据。 | 2930 | + long allYearCountNoReturn = this.baseMapper.countAllYearByOrderStatus(OrderStatusEnum.ORDER_FINISH.getStatus()); |
2931 | + long allYearCountReturn = this.count(new LambdaQueryWrapper<OrderBaseInfoDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).eq(OrderBaseInfoDO::getReturnOrder, Constant.STRING_ONE).eq(OrderBaseInfoDO::getOrderStatus,OrderStatusEnum.ORDER_FINISH.getStatus())); | ||
2932 | + /* 查询所有年份的跟单和质检中的数据。 | ||
2849 | long tracking = orderTrackStageService.countRecentYearByOrderStatus(OrderStatusEnum.TRACK_ING.getStatus()); | 2933 | long tracking = orderTrackStageService.countRecentYearByOrderStatus(OrderStatusEnum.TRACK_ING.getStatus()); |
2934 | + | ||
2850 | long inspecting = orderInspectionStageService.countRecentYearByOrderStatus(OrderStatusEnum.INSPECT_ING.getStatus()); | 2935 | long inspecting = orderInspectionStageService.countRecentYearByOrderStatus(OrderStatusEnum.INSPECT_ING.getStatus()); |
2936 | + */ | ||
2937 | + | ||
2851 | //查询所有年份的利润分析表的数据。(从orderFieldLockApplyDo表中查询。)。 | 2938 | //查询所有年份的利润分析表的数据。(从orderFieldLockApplyDo表中查询。)。 |
2852 | // long rofit =this.baseMapper.countAllYearByOrderStatus(OrderStatusEnum.PROFIT_WAIT_AUDIT.getStatus()); | 2939 | // long rofit =this.baseMapper.countAllYearByOrderStatus(OrderStatusEnum.PROFIT_WAIT_AUDIT.getStatus()); |
2853 | long rofit = orderFieldLockApplyService.countAllYearByOrderStatus(ApplyTypeEnum.ORDER_PROFIT_APPLY.getType()); | 2940 | long rofit = orderFieldLockApplyService.countAllYearByOrderStatus(ApplyTypeEnum.ORDER_PROFIT_APPLY.getType()); |
2854 | //查询所有年份的项目报告书待审核的数据。 | 2941 | //查询所有年份的项目报告书待审核的数据。 |
2855 | -// long report=this.baseMapper.countAllYearByOrderStatus(OrderStatusEnum.REPORT_WAIT_AUDIT.getStatus()); | 2942 | +// long report=this.baseMapper.count AllYearByOrderStatus(OrderStatusEnum.REPORT_WAIT_AUDIT.getStatus()); |
2856 | long report = orderFieldLockApplyService.countAllYearByOrderStatus(ApplyTypeEnum.ORDER_REPORT_APPLY.getType()); | 2943 | long report = orderFieldLockApplyService.countAllYearByOrderStatus(ApplyTypeEnum.ORDER_REPORT_APPLY.getType()); |
2944 | + | ||
2857 | //查询所有年份的订单初始化的数据。 | 2945 | //查询所有年份的订单初始化的数据。 |
2858 | long orderInit = this.baseMapper.countRecentYearByOrderInit(); | 2946 | long orderInit = this.baseMapper.countRecentYearByOrderInit(); |
2859 | 2947 | ||
2948 | + long returnOrderBaseInfoNumber = this.count(new LambdaQueryWrapper<OrderBaseInfoDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).eq(OrderBaseInfoDO::getReturnOrder, Constant.STRING_ONE)); | ||
2860 | Datecount datecount = new Datecount(); | 2949 | Datecount datecount = new Datecount(); |
2861 | - datecount.setAllCount(allYearCount); | ||
2862 | - datecount.setTrackingAndInspectingList(tracking+inspecting); | 2950 | + datecount.setAllCount(allYearCountNoReturn+allYearCountReturn); |
2951 | + datecount.setTrackingAndInspectingList(orderInit+returnOrderBaseInfoNumber-allYearCountNoReturn-allYearCountReturn); | ||
2863 | datecount.setProfitList(rofit); | 2952 | datecount.setProfitList(rofit); |
2864 | datecount.setReportList(report); | 2953 | datecount.setReportList(report); |
2865 | - datecount.setOrderInitList(orderInit); | 2954 | + //订单初始化的数量计算方式是:对于不是返单的数据,相同的项目号和内部编号只能算一个订单,对于返单来说,就不进行去重。 |
2955 | + datecount.setOrderInitList(orderInit+returnOrderBaseInfoNumber); | ||
2866 | return ServerResult.success(datecount); | 2956 | return ServerResult.success(datecount); |
2867 | } | 2957 | } |
2868 | //月 | 2958 | //月 |
@@ -2872,19 +2962,32 @@ end | @@ -2872,19 +2962,32 @@ end | ||
2872 | LocalDate endOfYear = startOfYear.plusYears(1); | 2962 | LocalDate endOfYear = startOfYear.plusYears(1); |
2873 | //如果为月,则需要前端传递year,然后得到这个year的数据。 | 2963 | //如果为月,则需要前端传递year,然后得到这个year的数据。 |
2874 | //查询这个年每一个月的数据 | 2964 | //查询这个年每一个月的数据 |
2875 | - long allMonthCount=this.baseMapper.countAllMonthByOrderStatus(OrderStatusEnum.ORDER_FINISH.getStatus(),startOfYear,endOfYear); | ||
2876 | - long tracking = orderTrackStageService.countRecentMonthValueByOrderStatus(OrderStatusEnum.TRACK_ING.getStatus(),startOfYear,endOfYear); | 2965 | + long allMonthCountNoReturn=this.baseMapper.countAllMonthByOrderStatus(OrderStatusEnum.ORDER_FINISH.getStatus(),(long) (dateTime % 100)); |
2966 | + long allMonthCountReturn = this.count(new LambdaQueryWrapper<OrderBaseInfoDO>() | ||
2967 | + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | ||
2968 | + .eq(OrderBaseInfoDO::getReturnOrder, Constant.STRING_ONE) | ||
2969 | + .eq(OrderBaseInfoDO::getOrderStatus,OrderStatusEnum.ORDER_FINISH.getStatus()) | ||
2970 | + .likeRight(OrderBaseInfoDO::getInnerNo, "_____" + dateTime % 100)); | ||
2971 | + /* long tracking = orderTrackStageService.countRecentMonthValueByOrderStatus(OrderStatusEnum.TRACK_ING.getStatus(),startOfYear,endOfYear); | ||
2972 | + System.out.println("跟单中:"+tracking); | ||
2877 | long inspecting = orderInspectionStageService.countRecentMonthValueByOrderStatus(OrderStatusEnum.INSPECT_ING.getStatus(),startOfYear,endOfYear); | 2973 | long inspecting = orderInspectionStageService.countRecentMonthValueByOrderStatus(OrderStatusEnum.INSPECT_ING.getStatus(),startOfYear,endOfYear); |
2974 | + System.out.println("质检中:"+inspecting);*/ | ||
2878 | long profit = orderFieldLockApplyService.countRecentMonthValueByOrderStatus(ApplyTypeEnum.ORDER_PROFIT_APPLY.getType(),startOfYear,endOfYear); | 2975 | long profit = orderFieldLockApplyService.countRecentMonthValueByOrderStatus(ApplyTypeEnum.ORDER_PROFIT_APPLY.getType(),startOfYear,endOfYear); |
2879 | long report = orderFieldLockApplyService.countRecentMonthValueByOrderStatus(ApplyTypeEnum.ORDER_REPORT_APPLY.getType(),startOfYear,endOfYear); | 2976 | long report = orderFieldLockApplyService.countRecentMonthValueByOrderStatus(ApplyTypeEnum.ORDER_REPORT_APPLY.getType(),startOfYear,endOfYear); |
2880 | - //查询年月的项目报告书待审核/订单初始化。 | ||
2881 | - long orderinit=this.baseMapper.countRecentMonthValueByOrderInit(startOfYear,endOfYear); | 2977 | + |
2978 | + long orderInit=this.baseMapper.countRecentMonthValueByOrderInit((long) (dateTime % 100)); | ||
2979 | + | ||
2980 | + long returnOrderBaseInfoNumber = this.count(new LambdaQueryWrapper<OrderBaseInfoDO>() | ||
2981 | + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | ||
2982 | + .eq(OrderBaseInfoDO::getReturnOrder, Constant.STRING_ONE) | ||
2983 | + .likeRight(OrderBaseInfoDO::getInnerNo, "_____" + dateTime % 100)); | ||
2984 | + | ||
2882 | Datecount datecount = new Datecount(); | 2985 | Datecount datecount = new Datecount(); |
2883 | - datecount.setTrackingAndInspectingList(tracking+inspecting); | ||
2884 | - datecount.setAllCount(allMonthCount); | 2986 | + datecount.setTrackingAndInspectingList(orderInit+returnOrderBaseInfoNumber-allMonthCountNoReturn-allMonthCountReturn); |
2987 | + datecount.setAllCount(allMonthCountNoReturn+allMonthCountReturn); | ||
2885 | datecount.setProfitList(profit); | 2988 | datecount.setProfitList(profit); |
2886 | datecount.setReportList(report); | 2989 | datecount.setReportList(report); |
2887 | - datecount.setOrderInitList(orderinit); | 2990 | + datecount.setOrderInitList(orderInit+returnOrderBaseInfoNumber); |
2888 | return ServerResult.success(datecount); | 2991 | return ServerResult.success(datecount); |
2889 | } | 2992 | } |
2890 | } | 2993 | } |
@@ -2893,18 +2996,34 @@ end | @@ -2893,18 +2996,34 @@ end | ||
2893 | int year = currentDate.getYear(); | 2996 | int year = currentDate.getYear(); |
2894 | LocalDate startDate = LocalDate.of(year, currentMonth, 1); | 2997 | LocalDate startDate = LocalDate.of(year, currentMonth, 1); |
2895 | LocalDate endDate = startDate.plusMonths(1); | 2998 | LocalDate endDate = startDate.plusMonths(1); |
2896 | - long allDayCount=this.baseMapper.countAllDayvalueByOrderStatus(OrderStatusEnum.ORDER_FINISH.getStatus(),startDate,endDate); | ||
2897 | - long tracking = orderTrackStageService.countRecentDayvalueByOrderStatus(OrderStatusEnum.TRACK_ING.getStatus(),startDate,endDate); | 2999 | + long allDayCountNoReturn=this.baseMapper.countAllDayvalueByOrderStatus(OrderStatusEnum.ORDER_FINISH.getStatus(),startDate,endDate,(long)year % 100); |
3000 | + long allDayCountReturn = this.count(new LambdaQueryWrapper<OrderBaseInfoDO>() | ||
3001 | + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | ||
3002 | + .eq(OrderBaseInfoDO::getReturnOrder, Constant.STRING_ONE) | ||
3003 | + .eq(OrderBaseInfoDO::getOrderStatus,OrderStatusEnum.ORDER_FINISH.getStatus()) | ||
3004 | + .ge(OrderBaseInfoDO::getCreateTime,startDate) | ||
3005 | + .lt(OrderBaseInfoDO::getCreateTime,endDate) | ||
3006 | + .likeRight(OrderBaseInfoDO::getInnerNo, "_____" + year % 100)); | ||
3007 | + /* long tracking = orderTrackStageService.countRecentDayvalueByOrderStatus(OrderStatusEnum.TRACK_ING.getStatus(),startDate,endDate); | ||
3008 | + System.out.println("跟单中:"+tracking); | ||
2898 | long inspecting = orderInspectionStageService.countRecentDayvalueByOrderStatus(OrderStatusEnum.INSPECT_ING.getStatus(),startDate,endDate); | 3009 | long inspecting = orderInspectionStageService.countRecentDayvalueByOrderStatus(OrderStatusEnum.INSPECT_ING.getStatus(),startDate,endDate); |
3010 | + System.out.println("质检中:"+inspecting);*/ | ||
2899 | long profit= orderFieldLockApplyService.countRecentDayvalueByOrderStatus(ApplyTypeEnum.ORDER_PROFIT_APPLY.getType(),startDate,endDate); | 3011 | long profit= orderFieldLockApplyService.countRecentDayvalueByOrderStatus(ApplyTypeEnum.ORDER_PROFIT_APPLY.getType(),startDate,endDate); |
2900 | long report=orderFieldLockApplyService.countRecentDayvalueByOrderStatus(ApplyTypeEnum.ORDER_REPORT_APPLY.getType(),startDate,endDate); | 3012 | long report=orderFieldLockApplyService.countRecentDayvalueByOrderStatus(ApplyTypeEnum.ORDER_REPORT_APPLY.getType(),startDate,endDate); |
2901 | - long orderinit=this.baseMapper.countRecentDayByOrderInit(startDate,endDate); | 3013 | + |
3014 | + long orderInit=this.baseMapper.countRecentDayByOrderInit(startDate,endDate, (long) (year % 100)); | ||
3015 | + long returnOrderBaseInfoNumber = this.count(new LambdaQueryWrapper<OrderBaseInfoDO>() | ||
3016 | + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | ||
3017 | + .eq(OrderBaseInfoDO::getReturnOrder, Constant.STRING_ONE) | ||
3018 | + .ge(OrderBaseInfoDO::getCreateTime,startDate) | ||
3019 | + .lt(OrderBaseInfoDO::getCreateTime,endDate) | ||
3020 | + .likeRight(OrderBaseInfoDO::getInnerNo, "_____" + year % 100)); | ||
2902 | Datecount datecount = new Datecount(); | 3021 | Datecount datecount = new Datecount(); |
2903 | - datecount.setTrackingAndInspectingList(tracking+inspecting); | ||
2904 | - datecount.setAllCount(allDayCount); | 3022 | + datecount.setTrackingAndInspectingList(orderInit+returnOrderBaseInfoNumber-allDayCountNoReturn-allDayCountReturn); |
3023 | + datecount.setAllCount(allDayCountNoReturn+allDayCountReturn); | ||
2905 | datecount.setProfitList(profit); | 3024 | datecount.setProfitList(profit); |
2906 | datecount.setReportList(report); | 3025 | datecount.setReportList(report); |
2907 | - datecount.setOrderInitList(orderinit); | 3026 | + datecount.setOrderInitList(orderInit+returnOrderBaseInfoNumber); |
2908 | return ServerResult.success(datecount); | 3027 | return ServerResult.success(datecount); |
2909 | } | 3028 | } |
2910 | 3029 | ||
@@ -2922,11 +3041,11 @@ end | @@ -2922,11 +3041,11 @@ end | ||
2922 | return ServerResult.success(dateYearMonthTimeVOS); | 3041 | return ServerResult.success(dateYearMonthTimeVOS); |
2923 | } | 3042 | } |
2924 | if (TimePeriod.MONTH.getDescription().equals(dateTimeVO.getPeriod())) { | 3043 | if (TimePeriod.MONTH.getDescription().equals(dateTimeVO.getPeriod())) { |
2925 | - // 查询当前月份的数据 | 3044 | + // 查询当前月份的数据。 |
2926 | List<DateYearMonthTimeVO> dateYearMonthTimeVOS = this.baseMapper.countRecentMonthValueByOrderStatus(Arrays.asList(dateTimeVO.getDateTime())); | 3045 | List<DateYearMonthTimeVO> dateYearMonthTimeVOS = this.baseMapper.countRecentMonthValueByOrderStatus(Arrays.asList(dateTimeVO.getDateTime())); |
2927 | List<DateYearMonthTimeVO> combinedList = new ArrayList<>(dateYearMonthTimeVOS); | 3046 | List<DateYearMonthTimeVO> combinedList = new ArrayList<>(dateYearMonthTimeVOS); |
2928 | 3047 | ||
2929 | - // 查询对比的年份 | 3048 | + // 查询对比的年份。 |
2930 | List<Integer> yearList = new ArrayList<>(); | 3049 | List<Integer> yearList = new ArrayList<>(); |
2931 | yearList.add(dateTimeVO.getDateTime()); | 3050 | yearList.add(dateTimeVO.getDateTime()); |
2932 | if (CollectionUtils.isNotEmpty(dateTimeVO.getDateTimes())) { | 3051 | if (CollectionUtils.isNotEmpty(dateTimeVO.getDateTimes())) { |
@@ -2935,24 +3054,24 @@ end | @@ -2935,24 +3054,24 @@ end | ||
2935 | yearList.addAll(dateTimeVO.getDateTimes()); | 3054 | yearList.addAll(dateTimeVO.getDateTimes()); |
2936 | } | 3055 | } |
2937 | 3056 | ||
2938 | - // 使用 Map 来存储已有的日期信息,避免重复遍历 | 3057 | + // 使用 Map 来存储已有的日期信息,避免重复遍历。 |
2939 | Map<String, DateYearMonthTimeVO> existingDates = new HashMap<>(); | 3058 | Map<String, DateYearMonthTimeVO> existingDates = new HashMap<>(); |
2940 | 3059 | ||
2941 | - // 将已有数据存储到 Map 中 | 3060 | + // 将已有数据存储到 Map 中。 |
2942 | for (DateYearMonthTimeVO item : combinedList) { | 3061 | for (DateYearMonthTimeVO item : combinedList) { |
2943 | existingDates.put(item.getDate(), item); | 3062 | existingDates.put(item.getDate(), item); |
2944 | } | 3063 | } |
2945 | 3064 | ||
2946 | - // 遍历年份和月份,补充缺失月份 | 3065 | + // 遍历年份和月份,补充缺失月份。 |
2947 | for (Integer targetYear : yearList) { | 3066 | for (Integer targetYear : yearList) { |
2948 | for (int month = 1; month <= 12; month++) { | 3067 | for (int month = 1; month <= 12; month++) { |
2949 | String monthStr = String.format("%s-%02d", targetYear, month); | 3068 | String monthStr = String.format("%s-%02d", targetYear, month); |
2950 | - // 如果该月份没有数据,则补充 | 3069 | + // 如果该月份没有数据,则补充。 |
2951 | existingDates.putIfAbsent(monthStr, new DateYearMonthTimeVO(monthStr, 0L ,String.valueOf(targetYear))); | 3070 | existingDates.putIfAbsent(monthStr, new DateYearMonthTimeVO(monthStr, 0L ,String.valueOf(targetYear))); |
2952 | } | 3071 | } |
2953 | } | 3072 | } |
2954 | 3073 | ||
2955 | - // 更新日期前缀 | 3074 | + // 更新日期前缀。 |
2956 | existingDates.forEach((key, item) -> { | 3075 | existingDates.forEach((key, item) -> { |
2957 | String[] dateParts = item.getDate().split("-"); | 3076 | String[] dateParts = item.getDate().split("-"); |
2958 | if (dateParts.length == 2) { | 3077 | if (dateParts.length == 2) { |
@@ -2960,7 +3079,7 @@ end | @@ -2960,7 +3079,7 @@ end | ||
2960 | } | 3079 | } |
2961 | }); | 3080 | }); |
2962 | 3081 | ||
2963 | - // 返回最终结果 | 3082 | + // 返回最终结果。 |
2964 | return ServerResult.success(new ArrayList<>(existingDates.values())); | 3083 | return ServerResult.success(new ArrayList<>(existingDates.values())); |
2965 | } | 3084 | } |
2966 | 3085 | ||
@@ -2975,6 +3094,45 @@ end | @@ -2975,6 +3094,45 @@ end | ||
2975 | return ServerResult.success(dateYearMonthTimeVOS); | 3094 | return ServerResult.success(dateYearMonthTimeVOS); |
2976 | } | 3095 | } |
2977 | 3096 | ||
3097 | + @Override | ||
3098 | + public ServerResult accountStatement(HttpServletResponse response,AccountStatementVO accountStatementVO) throws IOException { | ||
3099 | + if(CollectionUtils.isEmpty(accountStatementVO.getIds())){ | ||
3100 | + return ServerResult.fail("请选中订单!"); | ||
3101 | + } | ||
3102 | + List<OrderFieldLockApplyDO> orderFieldLockApplyDOS = orderFieldLockApplyService.list(new LambdaQueryWrapper<OrderFieldLockApplyDO>() | ||
3103 | + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | ||
3104 | + .in(OrderFieldLockApplyDO::getOrderId, accountStatementVO.getIds()) | ||
3105 | + .eq(OrderFieldLockApplyDO::getType, ApplyTypeEnum.ORDER_PROFIT_APPLY.getType()) | ||
3106 | + .eq(OrderFieldLockApplyDO::getStatus,ApplyStatusEnum.WAIT_AUDIT.getStatus())); | ||
3107 | + if(CollectionUtils.isNotEmpty(orderFieldLockApplyDOS)){ | ||
3108 | + return ServerResult.fail("订单中包含利润未审批的订单,无法生成!"); | ||
3109 | + } | ||
3110 | + List<OrderProfitAnalysisDO> orderProfitAnalysisDOList = profitAnalysisService.list(new LambdaQueryWrapper<OrderProfitAnalysisDO>() | ||
3111 | + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | ||
3112 | + .in(OrderProfitAnalysisDO::getOrderId, accountStatementVO.getIds())); | ||
3113 | + if(CollectionUtils.isEmpty(orderProfitAnalysisDOList) || accountStatementVO.getIds().size() > orderProfitAnalysisDOList.size()){ | ||
3114 | + return ServerResult.fail("利润分析未填写,无法进行生成!"); | ||
3115 | + } | ||
3116 | + List<OrderBaseInfoDO> orderBaseInfoDOList = listByIds(accountStatementVO.getIds()); | ||
3117 | + Map<Long, OrderProfitAnalysisDO> orderProfitAnalysisDOMap = orderProfitAnalysisDOList.stream().collect(Collectors.toMap(OrderProfitAnalysisDO::getOrderId, Function.identity(), (x, y) -> x)); | ||
3118 | + | ||
3119 | + List<AccountStatementExcelVO> accountStatementExcelVOList = orderBaseInfoDOList.stream().map(x -> { | ||
3120 | + AccountStatementExcelVO accountStatementExcelVO = new AccountStatementExcelVO(); | ||
3121 | + BeanUtils.copyProperties(x, accountStatementExcelVO); | ||
3122 | + OrderProfitAnalysisDO orderProfitAnalysisDO = orderProfitAnalysisDOMap.get(x.getId()); | ||
3123 | + if (Objects.nonNull(orderProfitAnalysisDO)) { | ||
3124 | + accountStatementExcelVO.setProductionDepartmentPrice(orderProfitAnalysisDO.getProductionDepartmentPrice()); | ||
3125 | + accountStatementExcelVO.setProductionDepartmentTotalPrice(orderProfitAnalysisDO.getProductionDepartmentTotalPrice()); | ||
3126 | + } | ||
3127 | + return accountStatementExcelVO; | ||
3128 | + | ||
3129 | + }).collect(Collectors.toList()); | ||
3130 | + accountStatementExcelVOList.get(0).setDeduction(accountStatementVO.getDeduction()); | ||
3131 | + accountStatementExcelVOList.get(0).setDisbursement(accountStatementVO.getDisbursement()); | ||
3132 | + accountStatementExcelVOList.get(0).setTitleCompany(accountStatementVO.getTitleCompany()); | ||
3133 | + accountStatementExcel.AccountStatementExcel(response,accountStatementExcelVOList); | ||
3134 | + return ServerResult.success(); | ||
3135 | + } | ||
2978 | 3136 | ||
2979 | 3137 | ||
2980 | @Override | 3138 | @Override |
src/main/java/com/order/erp/service/order/impl/OrderFieldLockApplyServiceImpl.java
@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; | @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; | ||
4 | import cn.hutool.core.collection.CollUtil; | 4 | import cn.hutool.core.collection.CollUtil; |
5 | import com.alibaba.fastjson.JSONObject; | 5 | import com.alibaba.fastjson.JSONObject; |
6 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 6 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
7 | +import com.baomidou.mybatisplus.core.conditions.query.Query; | ||
7 | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | 8 | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
8 | import com.baomidou.mybatisplus.core.metadata.IPage; | 9 | import com.baomidou.mybatisplus.core.metadata.IPage; |
9 | import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; | 10 | import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; |
@@ -14,9 +15,7 @@ import com.order.erp.common.constant.Constant; | @@ -14,9 +15,7 @@ import com.order.erp.common.constant.Constant; | ||
14 | import com.order.erp.common.constant.ServerResult; | 15 | import com.order.erp.common.constant.ServerResult; |
15 | import com.order.erp.common.constant.ServerResultCode; | 16 | import com.order.erp.common.constant.ServerResultCode; |
16 | import com.order.erp.common.exception.BusinessException; | 17 | import com.order.erp.common.exception.BusinessException; |
17 | -import com.order.erp.common.utils.EmailSendUtils; | ||
18 | -import com.order.erp.common.utils.OrderFieldUtils; | ||
19 | -import com.order.erp.common.utils.TransactionHelper; | 18 | +import com.order.erp.common.utils.*; |
20 | import com.order.erp.config.DataScope; | 19 | import com.order.erp.config.DataScope; |
21 | import com.order.erp.domain.*; | 20 | import com.order.erp.domain.*; |
22 | import com.order.erp.domain.dto.BaseDO; | 21 | import com.order.erp.domain.dto.BaseDO; |
@@ -25,6 +24,7 @@ import com.order.erp.domain.vo.order.*; | @@ -25,6 +24,7 @@ import com.order.erp.domain.vo.order.*; | ||
25 | import com.order.erp.mapper.order.OrderFieldLockApplyMapper; | 24 | import com.order.erp.mapper.order.OrderFieldLockApplyMapper; |
26 | import com.order.erp.service.order.*; | 25 | import com.order.erp.service.order.*; |
27 | import lombok.extern.slf4j.Slf4j; | 26 | import lombok.extern.slf4j.Slf4j; |
27 | +import org.joda.time.DateTime; | ||
28 | import org.springframework.beans.BeanUtils; | 28 | import org.springframework.beans.BeanUtils; |
29 | import org.springframework.stereotype.Service; | 29 | import org.springframework.stereotype.Service; |
30 | import org.springframework.transaction.annotation.Transactional; | 30 | import org.springframework.transaction.annotation.Transactional; |
@@ -32,6 +32,7 @@ import org.springframework.transaction.annotation.Transactional; | @@ -32,6 +32,7 @@ import org.springframework.transaction.annotation.Transactional; | ||
32 | import javax.annotation.Resource; | 32 | import javax.annotation.Resource; |
33 | import java.time.LocalDate; | 33 | import java.time.LocalDate; |
34 | import java.util.*; | 34 | import java.util.*; |
35 | +import java.util.concurrent.TimeUnit; | ||
35 | import java.util.function.Function; | 36 | import java.util.function.Function; |
36 | import java.util.stream.Collectors; | 37 | import java.util.stream.Collectors; |
37 | 38 | ||
@@ -74,6 +75,8 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | @@ -74,6 +75,8 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | ||
74 | private TransactionHelper transactionHelper; | 75 | private TransactionHelper transactionHelper; |
75 | @Resource | 76 | @Resource |
76 | private EmailSendUtils emailSendUtils; | 77 | private EmailSendUtils emailSendUtils; |
78 | + @Resource | ||
79 | + private RedisUtils redisUtils; | ||
77 | 80 | ||
78 | /** | 81 | /** |
79 | * 通过ID查询单条数据 | 82 | * 通过ID查询单条数据 |
@@ -131,37 +134,71 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | @@ -131,37 +134,71 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | ||
131 | fieldVO.setProfitAnalysisFields(JSONObject.parseObject(fields, OrderProfitAnalysisFieldVO.class)); | 134 | fieldVO.setProfitAnalysisFields(JSONObject.parseObject(fields, OrderProfitAnalysisFieldVO.class)); |
132 | resultVO.setFieldInfos(fieldVO); | 135 | resultVO.setFieldInfos(fieldVO); |
133 | } | 136 | } |
134 | - if (ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(x.getType())) { | 137 | + if (ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(x.getType()) || ApplyTypeEnum.INVOICE_DEDUCT_URL.getType().equals(x.getType()) ) { |
135 | OrderLockFieldVO orderLockFieldVO = JSONObject.parseObject(fields, OrderLockFieldVO.class); | 138 | OrderLockFieldVO orderLockFieldVO = JSONObject.parseObject(fields, OrderLockFieldVO.class); |
139 | + //对于扣款单申请,需要看到扣款单的文件,所以这里需要oss实时获取。 | ||
140 | + if(ApplyTypeEnum.INVOICE_DEDUCT_URL.getType().equals(x.getType())){ | ||
141 | + DeductionUrlFieldVO deductionUrlFieldVO = orderLockFieldVO.getDeductionUrlFieldVO(); | ||
142 | + String invoiceDeductUrlKey = Constant.OSS_INVOICE_DEDUCT_URL + deductionUrlFieldVO.getDeductUrl(); | ||
143 | + String invoiceDeductUrl=(String)redisUtils.get(invoiceDeductUrlKey); | ||
144 | + if(StringUtils.isBlank(invoiceDeductUrl)){ | ||
145 | + invoiceDeductUrl = AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(deductionUrlFieldVO.getDeductUrl()), SplitUrlGetBucketName.getFileName(deductionUrlFieldVO.getDeductUrl()), new DateTime().plusHours(Constant.TWO).toDate()); | ||
146 | + redisUtils.set(invoiceDeductUrlKey,invoiceDeductUrl,Constant.ONEPOINTNINE_HOURS,TimeUnit.SECONDS); | ||
147 | + } | ||
148 | + deductionUrlFieldVO.setDeductUrl(invoiceDeductUrl); | ||
149 | + } | ||
136 | if(RoleEnum.BUSINESS_USER.getCode().equals(roleEnum.getCode())){ | 150 | if(RoleEnum.BUSINESS_USER.getCode().equals(roleEnum.getCode())){ |
137 | - if(Objects.nonNull(orderLockFieldVO.getInvoiceFieldVO()) && orderLockFieldVO.getInvoiceFieldVO().getBusinesPerson().equals(loginUserName)){ | ||
138 | - resultVO.setFieldInfos(JSONObject.parseObject(fields, OrderLockFieldVO.class)); | 151 | + if(Objects.nonNull(orderLockFieldVO.getInvoiceFieldVO()) && orderLockFieldVO.getInvoiceFieldVO().getBusinesPerson().equals(loginUserName) || Objects.nonNull(orderLockFieldVO.getDeductionUrlFieldVO()) && orderLockFieldVO.getDeductionUrlFieldVO().getBusinesPerson().equals(loginUserName)){ |
152 | + resultVO.setFieldInfos(orderLockFieldVO); | ||
139 | } | 153 | } |
140 | } else if (RoleEnum.TRACKER_USER.getCode().equals(roleEnum.getCode())) { | 154 | } else if (RoleEnum.TRACKER_USER.getCode().equals(roleEnum.getCode())) { |
141 | - if(Objects.nonNull(orderLockFieldVO.getInvoiceFieldVO()) && orderLockFieldVO.getInvoiceFieldVO().getTrackerUser().equals(loginUserName)){ | ||
142 | - resultVO.setFieldInfos(JSONObject.parseObject(fields, OrderLockFieldVO.class)); | 155 | + if(Objects.nonNull(orderLockFieldVO.getInvoiceFieldVO()) && orderLockFieldVO.getInvoiceFieldVO().getTrackerUser().equals(loginUserName) || Objects.nonNull(orderLockFieldVO.getDeductionUrlFieldVO()) && orderLockFieldVO.getDeductionUrlFieldVO().getTrackerUser().equals(loginUserName)){ |
156 | + resultVO.setFieldInfos(orderLockFieldVO); | ||
143 | } | 157 | } |
144 | } else{ | 158 | } else{ |
145 | - resultVO.setFieldInfos(JSONObject.parseObject(fields, OrderLockFieldVO.class)); | 159 | + resultVO.setFieldInfos(orderLockFieldVO); |
146 | } | 160 | } |
147 | if(Objects.isNull(resultVO.getFieldInfos())){ | 161 | if(Objects.isNull(resultVO.getFieldInfos())){ |
148 | resultVO=null; | 162 | resultVO=null; |
149 | } | 163 | } |
150 | } | 164 | } |
151 | - if (ApplyTypeEnum.CHECK_BILL_APPLY.getType().equals(x.getType()) || ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(x.getType())) { | 165 | + if (ApplyTypeEnum.CHECK_BILL_APPLY.getType().equals(x.getType()) || ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(x.getType()) || ApplyTypeEnum.CHECK_DEDUCT_URL.getType().equals(x.getType())) { |
152 | OrderLockFieldVO orderLockFieldVO = JSONObject.parseObject(fields, OrderLockFieldVO.class); | 166 | OrderLockFieldVO orderLockFieldVO = JSONObject.parseObject(fields, OrderLockFieldVO.class); |
153 | // 解决待审批列表中的应付款要显示内部编码。 这里开始 | 167 | // 解决待审批列表中的应付款要显示内部编码。 这里开始 |
154 | //这部分的目的是,对于跟单员和业务员他们也能查看到应收款和应付款中各自负责订单的审核情况。 而财务和admin则会执行else{},会看到所有的审核订单信息。 | 168 | //这部分的目的是,对于跟单员和业务员他们也能查看到应收款和应付款中各自负责订单的审核情况。 而财务和admin则会执行else{},会看到所有的审核订单信息。 |
169 | + if(ApplyTypeEnum.CHECK_DEDUCT_URL.getType().equals(x.getType())){ | ||
170 | + DeductionUrlFieldVO deductionUrlFieldVO = orderLockFieldVO.getDeductionUrlFieldVO(); | ||
171 | + String checkDeductUrlKey= Constant.OSS_CHECK_DEDUCT_URL+deductionUrlFieldVO.getDeductUrl(); | ||
172 | + String checkDeductUrl=(String)redisUtils.get(checkDeductUrlKey); | ||
173 | + if(StringUtils.isBlank(checkDeductUrl)){ | ||
174 | + checkDeductUrl = AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(deductionUrlFieldVO.getDeductUrl()), SplitUrlGetBucketName.getFileName(deductionUrlFieldVO.getDeductUrl()), new DateTime().plusHours(Constant.TWO).toDate()); | ||
175 | + redisUtils.set(checkDeductUrlKey,checkDeductUrl,Constant.ONEPOINTNINE_HOURS, TimeUnit.SECONDS); | ||
176 | + } | ||
177 | + deductionUrlFieldVO.setDeductUrl(checkDeductUrl); | ||
178 | + }else if(ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(x.getType())){ | ||
179 | + ProducePaymentCheckBillVO checkBillVO = orderLockFieldVO.getCheckBillVO(); | ||
180 | + String invoiceUrlKey = Constant.OSS_INVOICE_URL + checkBillVO.getInvoiceUrl(); | ||
181 | + String invoiceUrl =(String)redisUtils.get(invoiceUrlKey); | ||
182 | + if(StringUtils.isBlank(invoiceUrl)){ | ||
183 | + invoiceUrl= AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(checkBillVO.getInvoiceUrl()), SplitUrlGetBucketName.getFileName(checkBillVO.getInvoiceUrl()), new DateTime().plusHours(Constant.TWO).toDate()); | ||
184 | + redisUtils.set(invoiceUrlKey,invoiceUrl,Constant.ONEPOINTNINE_HOURS,TimeUnit.SECONDS); | ||
185 | + } | ||
186 | + checkBillVO.setInvoiceUrl(invoiceUrl); | ||
187 | + } | ||
155 | if(RoleEnum.BUSINESS_USER.getCode().equals(roleEnum.getCode())){ | 188 | if(RoleEnum.BUSINESS_USER.getCode().equals(roleEnum.getCode())){ |
156 | - if((Objects.nonNull(orderLockFieldVO.getProducePaymentCheckBillFieldVO()) && orderLockFieldVO.getProducePaymentCheckBillFieldVO().getBusinesPerson().equals(loginUserName))||(Objects.nonNull(orderLockFieldVO.getCheckBillVO()) && orderLockFieldVO.getCheckBillVO().getBusinesPerson().equals(loginUserName))){ | ||
157 | - resultVO.setFieldInfos(JSONObject.parseObject(fields, OrderLockFieldVO.class)); | 189 | + if((Objects.nonNull(orderLockFieldVO.getProducePaymentCheckBillFieldVO()) && orderLockFieldVO.getProducePaymentCheckBillFieldVO().getBusinesPerson().equals(loginUserName)) |
190 | + ||(Objects.nonNull(orderLockFieldVO.getCheckBillVO()) && orderLockFieldVO.getCheckBillVO().getBusinesPerson().equals(loginUserName)) | ||
191 | + ||(Objects.nonNull(orderLockFieldVO.getDeductionUrlFieldVO()) && orderLockFieldVO.getDeductionUrlFieldVO().getBusinesPerson().equals(loginUserName))){ | ||
192 | + resultVO.setFieldInfos(orderLockFieldVO); | ||
158 | } | 193 | } |
159 | } else if (RoleEnum.TRACKER_USER.getCode().equals(roleEnum.getCode())) { | 194 | } else if (RoleEnum.TRACKER_USER.getCode().equals(roleEnum.getCode())) { |
160 | - if((Objects.nonNull(orderLockFieldVO.getProducePaymentCheckBillFieldVO()) && orderLockFieldVO.getProducePaymentCheckBillFieldVO().getTrackerUser().equals(loginUserName))||(Objects.nonNull(orderLockFieldVO.getCheckBillVO()) && orderLockFieldVO.getCheckBillVO().getTrackerUser().equals(loginUserName))){ | ||
161 | - resultVO.setFieldInfos(JSONObject.parseObject(fields, OrderLockFieldVO.class)); | 195 | + if((Objects.nonNull(orderLockFieldVO.getProducePaymentCheckBillFieldVO()) && orderLockFieldVO.getProducePaymentCheckBillFieldVO().getTrackerUser().equals(loginUserName)) |
196 | + ||(Objects.nonNull(orderLockFieldVO.getCheckBillVO()) && orderLockFieldVO.getCheckBillVO().getTrackerUser().equals(loginUserName)) | ||
197 | + ||(Objects.nonNull(orderLockFieldVO.getDeductionUrlFieldVO()) && orderLockFieldVO.getDeductionUrlFieldVO().getTrackerUser().equals(loginUserName))){ | ||
198 | + resultVO.setFieldInfos(orderLockFieldVO); | ||
162 | } | 199 | } |
163 | } else{ | 200 | } else{ |
164 | - resultVO.setFieldInfos(JSONObject.parseObject(fields, OrderLockFieldVO.class)); | 201 | + resultVO.setFieldInfos(orderLockFieldVO); |
165 | } | 202 | } |
166 | if(Objects.isNull(resultVO.getFieldInfos())){ | 203 | if(Objects.isNull(resultVO.getFieldInfos())){ |
167 | resultVO=null; | 204 | resultVO=null; |
@@ -172,7 +209,9 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | @@ -172,7 +209,9 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | ||
172 | }).filter(result->result!=null).collect(Collectors.toList()); | 209 | }).filter(result->result!=null).collect(Collectors.toList()); |
173 | if (resultVOList != null && resultVOList.stream().noneMatch(x -> ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(x.getType()) | 210 | if (resultVOList != null && resultVOList.stream().noneMatch(x -> ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(x.getType()) |
174 | || ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(x.getType()) | 211 | || ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(x.getType()) |
175 | - || ApplyTypeEnum.CHECK_BILL_APPLY.getType().equals(x.getType()))) { | 212 | + || ApplyTypeEnum.CHECK_BILL_APPLY.getType().equals(x.getType()) |
213 | + || ApplyTypeEnum.INVOICE_DEDUCT_URL.getType().equals(x.getType()) | ||
214 | + || ApplyTypeEnum.CHECK_DEDUCT_URL.getType().equals(x.getType()))) { | ||
176 | fillOrderInfo(resultVOList); | 215 | fillOrderInfo(resultVOList); |
177 | } | 216 | } |
178 | } | 217 | } |
@@ -257,8 +296,20 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | @@ -257,8 +296,20 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | ||
257 | if (orderBaseInfoDOMap.containsKey(x.getOrderId())) { | 296 | if (orderBaseInfoDOMap.containsKey(x.getOrderId())) { |
258 | OrderBaseInfoDO orderBaseInfoDO = orderBaseInfoDOMap.get(x.getOrderId()); | 297 | OrderBaseInfoDO orderBaseInfoDO = orderBaseInfoDOMap.get(x.getOrderId()); |
259 | OrderBaseInfoVO orderBaseInfo = new OrderBaseInfoVO(); | 298 | OrderBaseInfoVO orderBaseInfo = new OrderBaseInfoVO(); |
260 | - BeanUtils.copyProperties(orderBaseInfoDO, orderBaseInfo); | 299 | + BeanUtils.copyProperties(orderBaseInfoDO, orderBaseInfo,"picUrl","smallPicUrl"); |
261 | x.setOrderBaseInfo(orderBaseInfo); | 300 | x.setOrderBaseInfo(orderBaseInfo); |
301 | + String picUrlKey = Constant.OSS_PIC_URL + orderBaseInfoDO.getPicUrl(); | ||
302 | + String smallPicUrlKey = Constant.OSS_SMALL_PIC_URL + orderBaseInfoDO.getSmallPicUrl(); | ||
303 | + String picUrl=(String)redisUtils.get(picUrlKey); | ||
304 | + String smallPicUrl=(String)redisUtils.get(smallPicUrlKey); | ||
305 | + if(StringUtils.isBlank(picUrl)){ | ||
306 | + picUrl= AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(orderBaseInfoDO.getPicUrl()), SplitUrlGetBucketName.getFileName(orderBaseInfoDO.getPicUrl()), new DateTime().plusHours(Constant.TWO).toDate()); | ||
307 | + } | ||
308 | + if(StringUtils.isBlank(smallPicUrl)){ | ||
309 | + smallPicUrl= AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(orderBaseInfoDO.getSmallPicUrl()), SplitUrlGetBucketName.getFileName(orderBaseInfoDO.getSmallPicUrl()), new DateTime().plusHours(Constant.TWO).toDate()); | ||
310 | + } | ||
311 | + x.getOrderBaseInfo().setSmallPicUrl(smallPicUrl); | ||
312 | + x.getOrderBaseInfo().setPicUrl(picUrl); | ||
262 | } | 313 | } |
263 | }); | 314 | }); |
264 | } | 315 | } |
@@ -370,7 +421,8 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | @@ -370,7 +421,8 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | ||
370 | } | 421 | } |
371 | Set<Long> orderIds = new HashSet<>(); | 422 | Set<Long> orderIds = new HashSet<>(); |
372 | //由于下面是原始的代码,怕改出错了,所以我只对我需要的需求进行判断,我只针对我需要的这种情况,其他情况下就不走这种情况。 限制情况为跟单业务,对应收款,应付款,发票审核请求时。 | 423 | //由于下面是原始的代码,怕改出错了,所以我只对我需要的需求进行判断,我只针对我需要的这种情况,其他情况下就不走这种情况。 限制情况为跟单业务,对应收款,应付款,发票审核请求时。 |
373 | - if(queryVO.getType()==Constant.THIRTY || queryVO.getType()==4050){ | 424 | +// queryVO.getType==Constant.SIXTY完全是为了跟单和业务对于应收账单类型请求时,屏蔽掉应收账单,只展示invoice扣款单申请数据。 |
425 | + if(queryVO.getType()==Constant.THIRTY || queryVO.getType()==4050 || queryVO.getType()==Constant.SIXTY){ | ||
374 | 426 | ||
375 | }else{ | 427 | }else{ |
376 | /** 这部分代码是之前的,每台看懂,就先不修改了,保留*/ | 428 | /** 这部分代码是之前的,每台看懂,就先不修改了,保留*/ |
@@ -403,7 +455,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | @@ -403,7 +455,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | ||
403 | if(Constant.FOUR == String.valueOf(queryVO.getType()).length()){ | 455 | if(Constant.FOUR == String.valueOf(queryVO.getType()).length()){ |
404 | int firstTwoDigits = queryVO.getType() / 100; | 456 | int firstTwoDigits = queryVO.getType() / 100; |
405 | int lastTwoDigits = queryVO.getType() % 100; | 457 | int lastTwoDigits = queryVO.getType() % 100; |
406 | - queryWrapper.in(OrderFieldLockApplyDO::getType,firstTwoDigits,lastTwoDigits); | 458 | + queryWrapper.in(OrderFieldLockApplyDO::getType,firstTwoDigits,lastTwoDigits,ApplyTypeEnum.CHECK_DEDUCT_URL.getType()); |
407 | //目前是只能通过内部编号查询出应付款审核,无法查询出发票信息。 | 459 | //目前是只能通过内部编号查询出应付款审核,无法查询出发票信息。 |
408 | if(CollectionUtils.isNotEmpty(queryVO.getInnerNo())){ | 460 | if(CollectionUtils.isNotEmpty(queryVO.getInnerNo())){ |
409 | String queryInnerNo = queryVO.getInnerNo().get(0).trim(); | 461 | String queryInnerNo = queryVO.getInnerNo().get(0).trim(); |
@@ -411,23 +463,26 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | @@ -411,23 +463,26 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | ||
411 | "(" + | 463 | "(" + |
412 | "JSON_CONTAINS(JSON_EXTRACT(fields, '$.producePaymentCheckBillFieldVO.innerNo'), JSON_QUOTE({0})) " + | 464 | "JSON_CONTAINS(JSON_EXTRACT(fields, '$.producePaymentCheckBillFieldVO.innerNo'), JSON_QUOTE({0})) " + |
413 | "OR JSON_UNQUOTE(JSON_EXTRACT(fields, '$.checkBillVO.innerNo')) = {0}" + | 465 | "OR JSON_UNQUOTE(JSON_EXTRACT(fields, '$.checkBillVO.innerNo')) = {0}" + |
466 | + "OR JSON_UNQUOTE(JSON_EXTRACT(fields, '$.deductionUrlFieldVO.innerNo')) = {0}" + | ||
414 | ")", | 467 | ")", |
415 | queryInnerNo | 468 | queryInnerNo |
416 | ); | 469 | ); |
417 | } | 470 | } |
418 | - }else{ | 471 | + }else if(Objects.nonNull(queryVO.getType()) && queryVO.getType().equals(ApplyTypeEnum.INVOICE_BILL_APPLY.getType())){ |
419 | //应收款审核。 | 472 | //应收款审核。 |
420 | - if(Objects.nonNull(queryVO.getType()) && queryVO.getType().equals(ApplyTypeEnum.INVOICE_BILL_APPLY.getType())){ | ||
421 | - queryWrapper.eq(Objects.nonNull(queryVO.getType()), OrderFieldLockApplyDO::getType, queryVO.getType()); | 473 | + queryWrapper.in(Objects.nonNull(queryVO.getType()), OrderFieldLockApplyDO::getType, queryVO.getType(),ApplyTypeEnum.INVOICE_DEDUCT_URL.getType()); |
422 | //这个内部编号单独针对于应付款申请设置的。 | 474 | //这个内部编号单独针对于应付款申请设置的。 |
423 | if(CollectionUtils.isNotEmpty(queryVO.getInnerNo())){ | 475 | if(CollectionUtils.isNotEmpty(queryVO.getInnerNo())){ |
424 | String queryInnerNo = queryVO.getInnerNo().get(0).trim(); | 476 | String queryInnerNo = queryVO.getInnerNo().get(0).trim(); |
425 | queryWrapper.apply( | 477 | queryWrapper.apply( |
426 | - "JSON_CONTAINS(JSON_EXTRACT(fields, '$.invoiceFieldVO.innerNo'), JSON_QUOTE({0}))", | 478 | + "(" + |
479 | + "JSON_CONTAINS(JSON_EXTRACT(fields, '$.invoiceFieldVO.innerNo'), JSON_QUOTE({0})) " + | ||
480 | + "OR JSON_UNQUOTE(JSON_EXTRACT(fields, '$.deductionUrlFieldVO.innerNo')) = {0}" + | ||
481 | + ")", | ||
427 | queryInnerNo | 482 | queryInnerNo |
428 | ); | 483 | ); |
429 | } | 484 | } |
430 | - } | 485 | + }else{ |
431 | //其他审核类型。 | 486 | //其他审核类型。 |
432 | queryWrapper.eq(Objects.nonNull(queryVO.getType()), OrderFieldLockApplyDO::getType, queryVO.getType()); | 487 | queryWrapper.eq(Objects.nonNull(queryVO.getType()), OrderFieldLockApplyDO::getType, queryVO.getType()); |
433 | } | 488 | } |
@@ -440,9 +495,11 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | @@ -440,9 +495,11 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | ||
440 | if (!invoiceNos.isEmpty()) { | 495 | if (!invoiceNos.isEmpty()) { |
441 | // 使用参数化查询避免 SQL 拼接问题 | 496 | // 使用参数化查询避免 SQL 拼接问题 |
442 | queryWrapper.apply( | 497 | queryWrapper.apply( |
443 | - "JSON_UNQUOTE(JSON_EXTRACT(fields, '$.invoiceFieldVO.invoiceNo')) like {0}", | ||
444 | - "%"+invoiceNos+"%" | 498 | + "((JSON_UNQUOTE(JSON_EXTRACT(fields, '$.invoiceFieldVO.invoiceNo')) LIKE {0} " + |
499 | + "OR JSON_UNQUOTE(JSON_EXTRACT(fields, '$.deductionUrlFieldVO.invoiceNo')) LIKE {0}))", | ||
500 | + "%" + invoiceNos + "%" | ||
445 | ); | 501 | ); |
502 | + | ||
446 | } | 503 | } |
447 | } | 504 | } |
448 | 505 | ||
@@ -455,15 +512,18 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | @@ -455,15 +512,18 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | ||
455 | // 使用括号分组确保逻辑优先级正确 | 512 | // 使用括号分组确保逻辑优先级正确 |
456 | queryWrapper.apply( | 513 | queryWrapper.apply( |
457 | "((JSON_UNQUOTE(JSON_EXTRACT(fields, '$.producePaymentCheckBillFieldVO.checkNo')) like {0}) " + | 514 | "((JSON_UNQUOTE(JSON_EXTRACT(fields, '$.producePaymentCheckBillFieldVO.checkNo')) like {0}) " + |
458 | - "OR (JSON_UNQUOTE(JSON_EXTRACT(fields, '$.checkBillVO.checkNo')) like {0}))", | 515 | + "OR (JSON_UNQUOTE(JSON_EXTRACT(fields, '$.checkBillVO.checkNo')) like {0})" + |
516 | + "OR (JSON_UNQUOTE(JSON_EXTRACT(fields, '$.deductionUrlFieldVO.checkNo')) like {0})" + | ||
517 | + ")", | ||
459 | "%"+checkNos+"%" | 518 | "%"+checkNos+"%" |
460 | ); | 519 | ); |
461 | } | 520 | } |
462 | } | 521 | } |
463 | //由于不懂下面的代码,所以我只对我需要的需求进行判断,我只针对我需要的这种情况,其他情况下就不走这种情况。 | 522 | //由于不懂下面的代码,所以我只对我需要的需求进行判断,我只针对我需要的这种情况,其他情况下就不走这种情况。 |
464 | - if(RoleEnum.TRACKER_USER.getCode().equals(roleEnum.getCode()) && (queryVO.getType()==Constant.THIRTY || queryVO.getType()==4050)){ | 523 | + // queryVO.getType==Constant.SIXTY完全是为了跟单和业务对于应收账单类型请求时,屏蔽掉应收账单,只展示invoice扣款单申请数据。 |
524 | + if(RoleEnum.TRACKER_USER.getCode().equals(roleEnum.getCode()) && (queryVO.getType()==Constant.THIRTY || queryVO.getType()==4050 || queryVO.getType() ==Constant.SIXTY)){ | ||
465 | 525 | ||
466 | - }else if(RoleEnum.BUSINESS_USER.getCode().equals(roleEnum.getCode()) && (queryVO.getType()==Constant.THIRTY || queryVO.getType()==4050)){ | 526 | + }else if(RoleEnum.BUSINESS_USER.getCode().equals(roleEnum.getCode()) && (queryVO.getType()==Constant.THIRTY || queryVO.getType()==4050 || queryVO.getType() ==Constant.SIXTY)){ |
467 | 527 | ||
468 | }else{ | 528 | }else{ |
469 | if (Objects.isNull(roleSelect)) { | 529 | if (Objects.isNull(roleSelect)) { |
@@ -512,6 +572,94 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | @@ -512,6 +572,94 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | ||
512 | return ServerResult.success(); | 572 | return ServerResult.success(); |
513 | } | 573 | } |
514 | 574 | ||
575 | + @Override | ||
576 | + public ServerResult audit_detail(AuditDetailQueryVO auditDetailQueryVO) { | ||
577 | + if(Objects.isNull(auditDetailQueryVO.getId())){ | ||
578 | + throw new BusinessException(ServerResultCode.PARAM_ERROR); | ||
579 | + } | ||
580 | + OrderFieldLockApplyDO orderFieldLockApplyDO = getById(auditDetailQueryVO.getId()); | ||
581 | + if(Objects.isNull(orderFieldLockApplyDO)){ | ||
582 | + throw new BusinessException(ServerResultCode.EMPTY_RESULT); | ||
583 | + } | ||
584 | + OrderLockFieldVO orderLockFieldVO = JSONObject.parseObject(orderFieldLockApplyDO.getFields(), OrderLockFieldVO.class); | ||
585 | + //应付款类型。 | ||
586 | + if(ApplyTypeEnum.CHECK_BILL_APPLY.getType().equals(orderFieldLockApplyDO.getType()) || ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(orderFieldLockApplyDO.getType()) || ApplyTypeEnum.CHECK_DEDUCT_URL.getType().equals(orderFieldLockApplyDO.getType())){ | ||
587 | + LambdaQueryWrapper<ProducePaymentCheckBillOrderDO> lambdaQueryWrapper = new LambdaQueryWrapper<ProducePaymentCheckBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN); | ||
588 | + if(ApplyTypeEnum.CHECK_BILL_APPLY.getType().equals(orderFieldLockApplyDO.getType())){ | ||
589 | + ProducePaymentCheckBillFieldVO producePaymentCheckBillFieldVO = orderLockFieldVO.getProducePaymentCheckBillFieldVO(); | ||
590 | + lambdaQueryWrapper.in(ProducePaymentCheckBillOrderDO::getId, producePaymentCheckBillFieldVO.getProducePaymentCheckBillId()); | ||
591 | + }else if(ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(orderFieldLockApplyDO.getType())){ | ||
592 | + ProducePaymentCheckBillVO producePaymentCheckBillVO = orderLockFieldVO.getCheckBillVO(); | ||
593 | + lambdaQueryWrapper.eq(ProducePaymentCheckBillOrderDO::getId,producePaymentCheckBillVO.getId()); | ||
594 | + }else if(ApplyTypeEnum.CHECK_DEDUCT_URL.getType().equals(orderFieldLockApplyDO.getType())){ | ||
595 | + DeductionUrlFieldVO deductionUrlFieldVO = orderLockFieldVO.getDeductionUrlFieldVO(); | ||
596 | + lambdaQueryWrapper.eq(ProducePaymentCheckBillOrderDO::getId,deductionUrlFieldVO.getId()); | ||
597 | + } | ||
598 | + List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOList = checkBillOrderService.list(lambdaQueryWrapper); | ||
599 | + List<Long> orderIds = producePaymentCheckBillOrderDOList.stream().map(producePaymentCheckBillOrderDO -> producePaymentCheckBillOrderDO.getOrderId()).collect(Collectors.toList()); | ||
600 | + //查询基础信息 | ||
601 | + List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(orderIds); | ||
602 | + Map<Long, OrderBaseInfoDO> orderBaseInfoDOMap = orderBaseInfoDOList.stream().collect(Collectors.toMap(OrderBaseInfoDO::getId, order -> order, (existing, duplicate) -> existing)); | ||
603 | + //查询价格。 | ||
604 | + List<OrderProfitAnalysisDO> orderProfitAnalysisDOList = profitAnalysisService.list( new LambdaQueryWrapper<OrderProfitAnalysisDO>().eq(BaseDO::getEnableFlag,Constant.ENABLE_TEN) | ||
605 | + .in(OrderProfitAnalysisDO::getOrderId,orderIds)); | ||
606 | + Map<Long, OrderProfitAnalysisDO> orderProfitAnalysisDOMap = orderProfitAnalysisDOList.stream().collect(Collectors.toMap(OrderProfitAnalysisDO::getOrderId, orderProfit -> orderProfit, (existing, duplicate) -> existing)); | ||
607 | + List<CheckBillResultVO> checkBillResultVOList = producePaymentCheckBillOrderDOList.stream().map(producePaymentCheckBillOrderDO -> { | ||
608 | + CheckBillResultVO checkBillResultVO = new CheckBillResultVO(); | ||
609 | + if (orderBaseInfoDOMap.containsKey(producePaymentCheckBillOrderDO.getOrderId()) && orderProfitAnalysisDOMap.containsKey(producePaymentCheckBillOrderDO.getOrderId())) { | ||
610 | + BeanUtils.copyProperties(producePaymentCheckBillOrderDO, checkBillResultVO, "projectNo", "productionDepartment", "innerNo", "smallPicUrl", "orderCount", "modeleLo", "productionDepartmentPrice", "productionDepartmentTotalPrice"); | ||
611 | + checkBillResultVO.setOrderId(producePaymentCheckBillOrderDO.getOrderId()); | ||
612 | + checkBillResultVO.setProjectNo(orderBaseInfoDOMap.get(producePaymentCheckBillOrderDO.getOrderId()).getProjectNo()); | ||
613 | + checkBillResultVO.setProductionDepartment(orderBaseInfoDOMap.get(producePaymentCheckBillOrderDO.getOrderId()).getProductionDepartment()); | ||
614 | + checkBillResultVO.setInnerNo(orderBaseInfoDOMap.get(producePaymentCheckBillOrderDO.getOrderId()).getInnerNo()); | ||
615 | + checkBillResultVO.setSmallPicUrl(orderBaseInfoDOMap.get(producePaymentCheckBillOrderDO.getOrderId()).getSmallPicUrl()); | ||
616 | + checkBillResultVO.setOrderCount(orderBaseInfoDOMap.get(producePaymentCheckBillOrderDO.getOrderId()).getOrderCount()); | ||
617 | + checkBillResultVO.setModeleLo(orderBaseInfoDOMap.get(producePaymentCheckBillOrderDO.getOrderId()).getModeleLo()); | ||
618 | + checkBillResultVO.setProductionDepartmentPrice(orderProfitAnalysisDOMap.get(producePaymentCheckBillOrderDO.getOrderId()).getProductionDepartmentPrice()); | ||
619 | + checkBillResultVO.setProductionDepartmentTotalPrice(orderProfitAnalysisDOMap.get(producePaymentCheckBillOrderDO.getOrderId()).getProductionDepartmentTotalPrice()); | ||
620 | + } | ||
621 | + return checkBillResultVO; | ||
622 | + }).collect(Collectors.toList()); | ||
623 | + return ServerResult.success(checkBillResultVOList); | ||
624 | + //应收款类型 | ||
625 | + }else if(ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(orderFieldLockApplyDO.getType()) || ApplyTypeEnum.INVOICE_DEDUCT_URL.getType().equals(orderFieldLockApplyDO.getType())){ | ||
626 | + LambdaQueryWrapper<InvoiceBillOrderDO> invoiceBillOrderDOLambdaQueryWrapper = new LambdaQueryWrapper<InvoiceBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN); | ||
627 | + if(ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(orderFieldLockApplyDO.getType())){ | ||
628 | + InvoiceFieldVO invoiceFieldVO = orderLockFieldVO.getInvoiceFieldVO(); | ||
629 | + invoiceBillOrderDOLambdaQueryWrapper.in(InvoiceBillOrderDO::getId,invoiceFieldVO.getInvoiceId()); | ||
630 | + }else if(ApplyTypeEnum.INVOICE_DEDUCT_URL.getType().equals(orderFieldLockApplyDO.getType())){ | ||
631 | + DeductionUrlFieldVO deductionUrlFieldVO = orderLockFieldVO.getDeductionUrlFieldVO(); | ||
632 | + invoiceBillOrderDOLambdaQueryWrapper.eq(InvoiceBillOrderDO::getId,deductionUrlFieldVO.getId()); | ||
633 | + } | ||
634 | + List<InvoiceBillOrderDO> invoiceBillOrderDOList = invoiceBillOrderService.list(invoiceBillOrderDOLambdaQueryWrapper); | ||
635 | + List<Long> orderIds = invoiceBillOrderDOList.stream().map(invoiceBillOrderDO -> invoiceBillOrderDO.getOrderId()).collect(Collectors.toList()); | ||
636 | + //查询基础信息 | ||
637 | + List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(orderIds); | ||
638 | + Map<Long, OrderBaseInfoDO> orderBaseInfoDOMap = orderBaseInfoDOList.stream().collect(Collectors.toMap(OrderBaseInfoDO::getId, order -> order, (existing, duplicate) -> existing)); | ||
639 | + //查询价格。 | ||
640 | + List<OrderProfitAnalysisDO> orderProfitAnalysisDOList = profitAnalysisService.list(new LambdaQueryWrapper<OrderProfitAnalysisDO>().eq(BaseDO::getEnableFlag,Constant.ENABLE_TEN) | ||
641 | + .in(OrderProfitAnalysisDO::getOrderId,orderIds)); | ||
642 | + Map<Long, OrderProfitAnalysisDO> orderProfitAnalysisDOMap = orderProfitAnalysisDOList.stream().collect(Collectors.toMap(OrderProfitAnalysisDO::getOrderId, orderProfit -> orderProfit, (existing, duplicate) -> existing)); | ||
643 | + List<InvoiceResultVO> invoiceResultVOList = invoiceBillOrderDOList.stream().map(invoiceBillOrderDO -> { | ||
644 | + InvoiceResultVO invoiceResultVO = new InvoiceResultVO(); | ||
645 | + if (orderBaseInfoDOMap.containsKey(invoiceBillOrderDO.getOrderId()) && orderProfitAnalysisDOMap.containsKey(invoiceBillOrderDO.getOrderId())) { | ||
646 | + BeanUtils.copyProperties(invoiceBillOrderDO, invoiceResultVO, "projectNo", "productionDepartment", "innerNo", "smallPicUrl", "orderCount", "modeleLo", "customerPrice", "customerTotalPrice"); | ||
647 | + invoiceResultVO.setOrderId(invoiceBillOrderDO.getOrderId()); | ||
648 | + invoiceResultVO.setProjectNo(orderBaseInfoDOMap.get(invoiceBillOrderDO.getOrderId()).getProjectNo()); | ||
649 | + invoiceResultVO.setProductionDepartment(orderBaseInfoDOMap.get(invoiceBillOrderDO.getOrderId()).getProductionDepartment()); | ||
650 | + invoiceResultVO.setInnerNo(orderBaseInfoDOMap.get(invoiceBillOrderDO.getOrderId()).getInnerNo()); | ||
651 | + invoiceResultVO.setSmallPicUrl(orderBaseInfoDOMap.get(invoiceBillOrderDO.getOrderId()).getSmallPicUrl()); | ||
652 | + invoiceResultVO.setOrderCount(orderBaseInfoDOMap.get(invoiceBillOrderDO.getOrderId()).getOrderCount()); | ||
653 | + invoiceResultVO.setModeleLo(orderBaseInfoDOMap.get(invoiceBillOrderDO.getOrderId()).getModeleLo()); | ||
654 | + invoiceResultVO.setCustomerPrice(orderProfitAnalysisDOMap.get(invoiceBillOrderDO.getOrderId()).getCustomerPrice()); | ||
655 | + invoiceResultVO.setCustomerTotalPrice(orderProfitAnalysisDOMap.get(invoiceBillOrderDO.getOrderId()).getCustomerTotalPrice()); | ||
656 | + } | ||
657 | + return invoiceResultVO; | ||
658 | + }).collect(Collectors.toList()); | ||
659 | + return ServerResult.success(invoiceResultVOList); | ||
660 | + } | ||
661 | + return ServerResult.success(); | ||
662 | + } | ||
515 | @Transactional(rollbackFor = Exception.class) | 663 | @Transactional(rollbackFor = Exception.class) |
516 | public void doRefuse(OrderFieldLockApplyDO applyDO, Long auditUserId, String refuseRemark) { | 664 | public void doRefuse(OrderFieldLockApplyDO applyDO, Long auditUserId, String refuseRemark) { |
517 | applyDO.setAuditUserId(auditUserId); | 665 | applyDO.setAuditUserId(auditUserId); |
@@ -519,7 +667,11 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | @@ -519,7 +667,11 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | ||
519 | applyDO.setRefuseRemark(refuseRemark); | 667 | applyDO.setRefuseRemark(refuseRemark); |
520 | //应收款和应付款的申请,没有把orderId作为OrderFieldLockApplyDO的orderId,而是把InvoiceBillOrdeDO.getId()作为orderId来存储的。所以肯定查找不到。 | 668 | //应收款和应付款的申请,没有把orderId作为OrderFieldLockApplyDO的orderId,而是把InvoiceBillOrdeDO.getId()作为orderId来存储的。所以肯定查找不到。 |
521 | OrderBaseInfoDO orderBaseInfoDO = orderBaseInfoService.getById(applyDO.getOrderId()); | 669 | OrderBaseInfoDO orderBaseInfoDO = orderBaseInfoService.getById(applyDO.getOrderId()); |
522 | - if(!ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(applyDO.getType()) && !ApplyTypeEnum.CHECK_BILL_APPLY.getType().equals(applyDO.getType()) && !ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(applyDO.getType())){ | 670 | + if(!ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(applyDO.getType()) |
671 | + && !ApplyTypeEnum.CHECK_BILL_APPLY.getType().equals(applyDO.getType()) | ||
672 | + && !ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(applyDO.getType()) | ||
673 | + && !ApplyTypeEnum.INVOICE_DEDUCT_URL.getType().equals(applyDO.getType()) | ||
674 | + && !ApplyTypeEnum.CHECK_DEDUCT_URL.getType().equals(applyDO.getType())){ | ||
523 | if (Objects.isNull(orderBaseInfoDO)) { | 675 | if (Objects.isNull(orderBaseInfoDO)) { |
524 | throw new BusinessException(ServerResultCode.ORDER_BASE_INFO_EMPTY); | 676 | throw new BusinessException(ServerResultCode.ORDER_BASE_INFO_EMPTY); |
525 | } | 677 | } |
@@ -546,6 +698,15 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | @@ -546,6 +698,15 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | ||
546 | } else if (ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(applyDO.getType())) { | 698 | } else if (ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(applyDO.getType())) { |
547 | OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class); | 699 | OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class); |
548 | InvoiceFieldVO invoiceBillOrderDO = lockFieldVO.getInvoiceFieldVO(); | 700 | InvoiceFieldVO invoiceBillOrderDO = lockFieldVO.getInvoiceFieldVO(); |
701 | + //查询是否存在未审核的扣款单。 | ||
702 | + List<OrderFieldLockApplyDO> InvoiceDeductUrlList = list(new LambdaQueryWrapper<OrderFieldLockApplyDO>() | ||
703 | + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | ||
704 | + .in(OrderFieldLockApplyDO::getOrderId, invoiceBillOrderDO.getInvoiceId()) | ||
705 | + .eq(OrderFieldLockApplyDO::getType, ApplyTypeEnum.INVOICE_DEDUCT_URL.getType()) | ||
706 | + .eq(OrderFieldLockApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT)); | ||
707 | + if(CollectionUtils.isNotEmpty(InvoiceDeductUrlList)){ | ||
708 | + throw new BusinessException("该Invoice存在未审批的扣款单,请先审批该对账单的扣款单!"); | ||
709 | + } | ||
549 | List<InvoiceBillOrderDO> invoiceBillOrderDOList = invoiceBillOrderService.listByIds(invoiceBillOrderDO.getInvoiceId()); | 710 | List<InvoiceBillOrderDO> invoiceBillOrderDOList = invoiceBillOrderService.listByIds(invoiceBillOrderDO.getInvoiceId()); |
550 | if(CollectionUtils.isNotEmpty(invoiceBillOrderDOList)){ | 711 | if(CollectionUtils.isNotEmpty(invoiceBillOrderDOList)){ |
551 | List<InvoiceBillOrderDO> invoiceBillOrderDOS = invoiceBillOrderDOList.stream().filter(Objects::nonNull).map(x -> { | 712 | List<InvoiceBillOrderDO> invoiceBillOrderDOS = invoiceBillOrderDOList.stream().filter(Objects::nonNull).map(x -> { |
@@ -586,6 +747,15 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | @@ -586,6 +747,15 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | ||
586 | if(CollectionUtils.isNotEmpty(producePayCheckBillInvoiceUrlList)){ | 747 | if(CollectionUtils.isNotEmpty(producePayCheckBillInvoiceUrlList)){ |
587 | throw new BusinessException("该生产科对账单存在未审批的发票,请先审批该对账单的发票!"); | 748 | throw new BusinessException("该生产科对账单存在未审批的发票,请先审批该对账单的发票!"); |
588 | } | 749 | } |
750 | + //查询是否存在未审核的扣款单。 | ||
751 | + List<OrderFieldLockApplyDO> InvoiceDeductUrlList = list(new LambdaQueryWrapper<OrderFieldLockApplyDO>() | ||
752 | + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | ||
753 | + .in(OrderFieldLockApplyDO::getOrderId, producePaymentCheckBillId) | ||
754 | + .eq(OrderFieldLockApplyDO::getType, ApplyTypeEnum.CHECK_DEDUCT_URL.getType()) | ||
755 | + .eq(OrderFieldLockApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT)); | ||
756 | + if(CollectionUtils.isNotEmpty(InvoiceDeductUrlList)){ | ||
757 | + throw new BusinessException("该生产科对账单存在未审批的扣款单,请先审批该对账单的扣款单!"); | ||
758 | + } | ||
589 | List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOList = checkBillOrderService.listByIds(producePaymentCheckBillId); | 759 | List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOList = checkBillOrderService.listByIds(producePaymentCheckBillId); |
590 | if(CollectionUtils.isNotEmpty(producePaymentCheckBillOrderDOList)){ | 760 | if(CollectionUtils.isNotEmpty(producePaymentCheckBillOrderDOList)){ |
591 | List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOS= producePaymentCheckBillOrderDOList.stream().filter(Objects::nonNull).map(x -> { | 761 | List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOS= producePaymentCheckBillOrderDOList.stream().filter(Objects::nonNull).map(x -> { |
@@ -642,6 +812,60 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | @@ -642,6 +812,60 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | ||
642 | invoiceAndCheckBillSendEmailVO.setCheckBillOrderDO(invoiceInfoDO); | 812 | invoiceAndCheckBillSendEmailVO.setCheckBillOrderDO(invoiceInfoDO); |
643 | invoiceAndCheckBillSendEmailVO.setRefuseRemark(refuseRemark); | 813 | invoiceAndCheckBillSendEmailVO.setRefuseRemark(refuseRemark); |
644 | emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_INVOICEURL_FAIL,invoiceAndCheckBillSendEmailVO,false); | 814 | emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_INVOICEURL_FAIL,invoiceAndCheckBillSendEmailVO,false); |
815 | + }else if(ApplyTypeEnum.INVOICE_DEDUCT_URL.getType().equals(applyDO.getType())){ | ||
816 | + OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class); | ||
817 | + DeductionUrlFieldVO deductionUrlFieldVO = lockFieldVO.getDeductionUrlFieldVO(); | ||
818 | + //得到旧的。 | ||
819 | + InvoiceBillOrderDO invoiceBillOrderDO=invoiceBillOrderService.getById(deductionUrlFieldVO.getId()); | ||
820 | + invoiceBillOrderDO.setInvoiceDeductUrlStatus(ApplyStatusEnum.AUDIT_REFUSE.getStatus()); | ||
821 | + //传递给审核一直都是最新的发票。 | ||
822 | + if(com.order.erp.common.utils.StringUtils.isNotBlank(invoiceBillOrderDO.getDeductUrl())){ | ||
823 | + if(Arrays.stream(invoiceBillOrderDO.getDeductUrl().split(",")).anyMatch(item->item.equals(deductionUrlFieldVO.getDeductUrl()))){ | ||
824 | + // 将 invoiceUrls 分割成 List 并删除相同项 | ||
825 | + List<String> urlList = new ArrayList<>(Arrays.asList(invoiceBillOrderDO.getDeductUrl().split(","))); | ||
826 | + urlList.removeIf(url -> url.equals(deductionUrlFieldVO.getDeductUrl())); | ||
827 | + | ||
828 | + // 将更新后的 List 转换回逗号分隔的字符串并重新设置 | ||
829 | + String updatedInvoiceUrls = String.join(",", urlList); | ||
830 | + invoiceBillOrderDO.setDeductUrl(updatedInvoiceUrls); | ||
831 | + } | ||
832 | + }else{ | ||
833 | + invoiceBillOrderDO.setDeductUrl(null); | ||
834 | + } | ||
835 | + invoiceBillOrderService.updateById(invoiceBillOrderDO); | ||
836 | + //发送邮件通知跟单员和业务员。 | ||
837 | + //发送邮箱通知财务。 这里这个邮箱通知财务,只能提示invoice号,因为一个invoice申请对应多个invoice号,所以会有多个内部编号和项目号等。 | ||
838 | + InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO(); | ||
839 | + invoiceAndCheckBillSendEmailVO.setDeductionUrlFieldVO(deductionUrlFieldVO); | ||
840 | + invoiceAndCheckBillSendEmailVO.setRefuseRemark(refuseRemark); | ||
841 | + emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.INVOICE_FAIL,invoiceAndCheckBillSendEmailVO,false); | ||
842 | + }else if(ApplyTypeEnum.CHECK_DEDUCT_URL.getType().equals(applyDO.getType())){ | ||
843 | + OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class); | ||
844 | + DeductionUrlFieldVO deductionUrlFieldVO = lockFieldVO.getDeductionUrlFieldVO(); | ||
845 | + //得到旧的。 | ||
846 | + ProducePaymentCheckBillOrderDO checkBillOrderDO=checkBillOrderService.getById(deductionUrlFieldVO.getId()); | ||
847 | + checkBillOrderDO.setCheckDeductUrlStatus(ApplyStatusEnum.AUDIT_REFUSE.getStatus()); | ||
848 | + //传递给审核一直都是最新的发票。 | ||
849 | + if(com.order.erp.common.utils.StringUtils.isNotBlank(checkBillOrderDO.getDeductUrl())){ | ||
850 | + if(Arrays.stream(checkBillOrderDO.getDeductUrl().split(",")).anyMatch(item->item.equals(deductionUrlFieldVO.getDeductUrl()))){ | ||
851 | + // 将 invoiceUrls 分割成 List 并删除相同项 | ||
852 | + List<String> urlList = new ArrayList<>(Arrays.asList(checkBillOrderDO.getDeductUrl().split(","))); | ||
853 | + urlList.removeIf(url -> url.equals(deductionUrlFieldVO.getDeductUrl())); | ||
854 | + | ||
855 | + // 将更新后的 List 转换回逗号分隔的字符串并重新设置 | ||
856 | + String updatedInvoiceUrls = String.join(",", urlList); | ||
857 | + checkBillOrderDO.setDeductUrl(updatedInvoiceUrls); | ||
858 | + } | ||
859 | + }else{ | ||
860 | + checkBillOrderDO.setDeductUrl(null); | ||
861 | + } | ||
862 | + checkBillOrderService.updateById(checkBillOrderDO); | ||
863 | + //发送邮件通知跟单员和业务员。 | ||
864 | + //发送邮箱通知财务。 这里这个邮箱通知财务,只能提示invoice号,因为一个invoice申请对应多个invoice号,所以会有多个内部编号和项目号等。 | ||
865 | + InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO(); | ||
866 | + invoiceAndCheckBillSendEmailVO.setDeductionUrlFieldVO(deductionUrlFieldVO); | ||
867 | + invoiceAndCheckBillSendEmailVO.setRefuseRemark(refuseRemark); | ||
868 | + emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_FAIL,invoiceAndCheckBillSendEmailVO,false); | ||
645 | } | 869 | } |
646 | 870 | ||
647 | OrderAuditLogDO auditLogDO = OrderAuditLogDO.builder().applyId(applyDO.getId()).orderId(applyDO.getOrderId()).optType(ApplyStatusEnum.AUDIT_REFUSE.getDesc()).build(); | 871 | OrderAuditLogDO auditLogDO = OrderAuditLogDO.builder().applyId(applyDO.getId()).orderId(applyDO.getOrderId()).optType(ApplyStatusEnum.AUDIT_REFUSE.getDesc()).build(); |
@@ -771,6 +995,15 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | @@ -771,6 +995,15 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | ||
771 | OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class); | 995 | OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class); |
772 | InvoiceFieldVO invoiceBillOrderDO = lockFieldVO.getInvoiceFieldVO(); | 996 | InvoiceFieldVO invoiceBillOrderDO = lockFieldVO.getInvoiceFieldVO(); |
773 | List<Long> invoiceId = invoiceBillOrderDO.getInvoiceId(); | 997 | List<Long> invoiceId = invoiceBillOrderDO.getInvoiceId(); |
998 | + //查询是否存在未审核的扣款单。 | ||
999 | + List<OrderFieldLockApplyDO> InvoiceDeductUrlList = list(new LambdaQueryWrapper<OrderFieldLockApplyDO>() | ||
1000 | + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | ||
1001 | + .in(OrderFieldLockApplyDO::getOrderId, invoiceId) | ||
1002 | + .eq(OrderFieldLockApplyDO::getType, ApplyTypeEnum.INVOICE_DEDUCT_URL.getType()) | ||
1003 | + .eq(OrderFieldLockApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT)); | ||
1004 | + if(CollectionUtils.isNotEmpty(InvoiceDeductUrlList)){ | ||
1005 | + throw new BusinessException("该Invoice存在未审批的扣款单,请先审批该对账单的扣款单!"); | ||
1006 | + } | ||
774 | List<InvoiceBillOrderDO> invoiceBillOrderDOS = invoiceBillOrderService.listByIds(invoiceId); | 1007 | List<InvoiceBillOrderDO> invoiceBillOrderDOS = invoiceBillOrderService.listByIds(invoiceId); |
775 | if(CollectionUtils.isNotEmpty(invoiceBillOrderDOS)){ | 1008 | if(CollectionUtils.isNotEmpty(invoiceBillOrderDOS)){ |
776 | List<InvoiceBillOrderDO> invoiceeBillOrderDOs = invoiceBillOrderDOS.stream().filter(Objects::nonNull).map(x -> { | 1009 | List<InvoiceBillOrderDO> invoiceeBillOrderDOs = invoiceBillOrderDOS.stream().filter(Objects::nonNull).map(x -> { |
@@ -811,6 +1044,15 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | @@ -811,6 +1044,15 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | ||
811 | if(CollectionUtils.isNotEmpty(producePayCheckBillInvoiceUrlList)){ | 1044 | if(CollectionUtils.isNotEmpty(producePayCheckBillInvoiceUrlList)){ |
812 | throw new BusinessException("该生产科对账单存在未审批的发票,请先审批该对账单的发票!"); | 1045 | throw new BusinessException("该生产科对账单存在未审批的发票,请先审批该对账单的发票!"); |
813 | } | 1046 | } |
1047 | + //查询是否存在未审核的扣款单。 | ||
1048 | + List<OrderFieldLockApplyDO> checkDeductUrlList = list(new LambdaQueryWrapper<OrderFieldLockApplyDO>() | ||
1049 | + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | ||
1050 | + .in(OrderFieldLockApplyDO::getOrderId, producePaymentCheckBillId) | ||
1051 | + .eq(OrderFieldLockApplyDO::getType, ApplyTypeEnum.CHECK_DEDUCT_URL.getType()) | ||
1052 | + .eq(OrderFieldLockApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT)); | ||
1053 | + if(CollectionUtils.isNotEmpty(checkDeductUrlList)){ | ||
1054 | + throw new BusinessException("该生产科对账单存在未审批的扣款单,请先审批该对账单的扣款单!"); | ||
1055 | + } | ||
814 | List<ProducePaymentCheckBillOrderDO> checkBillOrderDOS = checkBillOrderService.listByIds(producePaymentCheckBillId); | 1056 | List<ProducePaymentCheckBillOrderDO> checkBillOrderDOS = checkBillOrderService.listByIds(producePaymentCheckBillId); |
815 | if(CollectionUtils.isNotEmpty(checkBillOrderDOS)){ | 1057 | if(CollectionUtils.isNotEmpty(checkBillOrderDOS)){ |
816 | List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOS = checkBillOrderDOS.stream().filter(Objects::nonNull).map(x -> { | 1058 | List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOS = checkBillOrderDOS.stream().filter(Objects::nonNull).map(x -> { |
@@ -866,6 +1108,64 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | @@ -866,6 +1108,64 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp | ||
866 | InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO(); | 1108 | InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO(); |
867 | invoiceAndCheckBillSendEmailVO.setCheckBillOrderDO(invoiceInfoDO); | 1109 | invoiceAndCheckBillSendEmailVO.setCheckBillOrderDO(invoiceInfoDO); |
868 | emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_INVOICEURL_PASS,invoiceAndCheckBillSendEmailVO,true); | 1110 | emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_INVOICEURL_PASS,invoiceAndCheckBillSendEmailVO,true); |
1111 | + }else if(ApplyTypeEnum.INVOICE_DEDUCT_URL.getType().equals(applyDO.getType())){ | ||
1112 | + applyDO.setAuditUserId(auditUserId); | ||
1113 | + applyDO.setStatus(ApplyStatusEnum.AUDIT_PASS.getStatus()); | ||
1114 | + OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class); | ||
1115 | + DeductionUrlFieldVO deductionUrlFieldVO = lockFieldVO.getDeductionUrlFieldVO(); | ||
1116 | + //查询旧的。 | ||
1117 | + InvoiceBillOrderDO invoiceBillOrderDO = invoiceBillOrderService.getById(deductionUrlFieldVO.getId()); | ||
1118 | + invoiceBillOrderDO.setInvoiceDeductUrlStatus(ApplyStatusEnum.AUDIT_PASS.getStatus()); | ||
1119 | + //传递给审核一直都是最新的发票。 | ||
1120 | + if(com.order.erp.common.utils.StringUtils.isNotBlank(invoiceBillOrderDO.getDeductUrl())){ | ||
1121 | + if(com.order.erp.common.utils.StringUtils.isNotBlank(deductionUrlFieldVO.getDeductUrl())){ | ||
1122 | + Set<String> deductUrlSet = new HashSet<>(Arrays.asList( | ||
1123 | + org.apache.commons.lang3.StringUtils.defaultString(invoiceBillOrderDO.getDeductUrl()).split(","))); | ||
1124 | + if(!deductUrlSet.contains(deductionUrlFieldVO.getDeductUrl())){ | ||
1125 | + deductUrlSet.add(deductionUrlFieldVO.getDeductUrl()); | ||
1126 | + String updateDeductUrl=String.join(",",deductUrlSet); | ||
1127 | + invoiceBillOrderDO.setDeductUrl(updateDeductUrl); | ||
1128 | + } | ||
1129 | + } | ||
1130 | + }else{ | ||
1131 | + if(com.order.erp.common.utils.StringUtils.isNotBlank(deductionUrlFieldVO.getDeductUrl())){ | ||
1132 | + invoiceBillOrderDO.setDeductUrl(deductionUrlFieldVO.getDeductUrl()); | ||
1133 | + } | ||
1134 | + } | ||
1135 | + invoiceBillOrderService.updateById(invoiceBillOrderDO); | ||
1136 | + //发送邮件通知跟单员和业务员以及财务。 | ||
1137 | + InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO(); | ||
1138 | + invoiceAndCheckBillSendEmailVO.setDeductionUrlFieldVO(deductionUrlFieldVO); | ||
1139 | + emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.INVOICE_DEDUCTURL_PASS,invoiceAndCheckBillSendEmailVO,true); | ||
1140 | + }else if(ApplyTypeEnum.CHECK_DEDUCT_URL.getType().equals(applyDO.getType())){ | ||
1141 | + applyDO.setAuditUserId(auditUserId); | ||
1142 | + applyDO.setStatus(ApplyStatusEnum.AUDIT_PASS.getStatus()); | ||
1143 | + OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class); | ||
1144 | + DeductionUrlFieldVO deductionUrlFieldVO = lockFieldVO.getDeductionUrlFieldVO(); | ||
1145 | + //查询旧的。 | ||
1146 | + ProducePaymentCheckBillOrderDO checkBillOrderDO= checkBillOrderService.getById(deductionUrlFieldVO.getId()); | ||
1147 | + checkBillOrderDO.setCheckDeductUrlStatus(ApplyStatusEnum.AUDIT_PASS.getStatus()); | ||
1148 | + //传递给审核一直都是最新的发票。 | ||
1149 | + if(com.order.erp.common.utils.StringUtils.isNotBlank(checkBillOrderDO.getDeductUrl())){ | ||
1150 | + if(com.order.erp.common.utils.StringUtils.isNotBlank(deductionUrlFieldVO.getDeductUrl())){ | ||
1151 | + Set<String> deductUrlSet = new HashSet<>(Arrays.asList( | ||
1152 | + org.apache.commons.lang3.StringUtils.defaultString(checkBillOrderDO.getDeductUrl()).split(","))); | ||
1153 | + if(!deductUrlSet.contains(deductionUrlFieldVO.getDeductUrl())){ | ||
1154 | + deductUrlSet.add(deductionUrlFieldVO.getDeductUrl()); | ||
1155 | + String updateDeductUrl=String.join(",",deductUrlSet); | ||
1156 | + checkBillOrderDO.setDeductUrl(updateDeductUrl); | ||
1157 | + } | ||
1158 | + } | ||
1159 | + }else{ | ||
1160 | + if(com.order.erp.common.utils.StringUtils.isNotBlank(deductionUrlFieldVO.getDeductUrl())){ | ||
1161 | + checkBillOrderDO.setDeductUrl(deductionUrlFieldVO.getDeductUrl()); | ||
1162 | + } | ||
1163 | + } | ||
1164 | + checkBillOrderService.updateById(checkBillOrderDO); | ||
1165 | + //发送邮件通知跟单员和业务员以及财务。 | ||
1166 | + InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO(); | ||
1167 | + invoiceAndCheckBillSendEmailVO.setDeductionUrlFieldVO(deductionUrlFieldVO); | ||
1168 | + emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_DEDUCTURL_PASS,invoiceAndCheckBillSendEmailVO,true); | ||
869 | } | 1169 | } |
870 | 1170 | ||
871 | OrderAuditLogDO auditLogDO = OrderAuditLogDO.builder().applyId(applyDO.getId()).orderId(applyDO.getOrderId()).optType(ApplyStatusEnum.AUDIT_PASS.getDesc()).build(); | 1171 | OrderAuditLogDO auditLogDO = OrderAuditLogDO.builder().applyId(applyDO.getId()).orderId(applyDO.getOrderId()).optType(ApplyStatusEnum.AUDIT_PASS.getDesc()).build(); |
src/main/java/com/order/erp/service/order/impl/ProducePaymentCheckBillOrderServiceImpl.java
@@ -14,10 +14,7 @@ import com.order.erp.common.constant.Constant; | @@ -14,10 +14,7 @@ import com.order.erp.common.constant.Constant; | ||
14 | import com.order.erp.common.constant.ServerResult; | 14 | import com.order.erp.common.constant.ServerResult; |
15 | import com.order.erp.common.constant.ServerResultCode; | 15 | import com.order.erp.common.constant.ServerResultCode; |
16 | import com.order.erp.common.exception.BusinessException; | 16 | import com.order.erp.common.exception.BusinessException; |
17 | -import com.order.erp.common.utils.DateUtils; | ||
18 | -import com.order.erp.common.utils.EmailSendUtils; | ||
19 | -import com.order.erp.common.utils.StringUtils; | ||
20 | -import com.order.erp.common.utils.TransactionHelper; | 17 | +import com.order.erp.common.utils.*; |
21 | import com.order.erp.config.DataScope; | 18 | import com.order.erp.config.DataScope; |
22 | import com.order.erp.domain.*; | 19 | import com.order.erp.domain.*; |
23 | import com.order.erp.domain.dto.BaseDO; | 20 | import com.order.erp.domain.dto.BaseDO; |
@@ -33,6 +30,7 @@ import org.apache.poi.ss.usermodel.*; | @@ -33,6 +30,7 @@ import org.apache.poi.ss.usermodel.*; | ||
33 | import org.apache.poi.ss.util.CellRangeAddress; | 30 | import org.apache.poi.ss.util.CellRangeAddress; |
34 | import org.apache.poi.util.IOUtils; | 31 | import org.apache.poi.util.IOUtils; |
35 | import org.apache.poi.xssf.usermodel.XSSFWorkbook; | 32 | import org.apache.poi.xssf.usermodel.XSSFWorkbook; |
33 | +import org.joda.time.DateTime; | ||
36 | import org.springframework.beans.BeanUtils; | 34 | import org.springframework.beans.BeanUtils; |
37 | import org.springframework.stereotype.Service; | 35 | import org.springframework.stereotype.Service; |
38 | 36 | ||
@@ -51,7 +49,7 @@ import java.util.stream.Collectors; | @@ -51,7 +49,7 @@ import java.util.stream.Collectors; | ||
51 | import java.util.stream.Stream; | 49 | import java.util.stream.Stream; |
52 | 50 | ||
53 | /** | 51 | /** |
54 | - * 生产科对账单应收账单(ProducePaymentCheckBillOrder)表服务实现类 | 52 | + * 生产科对账单应付账单(ProducePaymentCheckBillOrder)表服务实现类 |
55 | * | 53 | * |
56 | * @author makejava | 54 | * @author makejava |
57 | * @since 2024-08-05 16:26:35 | 55 | * @since 2024-08-05 16:26:35 |
@@ -818,7 +816,6 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | @@ -818,7 +816,6 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | ||
818 | .orderId(x.getId()) | 816 | .orderId(x.getId()) |
819 | .payedDate(createVO.getPayedDate()) | 817 | .payedDate(createVO.getPayedDate()) |
820 | .status(FinanceEnum.UNPAID_PAYMENTS.getStatus()) | 818 | .status(FinanceEnum.UNPAID_PAYMENTS.getStatus()) |
821 | - .finishStatus(FinanceEnum.UNPAID_PAYMENTS.getStatus()) | ||
822 | .productionName(x.getProductionDepartment()) | 819 | .productionName(x.getProductionDepartment()) |
823 | .businesPerson(x.getBusinessPerson()) | 820 | .businesPerson(x.getBusinessPerson()) |
824 | .trackerUser(x.getCreateBy()) | 821 | .trackerUser(x.getCreateBy()) |
@@ -898,6 +895,7 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | @@ -898,6 +895,7 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | ||
898 | */ | 895 | */ |
899 | @Override | 896 | @Override |
900 | public ServerResult updateDeductInfo(ProducePaymentCheckBillDeductInfoVO deductInfoVO) { | 897 | public ServerResult updateDeductInfo(ProducePaymentCheckBillDeductInfoVO deductInfoVO) { |
898 | + Long loginUserId = dataScope.getLoginUserId(); | ||
901 | if (Objects.isNull(deductInfoVO.getId())) { | 899 | if (Objects.isNull(deductInfoVO.getId())) { |
902 | throw new BusinessException("id 不能为空"); | 900 | throw new BusinessException("id 不能为空"); |
903 | } | 901 | } |
@@ -905,13 +903,57 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | @@ -905,13 +903,57 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | ||
905 | if (Objects.isNull(checkBillOrderDO)) { | 903 | if (Objects.isNull(checkBillOrderDO)) { |
906 | throw new BusinessException("应付款单据不存在"); | 904 | throw new BusinessException("应付款单据不存在"); |
907 | } | 905 | } |
908 | - if(Objects.nonNull(checkBillOrderDO.getStatus()) && FinanceEnum.RECEIVED_PAYMENT.getStatus()==checkBillOrderDO.getStatus()){ | 906 | + if(Objects.nonNull(checkBillOrderDO.getStatus()) && ((FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(checkBillOrderDO.getStatus())) || |
907 | + (FinanceEnum.OK_PAYMENT.getStatus().equals(checkBillOrderDO.getStatus())))){ | ||
909 | throw new BusinessException("应付款单据已审核通过,无法编辑"); | 908 | throw new BusinessException("应付款单据已审核通过,无法编辑"); |
910 | } | 909 | } |
911 | //todo 已完成。 | 910 | //todo 已完成。 |
912 | // checkCommitApply(deductInfoVO.getId()); | 911 | // checkCommitApply(deductInfoVO.getId()); |
913 | checkApply(new ArrayList<>(Arrays.asList(deductInfoVO.getId()))); | 912 | checkApply(new ArrayList<>(Arrays.asList(deductInfoVO.getId()))); |
914 | - //需要判断一下是否为空?不然知己以逗号分隔会报错。 | 913 | + //对扣款单进行审批。 |
914 | + checkCommitDeductionUrlApply(checkBillOrderDO.getId()); | ||
915 | + OrderLockFieldVO orderLockFieldVO = new OrderLockFieldVO(); | ||
916 | + DeductionUrlFieldVO deductionUrlFieldVO = new DeductionUrlFieldVO(); | ||
917 | + checkBillOrderDO.setDeductAmount((deductInfoVO.getDeductAmount()==null? BigDecimal.ZERO:deductInfoVO.getDeductAmount()).setScale(2, BigDecimal.ROUND_HALF_UP)); | ||
918 | + checkBillOrderDO.setActualPayedAmount((checkBillOrderDO.getTotalProductionAmount().subtract(deductInfoVO.getDeductAmount()==null? BigDecimal.ZERO:deductInfoVO.getDeductAmount())).setScale(2, BigDecimal.ROUND_HALF_UP)); | ||
919 | + checkBillOrderDO.setUnPayedAmount((checkBillOrderDO.getTotalProductionAmount().subtract(checkBillOrderDO.getDeductAmount()).subtract(checkBillOrderDO.getTotalActualPayedAmount())).setScale(2, BigDecimal.ROUND_HALF_UP)); | ||
920 | + if(StringUtils.isNotBlank(deductInfoVO.getDeductUrl())){ | ||
921 | + checkBillOrderDO.setCheckDeductUrlStatus(ApplyStatusEnum.WAIT_AUDIT.getStatus()); | ||
922 | + } | ||
923 | + updateById(checkBillOrderDO); | ||
924 | + if(StringUtils.isNotBlank(deductInfoVO.getDeductUrl())){ | ||
925 | + OrderBaseInfoDO orderBaseInfoDO = orderBaseInfoService.getById(checkBillOrderDO.getOrderId()); | ||
926 | + //以后对于文件类型,只存文件名,通过bucket每次实时访问。以前是设置过期时间很长,永久存在数据库中。 | ||
927 | + String urlFileName = SplitUrlGetBucketName.getUrlFileName(deductInfoVO.getDeductUrl()); | ||
928 | + //不保存,仅仅只是做一个审核,千万不要保存。目的是传递给审核最新的扣款单,审核通过后才保存,不通过则不保存。 | ||
929 | + checkBillOrderDO.setDeductUrl(urlFileName); | ||
930 | + deductionUrlFieldVO.setCheckNo(checkBillOrderDO.getCheckNo()); | ||
931 | + if(Objects.nonNull(orderBaseInfoDO)){ | ||
932 | + deductionUrlFieldVO.setInnerNo(orderBaseInfoDO.getInnerNo()); | ||
933 | + } | ||
934 | + deductionUrlFieldVO.setId(checkBillOrderDO.getId()); | ||
935 | + deductionUrlFieldVO.setBusinesPerson(checkBillOrderDO.getBusinesPerson()); | ||
936 | + deductionUrlFieldVO.setTrackerUser(checkBillOrderDO.getTrackerUser()); | ||
937 | + deductionUrlFieldVO.setFinancePerson(checkBillOrderDO.getFinancePerson()); | ||
938 | + deductionUrlFieldVO.setDeductUrl(urlFileName); | ||
939 | + deductionUrlFieldVO.setProductionName(orderBaseInfoDO.getProductionDepartment()); | ||
940 | + orderLockFieldVO.setDeductionUrlFieldVO(deductionUrlFieldVO); | ||
941 | + deductionUrlFieldVO.setDeductAmount(deductInfoVO.getDeductAmount()); | ||
942 | + OrderFieldLockApplyDO applyDO = OrderFieldLockApplyDO.builder() | ||
943 | + .applyUserId(loginUserId) | ||
944 | + .auditUserId(null) | ||
945 | + .fields(JSONObject.toJSONString(orderLockFieldVO)) | ||
946 | + .orderId(checkBillOrderDO.getId()) | ||
947 | + .type(ApplyTypeEnum.CHECK_DEDUCT_URL.getType()) | ||
948 | + .remark(ApplyTypeEnum.CHECK_DEDUCT_URL.getDesc()) | ||
949 | + .status(ApplyStatusEnum.WAIT_AUDIT.getStatus()) | ||
950 | + .auditRoleCodes(RoleEnum.ADMIN.getCode() + Constant.COMMA_CHARACTER + RoleEnum.FINANCE_USER.getCode()) | ||
951 | + .build(); | ||
952 | + orderFieldLockApplyService.save(applyDO); | ||
953 | + } | ||
954 | + return ServerResult.success(); | ||
955 | + | ||
956 | + /*//需要判断一下是否为空?不然知己以逗号分隔会报错。 | ||
915 | if(StringUtils.isNotBlank(checkBillOrderDO.getDeductUrl())){ | 957 | if(StringUtils.isNotBlank(checkBillOrderDO.getDeductUrl())){ |
916 | //记住:需要修改数据表对应的字段deduct_url的varchar数据范围,修改为1000左右。 | 958 | //记住:需要修改数据表对应的字段deduct_url的varchar数据范围,修改为1000左右。 |
917 | if(StringUtils.isNotBlank(deductInfoVO.getDeductUrl())){ | 959 | if(StringUtils.isNotBlank(deductInfoVO.getDeductUrl())){ |
@@ -934,7 +976,7 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | @@ -934,7 +976,7 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | ||
934 | checkBillOrderDO.setActualPayedAmount((checkBillOrderDO.getTotalProductionAmount().subtract(deductInfoVO.getDeductAmount()==null? BigDecimal.ZERO:deductInfoVO.getDeductAmount())).setScale(2, BigDecimal.ROUND_HALF_UP)); | 976 | checkBillOrderDO.setActualPayedAmount((checkBillOrderDO.getTotalProductionAmount().subtract(deductInfoVO.getDeductAmount()==null? BigDecimal.ZERO:deductInfoVO.getDeductAmount())).setScale(2, BigDecimal.ROUND_HALF_UP)); |
935 | checkBillOrderDO.setUnPayedAmount((checkBillOrderDO.getTotalProductionAmount().subtract(checkBillOrderDO.getDeductAmount()).subtract(checkBillOrderDO.getTotalActualPayedAmount())).setScale(2, BigDecimal.ROUND_HALF_UP)); | 977 | checkBillOrderDO.setUnPayedAmount((checkBillOrderDO.getTotalProductionAmount().subtract(checkBillOrderDO.getDeductAmount()).subtract(checkBillOrderDO.getTotalActualPayedAmount())).setScale(2, BigDecimal.ROUND_HALF_UP)); |
936 | updateById(checkBillOrderDO); | 978 | updateById(checkBillOrderDO); |
937 | - return ServerResult.success(); | 979 | + return ServerResult.success();*/ |
938 | } | 980 | } |
939 | 981 | ||
940 | /** | 982 | /** |
@@ -952,8 +994,9 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | @@ -952,8 +994,9 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | ||
952 | if (Objects.isNull(checkBillOrderDO)) { | 994 | if (Objects.isNull(checkBillOrderDO)) { |
953 | throw new BusinessException("应付款单据不存在"); | 995 | throw new BusinessException("应付款单据不存在"); |
954 | } | 996 | } |
955 | - if(Objects.nonNull(checkBillOrderDO.getStatus()) && FinanceEnum.RECEIVED_PAYMENT.getStatus()==checkBillOrderDO.getStatus()){ | ||
956 | - throw new BusinessException("已完成付款,无法更新!"); | 997 | + if(Objects.nonNull(checkBillOrderDO.getStatus()) && ((FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(checkBillOrderDO.getStatus())) || |
998 | + (FinanceEnum.OK_PAYMENT.getStatus().equals(checkBillOrderDO.getStatus())))){ | ||
999 | + throw new BusinessException("应付款单据已审核通过,无法编辑"); | ||
957 | } | 1000 | } |
958 | //todo 已完成。 | 1001 | //todo 已完成。 |
959 | // checkCommitApply(amountInfoVO.getId()); | 1002 | // checkCommitApply(amountInfoVO.getId()); |
@@ -980,8 +1023,9 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | @@ -980,8 +1023,9 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | ||
980 | if(Objects.isNull(checkBillOrderDO)){ | 1023 | if(Objects.isNull(checkBillOrderDO)){ |
981 | return ServerResult.fail("生产科对账单号不存在!"); | 1024 | return ServerResult.fail("生产科对账单号不存在!"); |
982 | } | 1025 | } |
983 | - if(FinanceEnum.RECEIVED_PAYMENT.getStatus()==checkBillOrderDO.getStatus()){ | ||
984 | - throw new BusinessException("该订单已通过审核无法继续上传发票!"); | 1026 | + if(Objects.nonNull(checkBillOrderDO.getStatus()) && ((FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(checkBillOrderDO.getStatus())) || |
1027 | + (FinanceEnum.OK_PAYMENT.getStatus().equals(checkBillOrderDO.getStatus())))){ | ||
1028 | + throw new BusinessException("应付款单据已审核通过,无法编辑"); | ||
985 | } | 1029 | } |
986 | if(StringUtils.isBlank(invoiceInfoVO.getInvoiceUrl())){ | 1030 | if(StringUtils.isBlank(invoiceInfoVO.getInvoiceUrl())){ |
987 | return ServerResult.success(); | 1031 | return ServerResult.success(); |
@@ -998,7 +1042,7 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | @@ -998,7 +1042,7 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | ||
998 | checkBillOrderDO.setDepartmentInvoiceStatus(ApplyStatusEnum.WAIT_AUDIT.getStatus()); | 1042 | checkBillOrderDO.setDepartmentInvoiceStatus(ApplyStatusEnum.WAIT_AUDIT.getStatus()); |
999 | updateById(checkBillOrderDO); | 1043 | updateById(checkBillOrderDO); |
1000 | //不保存,仅仅只是做一个审核,千万不要保存。目的是传递给审核的是最新的发票,审核通过才保存,不通过则不保存。 | 1044 | //不保存,仅仅只是做一个审核,千万不要保存。目的是传递给审核的是最新的发票,审核通过才保存,不通过则不保存。 |
1001 | - checkBillOrderDO.setInvoiceUrl(invoiceInfoVO.getInvoiceUrl()); | 1045 | + checkBillOrderDO.setInvoiceUrl(SplitUrlGetBucketName.getUrlFileName(invoiceInfoVO.getInvoiceUrl())); |
1002 | //复制到producePaymentCheckBillVO。 | 1046 | //复制到producePaymentCheckBillVO。 |
1003 | BeanUtils.copyProperties(checkBillOrderDO,producePaymentCheckBillVO); | 1047 | BeanUtils.copyProperties(checkBillOrderDO,producePaymentCheckBillVO); |
1004 | producePaymentCheckBillVO.setInnerNo(orderBaseInfoDO.getInnerNo()); | 1048 | producePaymentCheckBillVO.setInnerNo(orderBaseInfoDO.getInnerNo()); |
@@ -1036,7 +1080,8 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | @@ -1036,7 +1080,8 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | ||
1036 | if(!isTure){ | 1080 | if(!isTure){ |
1037 | throw new BusinessException("勾选订单生产科需一致"); | 1081 | throw new BusinessException("勾选订单生产科需一致"); |
1038 | } | 1082 | } |
1039 | - boolean anyMatch = producePaymentCheckBillOrderDOList.stream().filter(Objects::nonNull).anyMatch(producePaymentCheckBillOrderDO -> FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(producePaymentCheckBillOrderDO.getStatus())); | 1083 | + boolean anyMatch = producePaymentCheckBillOrderDOList.stream().filter(Objects::nonNull).anyMatch(producePaymentCheckBillOrderDO -> ((FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(producePaymentCheckBillOrderDO.getStatus()))) |
1084 | + || (FinanceEnum.OK_PAYMENT.getStatus().equals(producePaymentCheckBillOrderDO.getStatus()))); | ||
1040 | if(anyMatch){ | 1085 | if(anyMatch){ |
1041 | throw new BusinessException("订单中包含已付款的数据,无法提交!"); | 1086 | throw new BusinessException("订单中包含已付款的数据,无法提交!"); |
1042 | } | 1087 | } |
@@ -1110,6 +1155,20 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | @@ -1110,6 +1155,20 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | ||
1110 | } | 1155 | } |
1111 | 1156 | ||
1112 | /** | 1157 | /** |
1158 | + * @param id | ||
1159 | + * | ||
1160 | + */ | ||
1161 | + private void checkCommitDeductionUrlApply(Long id){ | ||
1162 | + List<OrderFieldLockApplyDO> orderFieldLockApplyDOList = orderFieldLockApplyService.list(new LambdaQueryWrapper<OrderFieldLockApplyDO>() | ||
1163 | + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | ||
1164 | + .eq(OrderFieldLockApplyDO::getType, ApplyTypeEnum.CHECK_DEDUCT_URL.getType()) | ||
1165 | + .eq(OrderFieldLockApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT.getStatus()) | ||
1166 | + .eq(OrderFieldLockApplyDO::getOrderId, id)); | ||
1167 | + if(CollectionUtils.isNotEmpty(orderFieldLockApplyDOList)){ | ||
1168 | + throw new BusinessException("存在未审核的扣款单,请联系财务审批上一张扣款单再上传"); | ||
1169 | + } | ||
1170 | + } | ||
1171 | + /** | ||
1113 | * @param producePaymentCheckBillFieldVO | 1172 | * @param producePaymentCheckBillFieldVO |
1114 | * @param userId | 1173 | * @param userId |
1115 | * @return | 1174 | * @return |
@@ -1231,7 +1290,8 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | @@ -1231,7 +1290,8 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | ||
1231 | if(!isTrue){ | 1290 | if(!isTrue){ |
1232 | throw new BusinessException("勾选订单的checkNo需一致"); | 1291 | throw new BusinessException("勾选订单的checkNo需一致"); |
1233 | } | 1292 | } |
1234 | - boolean anyPaid = checkBillOrderDOS.stream().anyMatch(checkBillOrderDO -> FinanceEnum.RECEIVED_PAYMENT.getStatus() == checkBillOrderDO.getStatus()); | 1293 | + boolean anyPaid = checkBillOrderDOS.stream().anyMatch(checkBillOrderDO ->((FinanceEnum. RECEIVED_PAYMENT.getStatus().equals(checkBillOrderDO.getStatus()))) |
1294 | + || (FinanceEnum.OK_PAYMENT.getStatus().equals(checkBillOrderDO.getStatus()))); | ||
1235 | if(anyPaid) { | 1295 | if(anyPaid) { |
1236 | throw new BusinessException("包含已付款的订单,无法删除!"); | 1296 | throw new BusinessException("包含已付款的订单,无法删除!"); |
1237 | } | 1297 | } |
@@ -1273,10 +1333,11 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | @@ -1273,10 +1333,11 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | ||
1273 | //获取每一个url的文件名称 | 1333 | //获取每一个url的文件名称 |
1274 | Arrays.stream(checkBillOrderDO.getDeductUrl().split(",")).forEach(x->{ | 1334 | Arrays.stream(checkBillOrderDO.getDeductUrl().split(",")).forEach(x->{ |
1275 | try{ | 1335 | try{ |
1276 | - String preUrl = x.contains("?") ? x.split("\\?")[0] : x; | ||
1277 | - String fileName = preUrl.substring(preUrl.lastIndexOf("/") + 1); | 1336 | +// String preUrl = x.contains("?") ? x.split("\\?")[0] : x; |
1337 | + String fileName = x.substring(x.lastIndexOf("/") + 1); | ||
1278 | String decodeUrl = URLDecoder.decode(fileName, StandardCharsets.UTF_8.name()); | 1338 | String decodeUrl = URLDecoder.decode(fileName, StandardCharsets.UTF_8.name()); |
1279 | - hashMap.put(decodeUrl,x); | 1339 | + String url = AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(x), decodeUrl, new DateTime().plusMinutes(Constant.TWO).toDate()); |
1340 | + hashMap.put(decodeUrl,url); | ||
1280 | }catch(Exception e){ | 1341 | }catch(Exception e){ |
1281 | throw new BusinessException("文件名错误!"); | 1342 | throw new BusinessException("文件名错误!"); |
1282 | } | 1343 | } |
@@ -1304,10 +1365,11 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | @@ -1304,10 +1365,11 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | ||
1304 | //获取每一个url的文件名称 | 1365 | //获取每一个url的文件名称 |
1305 | Arrays.stream(checkBillOrderDO.getInvoiceUrl().split(",")).forEach(x->{ | 1366 | Arrays.stream(checkBillOrderDO.getInvoiceUrl().split(",")).forEach(x->{ |
1306 | try{ | 1367 | try{ |
1307 | - String preUrl = x.contains("?") ? x.split("\\?")[0] : x; | ||
1308 | - String fileName = preUrl.substring(preUrl.lastIndexOf("/") + 1); | 1368 | +// String preUrl = x.contains("?") ? x.split("\\?")[0] : x; |
1369 | + String fileName = x.substring(x.lastIndexOf("/") + 1); | ||
1309 | String decodeUrl = URLDecoder.decode(fileName, StandardCharsets.UTF_8.name()); | 1370 | String decodeUrl = URLDecoder.decode(fileName, StandardCharsets.UTF_8.name()); |
1310 | - hashMap.put(decodeUrl,x); | 1371 | + String url = AliOssUtil.createUrl(SplitUrlGetBucketName.getBucket(x), decodeUrl, new DateTime().plusMinutes(Constant.TWO).toDate()); |
1372 | + hashMap.put(decodeUrl,url); | ||
1311 | }catch(Exception e){ | 1373 | }catch(Exception e){ |
1312 | throw new BusinessException("文件名错误!"); | 1374 | throw new BusinessException("文件名错误!"); |
1313 | } | 1375 | } |
@@ -1328,8 +1390,9 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | @@ -1328,8 +1390,9 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | ||
1328 | if(Objects.isNull(checkBillOrderDO)){ | 1390 | if(Objects.isNull(checkBillOrderDO)){ |
1329 | throw new BusinessException("生产科对账单不存在!"); | 1391 | throw new BusinessException("生产科对账单不存在!"); |
1330 | } | 1392 | } |
1331 | - if(FinanceEnum.RECEIVED_PAYMENT.getStatus()==checkBillOrderDO.getStatus()){ | ||
1332 | - throw new BusinessException("已完成付款,无法修改!"); | 1393 | + if(Objects.nonNull(checkBillOrderDO.getStatus()) && ((FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(checkBillOrderDO.getStatus())) || |
1394 | + (FinanceEnum.OK_PAYMENT.getStatus().equals(checkBillOrderDO.getStatus())))){ | ||
1395 | + throw new BusinessException("生产科对账单据已审核通过,无法编辑"); | ||
1333 | } | 1396 | } |
1334 | //todo 要审核判断一下,判断是否处于审核状态。 已完成。 | 1397 | //todo 要审核判断一下,判断是否处于审核状态。 已完成。 |
1335 | checkApply(new ArrayList<>(Arrays.asList(createVO.getId()))); | 1398 | checkApply(new ArrayList<>(Arrays.asList(createVO.getId()))); |
@@ -1363,8 +1426,9 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | @@ -1363,8 +1426,9 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | ||
1363 | throw new BusinessException("生产科对账单不存在!"); | 1426 | throw new BusinessException("生产科对账单不存在!"); |
1364 | } | 1427 | } |
1365 | checkApply(new ArrayList<>(Arrays.asList(deleteVo.getId()))); | 1428 | checkApply(new ArrayList<>(Arrays.asList(deleteVo.getId()))); |
1366 | - if(FinanceEnum.RECEIVED_PAYMENT.getStatus()==producePaymentCheckBillOrderDO.getStatus()){ | ||
1367 | - throw new BusinessException("已完成付款,无法修改!"); | 1429 | + if(Objects.nonNull(producePaymentCheckBillOrderDO.getStatus()) && ((FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(producePaymentCheckBillOrderDO.getStatus())) || |
1430 | + (FinanceEnum.OK_PAYMENT.getStatus().equals(producePaymentCheckBillOrderDO.getStatus())))){ | ||
1431 | + throw new BusinessException("生产科对账单已审核通过,无法编辑"); | ||
1368 | } | 1432 | } |
1369 | producePaymentCheckBillOrderDO.setDeductUrl(""); | 1433 | producePaymentCheckBillOrderDO.setDeductUrl(""); |
1370 | updateById(producePaymentCheckBillOrderDO); | 1434 | updateById(producePaymentCheckBillOrderDO); |
@@ -1373,20 +1437,32 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | @@ -1373,20 +1437,32 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce | ||
1373 | 1437 | ||
1374 | @Override | 1438 | @Override |
1375 | public ServerResult isFinishStatus(ProducePaymentCheckBillInvoiceInfoVO producePaymentCheckBillInvoiceInfoVO) { | 1439 | public ServerResult isFinishStatus(ProducePaymentCheckBillInvoiceInfoVO producePaymentCheckBillInvoiceInfoVO) { |
1440 | + if(Objects.isNull(producePaymentCheckBillInvoiceInfoVO.getId())){ | ||
1441 | + throw new BusinessException(ServerResultCode.PARAM_ERROR); | ||
1442 | + } | ||
1376 | ProducePaymentCheckBillOrderDO producePaymentCheckBillOrderDO = getById(producePaymentCheckBillInvoiceInfoVO.getId()); | 1443 | ProducePaymentCheckBillOrderDO producePaymentCheckBillOrderDO = getById(producePaymentCheckBillInvoiceInfoVO.getId()); |
1377 | if(Objects.nonNull(producePaymentCheckBillOrderDO)){ | 1444 | if(Objects.nonNull(producePaymentCheckBillOrderDO)){ |
1378 | - if(!FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(producePaymentCheckBillOrderDO.getStatus())){ | ||
1379 | - throw new BusinessException("该订单还没有完成最终付款,无法设置最终状态为已完成!"); | 1445 | + if((!FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(producePaymentCheckBillOrderDO.getStatus())) && (!FinanceEnum.OK_PAYMENT.getStatus().equals(producePaymentCheckBillOrderDO.getStatus()))){ |
1446 | + throw new BusinessException("该订单还没有审核通过,你无法设置最终状态为已付款!"); | ||
1380 | } | 1447 | } |
1381 | List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOList = list(new LambdaQueryWrapper<ProducePaymentCheckBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | 1448 | List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOList = list(new LambdaQueryWrapper<ProducePaymentCheckBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) |
1382 | .eq(ProducePaymentCheckBillOrderDO::getStatus, FinanceEnum.RECEIVED_PAYMENT.getStatus()) | 1449 | .eq(ProducePaymentCheckBillOrderDO::getStatus, FinanceEnum.RECEIVED_PAYMENT.getStatus()) |
1383 | .eq(ProducePaymentCheckBillOrderDO::getCheckNo, producePaymentCheckBillOrderDO.getCheckNo())); | 1450 | .eq(ProducePaymentCheckBillOrderDO::getCheckNo, producePaymentCheckBillOrderDO.getCheckNo())); |
1384 | if(CollectionUtils.isNotEmpty(producePaymentCheckBillOrderDOList)){ | 1451 | if(CollectionUtils.isNotEmpty(producePaymentCheckBillOrderDOList)){ |
1385 | List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOS = producePaymentCheckBillOrderDOList.stream().map(x -> { | 1452 | List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOS = producePaymentCheckBillOrderDOList.stream().map(x -> { |
1386 | - x.setFinishStatus(FinanceEnum.RECEIVED_PAYMENT.getStatus()); | 1453 | + x.setStatus(FinanceEnum.OK_PAYMENT.getStatus()); |
1387 | return x; | 1454 | return x; |
1388 | }).collect(Collectors.toList()); | 1455 | }).collect(Collectors.toList()); |
1389 | - updateBatchById(producePaymentCheckBillOrderDOS); | 1456 | + List<Long> orderIds = producePaymentCheckBillOrderDOList.stream().map(ProducePaymentCheckBillOrderDO::getOrderId).collect(Collectors.toList()); |
1457 | + List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(orderIds); | ||
1458 | + List<OrderBaseInfoDO> orderBaseInfoDOS = orderBaseInfoDOList.stream().map(order -> { | ||
1459 | + order.setCheckStatus(FinanceEnum.OK_PAYMENT.getStatus()); | ||
1460 | + return order; | ||
1461 | + }).collect(Collectors.toList()); | ||
1462 | + transactionHelper.run(() ->{ | ||
1463 | + updateBatchById(producePaymentCheckBillOrderDOS); | ||
1464 | + orderBaseInfoService.updateBatchById(orderBaseInfoDOS); | ||
1465 | + }); | ||
1390 | } | 1466 | } |
1391 | } | 1467 | } |
1392 | return ServerResult.success(); | 1468 | return ServerResult.success(); |
src/main/resources/application-pre-prod.yml
@@ -59,7 +59,7 @@ spring: | @@ -59,7 +59,7 @@ spring: | ||
59 | testOnReturn: true | 59 | testOnReturn: true |
60 | password: eJ8(bD6]wN6=gI5= | 60 | password: eJ8(bD6]wN6=gI5= |
61 | time-between-eviction-runs-millis: 1000 | 61 | time-between-eviction-runs-millis: 1000 |
62 | - url: jdbc:mysql://47.104.8.35:3307/order-erp-test-real?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&allowMultiQueries=true&useAffectedRows=true&autoReconnectForPools=true | 62 | + url: jdbc:mysql://47.104.8.35:3307/order-erp?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&allowMultiQueries=true&useAffectedRows=true&autoReconnectForPools=true |
63 | username: root | 63 | username: root |
64 | redis: | 64 | redis: |
65 | database: 10 | 65 | database: 10 |
@@ -71,7 +71,7 @@ spring: | @@ -71,7 +71,7 @@ spring: | ||
71 | max-wait: -1 | 71 | max-wait: -1 |
72 | min-idle: 3 | 72 | min-idle: 3 |
73 | time-between-eviction-runs: 100 | 73 | time-between-eviction-runs: 100 |
74 | - password: '' | 74 | + password: 445042a788dd |
75 | port: 6380 | 75 | port: 6380 |
76 | timeout: 2000 | 76 | timeout: 2000 |
77 | mail: | 77 | mail: |
@@ -176,8 +176,8 @@ file: | @@ -176,8 +176,8 @@ file: | ||
176 | # 阿里pss图片服务 | 176 | # 阿里pss图片服务 |
177 | oss: | 177 | oss: |
178 | endpoint: https://oss-cn-qingdao.aliyuncs.com | 178 | endpoint: https://oss-cn-qingdao.aliyuncs.com |
179 | - accessKeyId: LTAI5t7u1gXR2vm82sd6CkVz | ||
180 | - accessKeySecret: m4NzHZZsZiauKmRO8y7DihmcGNdQk4 | 179 | + accessKeyId: LTAI5tHKVvrz1xxExYD7E3mo |
180 | + accessKeySecret: q0m2RjNuzL4GGlUhK3P9qc2R0hZvIh | ||
181 | bucket: test-alterego | 181 | bucket: test-alterego |
182 | 182 | ||
183 | 183 |
src/main/resources/application-prod.yml
@@ -80,7 +80,8 @@ spring: | @@ -80,7 +80,8 @@ spring: | ||
80 | # 发送者邮箱,已开通POP3/SMTP服务的邮箱,也就是你自己的 | 80 | # 发送者邮箱,已开通POP3/SMTP服务的邮箱,也就是你自己的 |
81 | username: information@alterego.xin | 81 | username: information@alterego.xin |
82 | # 配置密码,注意不是真正的密码,而是刚刚申请到的授权码 | 82 | # 配置密码,注意不是真正的密码,而是刚刚申请到的授权码 |
83 | - password: AlterEgo1608ITf31 | 83 | +# password: AlterEgo1608ITf31 |
84 | + password: Y7AvfSJ1bcjYWXqF | ||
84 | # 邮件接收者 | 85 | # 邮件接收者 |
85 | mailRecipient: #邮件接收者邮箱 | 86 | mailRecipient: #邮件接收者邮箱 |
86 | # 端口号465或587(QQ邮箱发送邮件仅支持587端口协议) | 87 | # 端口号465或587(QQ邮箱发送邮件仅支持587端口协议) |
@@ -174,8 +175,8 @@ file: | @@ -174,8 +175,8 @@ file: | ||
174 | # 阿里pss图片服务 | 175 | # 阿里pss图片服务 |
175 | oss: | 176 | oss: |
176 | endpoint: https://oss-cn-qingdao.aliyuncs.com | 177 | endpoint: https://oss-cn-qingdao.aliyuncs.com |
177 | - accessKeyId: LTAI5t7u1gXR2vm82sd6CkVz | ||
178 | - accessKeySecret: m4NzHZZsZiauKmRO8y7DihmcGNdQk4 | 178 | + accessKeyId: LTAI5tHKVvrz1xxExYD7E3mo |
179 | + accessKeySecret: q0m2RjNuzL4GGlUhK3P9qc2R0hZvIh | ||
179 | bucket: alterego | 180 | bucket: alterego |
180 | 181 | ||
181 | 182 |
src/main/resources/application-test.yml
@@ -175,8 +175,8 @@ file: | @@ -175,8 +175,8 @@ file: | ||
175 | # 阿里pss图片服务 | 175 | # 阿里pss图片服务 |
176 | oss: | 176 | oss: |
177 | endpoint: https://oss-cn-qingdao.aliyuncs.com | 177 | endpoint: https://oss-cn-qingdao.aliyuncs.com |
178 | - accessKeyId: LTAI5t7u1gXR2vm82sd6CkVz | ||
179 | - accessKeySecret: m4NzHZZsZiauKmRO8y7DihmcGNdQk4 | 178 | + accessKeyId: LTAI5tHKVvrz1xxExYD7E3mo |
179 | + accessKeySecret: q0m2RjNuzL4GGlUhK3P9qc2R0hZvIh | ||
180 | bucket: test-alterego | 180 | bucket: test-alterego |
181 | 181 | ||
182 | 182 |
src/main/resources/mapper/InvoiceBillOrderMapper.xml
@@ -98,7 +98,7 @@ | @@ -98,7 +98,7 @@ | ||
98 | i.status AS invoiceStatus, -- invoice状态 | 98 | i.status AS invoiceStatus, -- invoice状态 |
99 | i.deduct_amount AS invoiceDeductAmount, -- 扣款金额 | 99 | i.deduct_amount AS invoiceDeductAmount, -- 扣款金额 |
100 | i.notes AS invoiceNotes, -- invoice备注 | 100 | i.notes AS invoiceNotes, -- invoice备注 |
101 | - i.finish_status AS invoiceFinishStatus, | 101 | + i.invoice_deduct_url_status AS invoiceDeductUrlStatus, |
102 | -- 生产科付款信息 | 102 | -- 生产科付款信息 |
103 | p.id AS checkId, | 103 | p.id AS checkId, |
104 | p.check_no AS checkNo, -- checkNo编号 | 104 | p.check_no AS checkNo, -- checkNo编号 |
@@ -115,7 +115,7 @@ | @@ -115,7 +115,7 @@ | ||
115 | p.deduct_url AS checkDeductUrl, -- 扣款单 | 115 | p.deduct_url AS checkDeductUrl, -- 扣款单 |
116 | p.notes AS checkNotes, -- checkNo备注 | 116 | p.notes AS checkNotes, -- checkNo备注 |
117 | p.invoice_url AS checkInvoiceUrl, -- 发票 | 117 | p.invoice_url AS checkInvoiceUrl, -- 发票 |
118 | - p.finish_status AS checkFinishStatus | 118 | + p.check_deduct_url_status AS checkDeductUrlStatus |
119 | FROM order_base_info o | 119 | FROM order_base_info o |
120 | LEFT JOIN invoice_bill_order AS i | 120 | LEFT JOIN invoice_bill_order AS i |
121 | ON o.id = i.order_id AND i.enable_flag = 10 | 121 | ON o.id = i.order_id AND i.enable_flag = 10 |
@@ -136,12 +136,6 @@ | @@ -136,12 +136,6 @@ | ||
136 | <if test="queryVO.checkNoStatus != null"> | 136 | <if test="queryVO.checkNoStatus != null"> |
137 | AND o.check_status = #{queryVO.checkNoStatus} | 137 | AND o.check_status = #{queryVO.checkNoStatus} |
138 | </if> | 138 | </if> |
139 | - <if test="queryVO.invoiceFinishStatus != null"> | ||
140 | - AND i.finish_status = #{queryVO.invoiceFinishStatus} | ||
141 | - </if> | ||
142 | - <if test="queryVO.checkFinishStatus != null"> | ||
143 | - AND p.finish_status = #{queryVO.checkFinishStatus} | ||
144 | - </if> | ||
145 | <if test="queryVO.customerCode != null and queryVO.customerCode.size > 0 "> | 139 | <if test="queryVO.customerCode != null and queryVO.customerCode.size > 0 "> |
146 | AND o.customer_code IN | 140 | AND o.customer_code IN |
147 | <foreach collection="queryVO.customerCode" item="customerCode" open="(" separator="," close=")"> | 141 | <foreach collection="queryVO.customerCode" item="customerCode" open="(" separator="," close=")"> |
@@ -235,12 +229,6 @@ | @@ -235,12 +229,6 @@ | ||
235 | <if test="queryVO.checkNoStatus != null"> | 229 | <if test="queryVO.checkNoStatus != null"> |
236 | AND o.check_status = #{queryVO.checkNoStatus} | 230 | AND o.check_status = #{queryVO.checkNoStatus} |
237 | </if> | 231 | </if> |
238 | - <if test="queryVO.invoiceFinishStatus != null"> | ||
239 | - AND i.finish_status = #{queryVO.invoiceFinishStatus} | ||
240 | - </if> | ||
241 | - <if test="queryVO.checkFinishStatus != null"> | ||
242 | - AND p.finish_status = #{queryVO.checkFinishStatus} | ||
243 | - </if> | ||
244 | <if test="queryVO.customerCode != null and queryVO.customerCode.size > 0 "> | 232 | <if test="queryVO.customerCode != null and queryVO.customerCode.size > 0 "> |
245 | AND o.customer_code IN | 233 | AND o.customer_code IN |
246 | <foreach collection="queryVO.customerCode" item="customerCode" open="(" separator="," close=")"> | 234 | <foreach collection="queryVO.customerCode" item="customerCode" open="(" separator="," close=")"> |
src/main/resources/mapper/OrderBaseInfoMapper.xml
@@ -133,4 +133,83 @@ | @@ -133,4 +133,83 @@ | ||
133 | opa.mid_check_result IS NULL) | 133 | opa.mid_check_result IS NULL) |
134 | </select> | 134 | </select> |
135 | 135 | ||
136 | + <select id="countRecentYearByOrderInit" resultType="java.lang.Long"> | ||
137 | + SELECT COUNT(*) | ||
138 | + FROM (SELECT project_no, inner_no | ||
139 | + FROM order_base_info | ||
140 | + WHERE enable_flag = 10 | ||
141 | + AND (return_order != '1' OR return_order IS NULL) | ||
142 | + GROUP BY project_no, inner_no) AS unique_combinations; | ||
143 | + </select> | ||
144 | + | ||
145 | + <select id="countRecentMonthValueByOrderInit" resultType="java.lang.Long"> | ||
146 | + SELECT COUNT(*) | ||
147 | + FROM ( | ||
148 | + SELECT project_no, inner_no | ||
149 | + FROM order_base_info | ||
150 | + WHERE enable_flag = 10 | ||
151 | + AND (return_order != '1' OR return_order IS NULL) -- 处理 NULL 值 | ||
152 | + AND inner_no LIKE CONCAT('_____', #{dataYear}, '%') -- 直接匹配年份 | ||
153 | + GROUP BY project_no, inner_no | ||
154 | + ) AS unique_combinations; | ||
155 | + | ||
156 | + </select> | ||
157 | + | ||
158 | + <select id="countRecentDayByOrderInit" resultType="java.lang.Long"> | ||
159 | + SELECT COUNT(*) | ||
160 | + FROM ( | ||
161 | + SELECT project_no, inner_no | ||
162 | + FROM order_base_info | ||
163 | + WHERE enable_flag = 10 | ||
164 | + AND (return_order != '1' OR return_order IS NULL) | ||
165 | + AND create_time >= #{startDate} | ||
166 | + AND create_time <![CDATA[ < ]]> #{endDate} | ||
167 | + AND inner_no LIKE CONCAT('_____', #{year}, '%') | ||
168 | + GROUP BY project_no, inner_no | ||
169 | + ) AS unique_combinations; | ||
170 | + | ||
171 | + </select> | ||
172 | + | ||
173 | + <select id="countAllYearByOrderStatus" resultType="java.lang.Long"> | ||
174 | + SELECT COUNT(*) | ||
175 | + FROM ( | ||
176 | + SELECT project_no, inner_no | ||
177 | + FROM order_base_info | ||
178 | + WHERE enable_flag = 10 | ||
179 | + AND (return_order != '1' OR return_order IS NULL) | ||
180 | + AND order_status=#{orderStatus} | ||
181 | + GROUP BY project_no, inner_no | ||
182 | + ) AS unique_combinations; | ||
183 | + | ||
184 | + </select> | ||
185 | + | ||
186 | + <select id="countAllMonthByOrderStatus" resultType="java.lang.Long"> | ||
187 | + SELECT COUNT(*) | ||
188 | + FROM ( | ||
189 | + SELECT project_no, inner_no | ||
190 | + FROM order_base_info | ||
191 | + WHERE enable_flag = 10 | ||
192 | + AND (return_order != '1' OR return_order IS NULL) | ||
193 | + AND order_status=#{orderStatus} | ||
194 | + AND inner_no LIKE CONCAT('_____', #{dataYear}, '%') -- 直接匹配年份 | ||
195 | + GROUP BY project_no, inner_no | ||
196 | + ) AS unique_combinations; | ||
197 | + | ||
198 | + </select> | ||
199 | + | ||
200 | + <select id="countAllDayvalueByOrderStatus" resultType="java.lang.Long"> | ||
201 | + SELECT COUNT(*) | ||
202 | + FROM ( | ||
203 | + SELECT project_no, inner_no | ||
204 | + FROM order_base_info | ||
205 | + WHERE enable_flag = 10 | ||
206 | + AND (return_order != '1' OR return_order IS NULL) | ||
207 | + AND create_time >= #{startDate} | ||
208 | + AND create_time <![CDATA[ < ]]> #{endDate} | ||
209 | + AND order_status=#{orderStatus} | ||
210 | + AND inner_no LIKE CONCAT('_____', #{year}, '%') | ||
211 | + GROUP BY project_no, inner_no | ||
212 | + ) AS unique_combinations; | ||
213 | + | ||
214 | + </select> | ||
136 | </mapper> | 215 | </mapper> |