diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/InvoiceController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/InvoiceController.java index 8d02eed09..d8c619c27 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/InvoiceController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/InvoiceController.java @@ -18,7 +18,6 @@ import org.jeecg.modules.business.mapper.PlatformOrderContentMapper; import org.jeecg.modules.business.mapper.PlatformOrderMapper; import org.jeecg.modules.business.service.*; import org.jeecg.modules.business.vo.*; -import org.jeecg.modules.message.entity.SysMessage; import org.jeecg.modules.quartz.entity.QuartzJob; import org.jeecg.modules.quartz.service.IQuartzJobService; import org.springframework.beans.factory.annotation.Autowired; @@ -42,6 +41,8 @@ import java.util.stream.Collectors; @RequestMapping("/shippingInvoice") @Slf4j public class InvoiceController { + @Autowired + private IClientService clientService; @Autowired private IShopService shopService; @Autowired @@ -154,15 +155,14 @@ public class InvoiceController { else return Result.error("No package in the selected period"); } /** - * Make invoice for orders indicated by param. + * Make shipping invoice for shops between 2 dates and orders with specified status. * - * @param param invoice making parameter + * @param param ClientID, shopIDs[], startDate, endDate, erpStatuses[], warehouses[] * @return Result of the generation, in case of error, message will be contained, * in case of success, data will contain filename. */ @PostMapping(value = "/make") public Result makeInvoice(@RequestBody ShippingInvoiceParam param) { - System.out.println(param); try { InvoiceMetaData metaData = shippingInvoiceService.makeInvoice(param); return Result.OK(metaData); @@ -174,8 +174,8 @@ public class InvoiceController { } } /** - * Same as makeCompletePreShippingInvoice but for post shipping - * @param param ClientID, shopIDs[], startDate, endDate + * Make complete invoice (Purchase + shipping) for shops between 2 dates and orders with specified status. + * @param param ClientID, shopIDs[], startDate, endDate, erpStatuses[], warehouses[] * @return */ @PostMapping(value = "/makeComplete") @@ -214,7 +214,7 @@ public class InvoiceController { /** - * Make complete pre-shipping invoice (Purchase + shipping) for specified orders + * Make complete shipping invoice (Purchase + shipping) for specified orders and statuses * * @param param Parameters for creating a pre-shipping invoice * @return Result of the generation, in case of error, message will be contained, @@ -328,6 +328,11 @@ public class InvoiceController { return shippingInvoiceService.exportToExcel(res, invoiceNumber, invoiceEntity); } + /** + * Returns a breakdown of all invoicable shops + * + * @return List of Shipping fees estimation + */ @GetMapping(value = "/breakdown/byShop") public Result getOrdersByClientAndShops() { List errorMessages = new ArrayList<>(); @@ -335,10 +340,114 @@ public class InvoiceController { if (shippingFeesEstimation.isEmpty()) { return Result.error("No data"); } else { + Map clientIDCodeMap = new HashMap<>(); + for(ShippingFeesEstimation estimation: shippingFeesEstimation) { + String clientId; + if(clientIDCodeMap.containsKey(estimation.getCode())){ + clientId = clientIDCodeMap.get(estimation.getCode()); + } + else { + clientId = clientService.getClientByInternalCode(estimation.getCode()); + clientIDCodeMap.put(estimation.getCode(), clientId); + } + if (estimation.getIsCompleteInvoice().equals("1")) { + List shopIds = shopService.listIdByClient(clientId); + Period period = shippingInvoiceService.getValidPeriod(shopIds); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(period.start()); + String start = calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1 < 10 ? "0" : "") + (calendar.get(Calendar.MONTH) + 1) + "-" + (calendar.get(Calendar.DAY_OF_MONTH) < 10 ? "0" : "") + (calendar.get(Calendar.DAY_OF_MONTH)); + calendar.setTime(period.end()); + String end = calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1 < 10 ? "0" : "") + (calendar.get(Calendar.MONTH) + 1) + "-" + (calendar.get(Calendar.DAY_OF_MONTH) + 1 < 10 ? "0" : "") + (calendar.get(Calendar.DAY_OF_MONTH) + 1); + + List orderIds = shippingInvoiceService.getShippingOrderIdBetweenDate(shopIds, start, end, Arrays.asList("0", "1")); + ShippingInvoiceOrderParam param = new ShippingInvoiceOrderParam(clientId, orderIds, "post"); + Result checkSkuPrices = checkSkuPrices(param); + estimation.setErrorMessage(checkSkuPrices.getCode() == 200 ? "" : checkSkuPrices.getMessage()); + } + System.gc(); + } return Result.OK(errorMessages.toString(), shippingFeesEstimation); } } + /** + * Takes a list of ShippingFeesEstimations and groups the estimations by client + * @param estimationsByShop List of estimations + * @return List of estimation grouped by client + */ + @PostMapping(value = "/breakdown/byClient") + public Result getOrdersByClient(@RequestBody List estimationsByShop) { + Map> estimationClientMap = new HashMap<>(); + List estimationByClients = new ArrayList<>(); + estimationsByShop.forEach(estimation -> { + if(estimationClientMap.containsKey(estimation.getCode())){ + estimationClientMap.get(estimation.getCode()).add(estimation); + }else { + List l = new ArrayList<>(); + l.add(estimation); + estimationClientMap.put(estimation.getCode(), l); + } + }); + for(Map.Entry> entry : estimationClientMap.entrySet()) { + String code = entry.getKey(); + String clientId = clientService.getClientByInternalCode(code); + List shops = new ArrayList<>(); + int ordersToProcess = 0; + int processedOrders = 0; + BigDecimal dueForProcessedOrders = BigDecimal.ZERO; + String isCompleteInvoice = "0"; + int hasErrors = 0; + for(ShippingFeesEstimation estimation: entry.getValue()) { + shops.add(estimation.getShop()); + isCompleteInvoice = estimation.getIsCompleteInvoice(); + ordersToProcess += estimation.getOrdersToProcess(); + processedOrders += estimation.getProcessedOrders(); + dueForProcessedOrders = dueForProcessedOrders.add(estimation.getDueForProcessedOrders()); + hasErrors = estimation.getErrorMessage().isEmpty() ? hasErrors : hasErrors+1; + } + ShippingFeesEstimationClient estimationClient = new ShippingFeesEstimationClient(clientId, code, ordersToProcess, processedOrders, dueForProcessedOrders, isCompleteInvoice, hasErrors); + estimationByClients.add(estimationClient); + System.gc(); + } + return Result.ok(estimationByClients); + } + + /** + * Invoices all available orders with status 3 for a list of client + * @param clientCodes list of clients to invoice + * @param invoiceType invoice type (shipping or complete) + * @return list of invoice infos + */ + @GetMapping(value = "/breakdown/makeInvoice") + public Result makeBreakdownInvoice(@RequestParam(value = "codes[]") List clientCodes, @RequestParam("invoiceType") int invoiceType) { + Map> clientShopIDsMap = new HashMap<>(); + List invoiceList = new ArrayList<>(); + for(String id: clientCodes) { + clientShopIDsMap.put(id, shopService.listIdByClient(id)); + } + for(Map.Entry> entry: clientShopIDsMap.entrySet()) { + Period period = shippingInvoiceService.getValidPeriod(entry.getValue()); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(period.start()); + String start = calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH)+1 < 10 ? "0" : "") + (calendar.get(Calendar.MONTH)+1) + "-" + (calendar.get(Calendar.DAY_OF_MONTH) < 10 ? "0" : "") + (calendar.get(Calendar.DAY_OF_MONTH)); + calendar.setTime(period.end()); + String end = calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH)+1 < 10 ? "0" : "") + (calendar.get(Calendar.MONTH)+1) + "-" + (calendar.get(Calendar.DAY_OF_MONTH)+1 < 10 ? "0" : "") + (calendar.get(Calendar.DAY_OF_MONTH)+1); + System.out.println( "[" + start + "] --- [" + end + "]"); + try { + ShippingInvoiceParam param = new ShippingInvoiceParam(entry.getKey(), entry.getValue(), start, end, Collections.singletonList(3), Arrays.asList("0", "1")); + InvoiceMetaData metaData; + if(invoiceType == 0) + metaData = shippingInvoiceService.makeInvoice(param); + else + metaData = shippingInvoiceService.makeCompleteInvoicePostShipping(param, "post"); + invoiceList.add(metaData); + } catch (UserException | IOException | ParseException e) { + log.error(e.getMessage()); + } + System.gc(); + } + return Result.ok(invoiceList); + } /** * Get an estimate of shipping fees for selected orders * @param param Parameters for creating a pre-shipping invoice diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/ShippingInvoiceController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/ShippingInvoiceController.java index 064066ec2..591bac0ce 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/ShippingInvoiceController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/ShippingInvoiceController.java @@ -41,10 +41,6 @@ import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; import javax.mail.*; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeBodyPart; -import javax.mail.internet.MimeMessage; -import javax.mail.internet.MimeMultipart; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; @@ -519,38 +515,107 @@ public class ShippingInvoiceController { String invoiceEntity = clientService.getClientEntity(clientId); List invoicePathList = getPath(INVOICE_LOCATION, invoiceNumber, invoiceEntity); List detailPathList = getPath(INVOICE_DETAIL_LOCATION, invoiceNumber, invoiceEntity); - if(invoicePathList.isEmpty() ||detailPathList.isEmpty()) { + boolean invoiceDeleted = false, detailDeleted = false; + + if(invoicePathList.isEmpty()) { log.error("FILE NOT FOUND : " + invoiceNumber); - return Result.ok("Invoice canceled, but file not found."); - } - else { + } else { for (Path path : invoicePathList) { log.info(path.toString()); } - for (Path path : detailPathList) { - log.info(path.toString()); - } try { File invoiceFile = new File(invoicePathList.get(0).toString()); - File detailFile = new File(detailPathList.get(0).toString()); if(invoiceFile.delete()) { log.info("Invoice file {} delete successful.", invoicePathList.get(0).toString()); + invoiceDeleted = true; } else { log.error("Invoice file delete fail."); - return Result.error("Invoice file delete fail."); - } - if(detailFile.delete()) { - log.info("Detail file {} delete successful.", detailPathList.get(0).toString()); - } else { - log.error("Detail file delete fail."); - return Result.error("Detail file delete fail."); } } catch (Exception e) { e.printStackTrace(); - return Result.error(e.getMessage()); + } + } + if(detailPathList.isEmpty()) { + log.error("DETAIL FILE NOT FOUND : " + invoiceNumber); + } else { + for (Path path : detailPathList) { + log.info(path.toString()); + } + try { + File detailFile = new File(detailPathList.get(0).toString()); + if(detailFile.delete()) { + log.info("Detail file {} delete successful.", detailPathList.get(0).toString()); + detailDeleted = true; + } else { + log.error("Detail file delete fail."); + } + } catch (Exception e) { + e.printStackTrace(); } } log.info("Invoice files deleted."); - return Result.ok("Invoice cancel successful."); + return Result.ok("Invoice cancel successful." + (invoiceDeleted ? "" : " Failed to delete invoice file.") + (detailDeleted ? "" : " Failed to delete detail file.")); + } + + /** + * Delete a batch of invoices + * @param ids list of invoice ids + * @param invoiceNumbers list of invoice numbers + * @param clientIds list of clients + * @return result + */ + @PostMapping(value = "/cancelBatchInvoice") + public Result cancelBatchInvoice(@RequestParam("ids") List ids, @RequestParam("invoiceNumbers") List invoiceNumbers, @RequestParam("clientIds") List clientIds) { + + log.info("Cancelling invoices : {}", invoiceNumbers); + platformOrderContentService.cancelBatchInvoice(invoiceNumbers); + platformOrderService.cancelBatchInvoice(invoiceNumbers); + savRefundService.cancelBatchInvoice(invoiceNumbers); + shippingInvoiceService.delBatchMain(ids); + log.info("Deleting invoice files ..."); + + for(int i = 0; i < ids.size(); i++) { + String invoiceNumber = invoiceNumbers.get(i); + String invoiceEntity = clientService.getClientEntity(clientIds.get(i)); + List invoicePathList = getPath(INVOICE_LOCATION, invoiceNumber, invoiceEntity); + List detailPathList = getPath(INVOICE_DETAIL_LOCATION, invoiceNumber, invoiceEntity); + + if(invoicePathList.isEmpty()) { + log.error("FILE NOT FOUND : " + invoiceNumber + ", " + invoiceEntity); + } else { + for (Path path : invoicePathList) { + log.info(path.toString()); + } + try { + File invoiceFile = new File(invoicePathList.get(0).toString()); + if(invoiceFile.delete()) { + log.info("Invoice file {} delete successful.", invoicePathList.get(0).toString()); + } else { + log.error("Invoice file delete fail."); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + if(detailPathList.isEmpty()) { + log.error("DETAIL FILE NOT FOUND : " + invoiceNumber + ", " + invoiceEntity); + } else { + for (Path path : detailPathList) { + log.info(path.toString()); + } + try { + File detailFile = new File(detailPathList.get(0).toString()); + if(detailFile.delete()) { + log.info("Detail file {} delete successful.", detailPathList.get(0).toString()); + } else { + log.error("Detail file {} delete fail.", detailPathList.get(0).toString()); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + log.info("End of invoice files deletion."); + return Result.ok("Invoices cancellation finished."); } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/shippingInvoice/ShippingInvoiceFactory.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/shippingInvoice/ShippingInvoiceFactory.java index 08c81e0d8..4b9405391 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/shippingInvoice/ShippingInvoiceFactory.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/shippingInvoice/ShippingInvoiceFactory.java @@ -663,7 +663,7 @@ public class ShippingInvoiceFactory { } } if (channel == null) { - String format = "Can not find propre channel for" + + String format = "Can not find propre channel for " + "package Serial No: %s, delivered at %s, " + "weight: %s, channel name: %s, destination: %s"; String msg = String.format( @@ -685,7 +685,7 @@ public class ShippingInvoiceFactory { .max(Comparator.comparing(LogisticChannelPrice::getEffectiveDate)); price = priceCandidate.orElse(null); if (price == null) { - String format = "Can not find propre channel price for" + + String format = "Can not find proper channel price for " + "package Serial No: %s, delivered at %s, " + "weight: %s, channel name: %s, destination: %s"; String msg = String.format( @@ -783,9 +783,11 @@ public class ShippingInvoiceFactory { // Calculate total amounts invoice.tableData(); estimations.add(new ShippingFeesEstimation( - client.getInternalCode(), shop.getErpCode(), 0, orders.entrySet().size(), invoice.getTotalAmount())); + client.getInternalCode(), shop.getErpCode(), 0, orders.entrySet().size(), invoice.getTotalAmount(), client.getIsCompleteInvoice(), "")); } catch (UserException e) { log.error("Couldn't calculate all fees for shop {} for following reason {}", shop.getErpCode(), e.getMessage()); + estimations.add(new ShippingFeesEstimation( + client.getInternalCode(), shop.getErpCode(), 0, orders.entrySet().size(), BigDecimal.ZERO, client.getIsCompleteInvoice(), e.getMessage())); errorMessages.add(e.getMessage()); } } @@ -839,7 +841,7 @@ public class ShippingInvoiceFactory { // Calculate total amounts invoice.tableData(); estimations.add(new ShippingFeesEstimation( - client.getInternalCode(), shop.getErpCode(), 0, orders.entrySet().size(), invoice.getTotalAmount())); + client.getInternalCode(), shop.getErpCode(), 0, orders.entrySet().size(), invoice.getTotalAmount(), client.getIsCompleteInvoice(), "")); } catch (UserException e) { log.error("Couldn't calculate all fees for shop {} for following reason {}", shop.getErpCode(), e.getMessage()); errorMessages.add(e.getMessage()); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/Client.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/Client.java index c5491080f..c98e66c02 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/Client.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/Client.java @@ -181,6 +181,9 @@ public class Client implements Serializable { @ApiModelProperty(value = "是否活跃") private String active; + @Excel(name = "是否完整发票", width = 15) + @ApiModelProperty(value = "完整发票") + private String isCompleteInvoice; public String fullName() { return firstName + " " + surname; } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/ClientMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/ClientMapper.java index 59c7a0ebf..b137543ca 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/ClientMapper.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/ClientMapper.java @@ -5,6 +5,9 @@ import org.apache.ibatis.annotations.Param; import org.jeecg.modules.business.entity.Client; import org.springframework.stereotype.Repository; +import java.util.List; +import java.util.Map; + /** * @Description: 客户 * @Author: jeecg-boot @@ -15,4 +18,6 @@ import org.springframework.stereotype.Repository; public interface ClientMapper extends BaseMapper { String getClientEntity(@Param("id") String id); + Map getClientsEntity(@Param("ids") List ids); + String getClientByInternalCode(@Param("code") String code); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderContentMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderContentMapper.java index df27a4824..13b1e3724 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderContentMapper.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderContentMapper.java @@ -74,4 +74,5 @@ public interface PlatformOrderContentMapper extends BaseMapper fetchPlatformOrderContentsToArchive(@Param("orderIDs") List orderIDs); void insertPlatformOrderContentsArchives(@Param("orderContents") List platformOrderContents); void cancelInvoice(@Param("invoiceNumber") String invoiceNumber); + void cancelBatchInvoice(@Param("invoiceNumbers") List invoiceNumbers); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderMapper.java index 9b3c61370..73ae5857f 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderMapper.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderMapper.java @@ -182,4 +182,5 @@ public interface PlatformOrderMapper extends BaseMapper { List fetchOrdersToArchiveBeforeDate(@Param("endDate") String endDate); void insertPlatformOrdersArchives(@Param("orders") List platformOrders); void cancelInvoice(@Param("invoiceNumber") String invoiceNumber); + void cancelBatchInvoice(@Param("invoiceNumbers") List invoiceNumbers); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/SavRefundMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/SavRefundMapper.java index fe65d9da7..2642cb9fb 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/SavRefundMapper.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/SavRefundMapper.java @@ -18,4 +18,5 @@ import java.util.List; public interface SavRefundMapper extends BaseMapper { List fetchRefundAmount(@Param("invoiceNumber") String invoiceNumber); void cancelInvoice(@Param("invoiceNumber") String invoiceNumber); + void cancelBatchInvoice(@Param("invoiceNumbers") List invoiceNumbers); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/ShopMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/ShopMapper.java index 550e6f3aa..896db0682 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/ShopMapper.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/ShopMapper.java @@ -20,4 +20,6 @@ public interface ShopMapper extends BaseMapper { public List selectByMainId(@Param("mainId") String mainId); List selectByClient(@Param("clientID") String clientID); + + List selectShopIdByClient(@Param("clientID") String clientID); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/ClientMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/ClientMapper.xml index 532a226d4..307cb3ded 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/ClientMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/ClientMapper.xml @@ -6,4 +6,17 @@ FROM client WHERE id = #{id} + + \ No newline at end of file diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderContentMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderContentMapper.xml index 143bb48c4..8fe82440d 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderContentMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderContentMapper.xml @@ -158,11 +158,10 @@ @@ -281,11 +280,25 @@ UPDATE platform_order_content - SET picking_fee = 0.0, + SET picking_fee = 0.0, shipping_fee = NULL, service_fee = NULL, vat = NULL, purchase_fee = 0.0 WHERE platform_order_id IN (SELECT id FROM platform_order WHERE shipping_invoice_number = #{invoiceNumber}); + + UPDATE platform_order_content + SET picking_fee = 0.0, + shipping_fee = NULL, + service_fee = NULL, + vat = NULL, + purchase_fee = 0.0 + WHERE platform_order_id IN + (SELECT id FROM platform_order + WHERE shipping_invoice_number IN + + #{invoiceNumber} + ); + diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderMapper.xml index 13d743a4b..50a8e46be 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderMapper.xml @@ -599,4 +599,16 @@ packaging_material_fee = 0.0 WHERE shipping_invoice_number = #{invoiceNumber}; + + UPDATE platform_order + SET fret_fee = NULL, + order_service_fee = NULL, + shipping_invoice_number = NULL, + picking_fee = 0.0, + packaging_material_fee = 0.0 + WHERE shipping_invoice_number IN + + #{invoiceNumber} + ; + diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/SavRefundMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/SavRefundMapper.xml index da5da8458..8631c4732 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/SavRefundMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/SavRefundMapper.xml @@ -13,4 +13,14 @@ total_refund_amount = 0.0 WHERE invoice_number = #{invoiceNumber}; + + UPDATE sav_refund + SET invoice_number = NULL, + refund_date = NULL, + total_refund_amount = 0.0 + WHERE invoice_number IN + + #{invoiceNumber} + ; + \ No newline at end of file diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/ShopMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/ShopMapper.xml index 04abd8212..371191c5c 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/ShopMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/ShopMapper.xml @@ -17,4 +17,9 @@ FROM shop WHERE owner_id = #{clientID} AND active = '1' + diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IClientService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IClientService.java index 230017761..8c449811f 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IClientService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IClientService.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import java.io.Serializable; import java.util.Collection; import java.util.List; +import java.util.Map; /** * @Description: 客户 @@ -38,6 +39,8 @@ public interface IClientService extends IService { */ public void delBatchMain (Collection idList); public String getClientEntity(String id); + public Map getClientsEntity(List ids); + public String getClientByInternalCode(String code); /** * Get current user's client information * @return client or null if current user's role is not client diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IPlatformOrderContentService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IPlatformOrderContentService.java index d2c1b6e51..32d176f31 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IPlatformOrderContentService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IPlatformOrderContentService.java @@ -48,4 +48,9 @@ public interface IPlatformOrderContentService extends IService invoiceNumbers); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IPlatformOrderService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IPlatformOrderService.java index 75bfa0487..e9211c687 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IPlatformOrderService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IPlatformOrderService.java @@ -171,4 +171,9 @@ public interface IPlatformOrderService extends IService { * @param invoiceNumber */ void cancelInvoice(String invoiceNumber); + /** + * Cancel Invoice + * @param invoiceNumbers + */ + void cancelBatchInvoice(List invoiceNumbers); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/ISavRefundService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/ISavRefundService.java index 143d0f3c0..5c414703a 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/ISavRefundService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/ISavRefundService.java @@ -13,9 +13,15 @@ import java.util.List; * @Version: V1.0 */ public interface ISavRefundService extends IService { - List getRefundAmount(String invoiceNumber);/** + List getRefundAmount(String invoiceNumber); + /** * Cancel Invoice * @param invoiceNumber */ void cancelInvoice(String invoiceNumber); + /** + * Cancel Batch Invoice + * @param invoiceNumbers + */ + void cancelBatchInvoice(List invoiceNumbers); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IShopService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IShopService.java index 2f1fa0580..f4f8dd100 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IShopService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IShopService.java @@ -15,4 +15,5 @@ public interface IShopService extends IService { public List selectByMainId(String mainId); List listByClient(String clientID); + List listIdByClient(String clientID); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/PlatformOrderShippingInvoiceService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/PlatformOrderShippingInvoiceService.java index 18878d0ec..da0bb6864 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/PlatformOrderShippingInvoiceService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/PlatformOrderShippingInvoiceService.java @@ -1,6 +1,7 @@ package org.jeecg.modules.business.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.swagger.models.auth.In; import org.apache.shiro.SecurityUtils; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.business.controller.UserException; @@ -124,7 +125,10 @@ public class PlatformOrderShippingInvoiceService { Date endZoned = Date.from(ldt.atZone(paris).toInstant()); return new Period(beginZoned, endZoned); } - + public List getShippingOrderIdBetweenDate(List shops, String start, String end, List wareHouses) { + List orders = platformOrderMapper.fetchUninvoicedShippedOrderIDInShops( start, end, shops, wareHouses); + return orders.stream().map(PlatformOrder::getId).collect(Collectors.toList()); + } /** * Make an invoice based on parameters. * @@ -179,7 +183,7 @@ public class PlatformOrderShippingInvoiceService { } /** - * Make a complete pre-shipping (purchase + shipping) invoice for specified orders + * Make a complete shipping invoice (purchase + shipping) invoice for specified orders and order statuses * * @param param the parameters to make the invoice * @return name of the invoice, can be used to in {@code getInvoiceBinary}. diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/ClientServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/ClientServiceImpl.java index 830a1c7de..716c804a5 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/ClientServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/ClientServiceImpl.java @@ -18,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; import java.util.List; import java.util.Collection; +import java.util.Map; /** * @Description: 客户 @@ -121,4 +122,13 @@ public class ClientServiceImpl extends ServiceImpl impleme public String getClientEntity(String id) { return clientMapper.getClientEntity(id); } + @Override + public Map getClientsEntity(List ids) { + return clientMapper.getClientsEntity(ids); + } + + @Override + public String getClientByInternalCode(String code) { + return clientMapper.getClientByInternalCode(code); + } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderContentServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderContentServiceImpl.java index 522ee5516..fba4436c2 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderContentServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderContentServiceImpl.java @@ -66,4 +66,8 @@ public class PlatformOrderContentServiceImpl extends ServiceImpl invoiceNumbers) { + platformOrderContentMapper.cancelBatchInvoice(invoiceNumbers); + } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderServiceImpl.java index 38b9c84e3..02a5980aa 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderServiceImpl.java @@ -382,4 +382,8 @@ public class PlatformOrderServiceImpl extends ServiceImpl invoiceNumbers) { + platformOrderMap.cancelBatchInvoice(invoiceNumbers); + } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/SavRefundServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/SavRefundServiceImpl.java index de28f24d7..572e47b06 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/SavRefundServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/SavRefundServiceImpl.java @@ -36,4 +36,8 @@ public class SavRefundServiceImpl extends ServiceImpl invoiceNumbers) { + savRefundMapper.cancelBatchInvoice(invoiceNumbers); + } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/ShopServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/ShopServiceImpl.java index 63f0fb580..cd9ce1db6 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/ShopServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/ShopServiceImpl.java @@ -29,4 +29,8 @@ public class ShopServiceImpl extends ServiceImpl implements IS public List listByClient(String clientID) { return shopMapper.selectByClient(clientID); } + @Override + public List listIdByClient(String clientID) { + return shopMapper.selectShopIdByClient(clientID); + } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/ShippingFeesEstimation.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/ShippingFeesEstimation.java index 4fbbdb8fc..ab266f802 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/ShippingFeesEstimation.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/ShippingFeesEstimation.java @@ -1,5 +1,6 @@ package org.jeecg.modules.business.vo; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.math.BigDecimal; @@ -7,13 +8,31 @@ import java.math.BigDecimal; @Data public class ShippingFeesEstimation { - private final String code; + private String code; - private final String shop; + private String shop; - private final Integer ordersToProcess; + private Integer ordersToProcess; - private final Integer processedOrders; + private Integer processedOrders; - private final BigDecimal dueForProcessedOrders; + private BigDecimal dueForProcessedOrders; + + private String isCompleteInvoice; + + private String errorMessage; + + public ShippingFeesEstimation(@JsonProperty("code") String code, @JsonProperty("shop")String shop, + @JsonProperty("ordersToProcess")Integer ordersToProcess, @JsonProperty("processedOrders")Integer processedOrders, + @JsonProperty("dueForProcessedOrders")BigDecimal dueForProcessedOrders, + @JsonProperty("isCompleteInvoice")String isCompleteInvoice, + @JsonProperty(value = "errorMessage")String errorMessage) { + this.code = code; + this.shop = shop; + this.ordersToProcess = ordersToProcess; + this.processedOrders = processedOrders; + this.dueForProcessedOrders = dueForProcessedOrders; + this.isCompleteInvoice = isCompleteInvoice; + this.errorMessage = errorMessage; + } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/ShippingFeesEstimationClient.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/ShippingFeesEstimationClient.java new file mode 100644 index 000000000..3296de805 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/ShippingFeesEstimationClient.java @@ -0,0 +1,22 @@ +package org.jeecg.modules.business.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class ShippingFeesEstimationClient { + private final String clientId; + + private final String code; + + private final Integer ordersToProcess; + + private final Integer processedOrders; + + private final BigDecimal dueForProcessedOrders; + + private final String isCompleteInvoice; + + private final Integer hasErrors; +}