From cbb0dfaec496d441bbf4287ca8ae85c2776e50ed Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期四, 13 三月 2025 13:12:39 +0800 Subject: [PATCH] #修改 1. 收货通知单明细模板修改 2. 收货通知单添加动态扩展字段 --- rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java | 6 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java | 43 +++- rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReportMsgService.java | 12 + rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java | 5 rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java | 6 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java | 16 ++ rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java | 3 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java | 14 + rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ReportMsgController.java | 20 ++ /dev/null | 52 ------ rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java | 95 +++++++++++ rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/OrderParams.java | 2 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java | 46 +++++ rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java | 10 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/AsnOrderTemplate.java | 31 ++- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderItemService.java | 3 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java | 27 ++ rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ReceiveMsgController.java | 76 +++++++++ rsf-server/src/main/resources/application-dev.yml | 2 19 files changed, 361 insertions(+), 108 deletions(-) diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ErpApiController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ErpApiController.java deleted file mode 100644 index e83aa51..0000000 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ErpApiController.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.vincent.rsf.server.api.controller; - -import com.vincent.rsf.framework.common.R; -import com.vincent.rsf.server.api.controller.params.Order; -import com.vincent.rsf.server.api.service.ErpApiService; -import com.vincent.rsf.server.system.controller.BaseController; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -/** - * @author Ryan - * @version 1.0 - * @title ErpApiController - * @description - * @create 2025/3/4 13:19 - */ -@RestController -@RequestMapping("/erp") -@Api(tags = "ERP鎺ュ彛瀵规帴") -public class ErpApiController extends BaseController { - - @Autowired - private ErpApiService erpApiService; - - /** - * @author Ryan - * @description 鎺ユ敹ERP鎺ㄩ�佺殑PO鍗曟嵁 - * @throws - * @return - * @time 2025/3/4 13:57 - */ - @ApiOperation(value = "鎺ユ敹鍚屾ERP閲囪喘鍗�") - @PostMapping("/sync/purchase") - public R syncPurchases(@RequestBody List<Order> orders) { - if (orders.isEmpty()) { - return R.error("鎺ㄩ�佽鍗曚笉鑳戒负绌猴紝璇锋鏌ユ牎楠屽悗鍐嶆搷浣滐紒锛�"); - } - if (!erpApiService.syncPurchasee(orders)) { - return R.error("淇濆瓨澶辫触"); - } else { - return R.ok("淇濆瓨鎴愬姛锛侊紒"); - } - } - -} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ReceiveMsgController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ReceiveMsgController.java new file mode 100644 index 0000000..16a5e11 --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ReceiveMsgController.java @@ -0,0 +1,76 @@ +package com.vincent.rsf.server.api.controller; + +import com.vincent.rsf.framework.common.R; +import com.vincent.rsf.server.api.controller.params.OrderParams; +import com.vincent.rsf.server.api.service.ReceiveMsgService; +import com.vincent.rsf.server.common.utils.ExcelUtil; +import com.vincent.rsf.server.manager.entity.AsnOrder; +import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate; +import com.vincent.rsf.server.system.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.List; + +/** + * @author Ryan + * @version 1.0 + * @title ErpApiController + * @description + * @create 2025/3/4 13:19 + */ +@RestController +@RequestMapping("/erp") +@Api(tags = "ERP鎺ュ彛瀵规帴") +public class ReceiveMsgController extends BaseController { + + @Autowired + private ReceiveMsgService receiveMsgService; + + /** + * @author Ryan + * @description 鎺ユ敹ERP鎺ㄩ�佺殑PO鍗曟嵁 + * @throws + * @return + * @time 2025/3/4 13:57 + */ + @ApiOperation(value = "鎺ユ敹鍚屾ERP閲囪喘鍗�") + @PostMapping("/sync/purchase") + public R syncPurchases(@RequestBody List<OrderParams> orders) { + if (orders.isEmpty()) { + return R.error("鎺ㄩ�佽鍗曚笉鑳戒负绌猴紝璇锋鏌ユ牎楠屽悗鍐嶆搷浣滐紒锛�"); + } + if (!receiveMsgService.syncPurchasee(orders)) { + return R.error("淇濆瓨澶辫触"); + } else { + return R.ok("淇濆瓨鎴愬姛锛侊紒"); + } + } + + /** + * @author Ryan + * @description 鍚屾璐ㄦ缁撴灉淇℃伅 + * @param + * @return + * @time 2025/3/12 16:56 + */ + @ApiOperation("璐ㄦ缁撴灉鍚屾") + @PostMapping("/sync/inspect") + public void syncQlyInspect(HttpServletRequest request, HttpServletResponse response) { + AsnOrderTemplate template = ExcelUtil.mockData(AsnOrderTemplate.class); + List<AsnOrderTemplate> list = new ArrayList<>(); + list.add(template); + ExcelUtil.build(ExcelUtil.create(list, AsnOrderTemplate.class), response); + System.out.println(template); +// return R.ok(); + } + +} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ReportMsgController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ReportMsgController.java new file mode 100644 index 0000000..eb916b4 --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ReportMsgController.java @@ -0,0 +1,20 @@ +package com.vincent.rsf.server.api.controller; + +import com.vincent.rsf.server.system.controller.BaseController; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author Ryan + * @version 1.0 + * @title ReportMsgController + * @description + * @create 2025/3/12 17:00 + */ +@RestController +@RequestMapping("/report") +@Api(tags = "涓婃姤淇℃伅鎺ュ彛绠$悊鍣�") +public class ReportMsgController extends BaseController { + +} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/Order.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/OrderParams.java similarity index 96% rename from rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/Order.java rename to rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/OrderParams.java index 996b6ea..2c8d5c5 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/Order.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/OrderParams.java @@ -21,7 +21,7 @@ @Data @Accessors(chain = true) @ApiModel(value = "PurchaseOrder", description = "鍏ュ簱鍗曟嵁") -public class Order implements Serializable { +public class OrderParams implements Serializable { @ApiModelProperty(value = "鍗曟嵁缂栫爜") private String code; diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ErpApiService.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java similarity index 74% rename from rsf-server/src/main/java/com/vincent/rsf/server/api/service/ErpApiService.java rename to rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java index 321eb7a..b0df19a 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ErpApiService.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java @@ -1,7 +1,7 @@ package com.vincent.rsf.server.api.service; -import com.vincent.rsf.server.api.controller.params.Order; +import com.vincent.rsf.server.api.controller.params.OrderParams; import com.vincent.rsf.server.api.entity.dto.PoItemsDto; import java.util.List; @@ -13,14 +13,14 @@ * @description * @create 2025/3/4 16:23 */ -public interface ErpApiService { +public interface ReceiveMsgService { /** * 閲囪喘鍗曞悓姝� * @param orders * @return */ - boolean syncPurchasee(List<Order> orders); + boolean syncPurchasee(List<OrderParams> orders); /** * 涓�閿姤妫� diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReportMsgService.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReportMsgService.java new file mode 100644 index 0000000..83ab495 --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReportMsgService.java @@ -0,0 +1,12 @@ +package com.vincent.rsf.server.api.service; + +/** + * @author Ryan + * @version 1.0 + * @title ReportMsgService + * @description + * @create 2025/3/12 17:07 + */ +public interface ReportMsgService { + +} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java index a62dd3b..525be1b 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java @@ -20,6 +20,7 @@ import com.vincent.rsf.server.manager.service.WarehouseAreasItemService; import com.vincent.rsf.server.manager.service.WarehouseAreasService; import com.vincent.rsf.server.system.constant.CodeRes; +import com.vincent.rsf.server.system.constant.SerialRuleCode; import com.vincent.rsf.server.system.controller.param.LoginParam; import com.vincent.rsf.server.system.controller.result.LoginResult; import com.vincent.rsf.server.system.entity.*; @@ -174,7 +175,7 @@ .setAreaName(areasItem.getName()) .setAreaId(areasItem.getId()) .setStockUnit(dto.getStockUnit()) - .setBatch(SerialRuleUtils.generateRuleCode("sys_receipt_batch", dto)) + .setBatch(SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_RECEIPT_BATCH, dto)) .setAnfme(dto.getReceiptQty()) .setSplrBtch(dto.getSplrBatch()) .setMatnrCode(matnr.getCode()) diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ErpApiServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java similarity index 89% rename from rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ErpApiServiceImpl.java rename to rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java index 320a1f8..1e3daf7 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ErpApiServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java @@ -19,9 +19,12 @@ import com.vincent.rsf.server.manager.service.PurchaseItemService; import com.vincent.rsf.server.manager.service.PurchaseService; import com.vincent.rsf.server.system.constant.SerialRuleCode; -import com.vincent.rsf.server.api.controller.params.Order; +import com.vincent.rsf.server.api.controller.params.OrderParams; +import com.vincent.rsf.server.system.entity.Fields; +import com.vincent.rsf.server.system.service.FieldsItemService; +import com.vincent.rsf.server.system.service.FieldsService; import com.vincent.rsf.server.system.utils.SerialRuleUtils; -import com.vincent.rsf.server.api.service.ErpApiService; +import com.vincent.rsf.server.api.service.ReceiveMsgService; import com.vincent.rsf.server.manager.entity.Purchase; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; @@ -48,16 +51,14 @@ */ @Slf4j @Service("erpApiService") -public class ErpApiServiceImpl implements ErpApiService { +public class ReceiveMsgServiceImpl implements ReceiveMsgService { @Autowired private PurchaseService purchaseService; @Autowired private PurchaseItemService purchaseItemService; - @Autowired private AsnOrderService asnOrderService; - @Autowired private AsnOrderItemService asnOrderItemService; @Autowired @@ -66,10 +67,14 @@ private RemotesInfoProperties remotesInfoProperties; @Autowired private RemotesInfoProperties.ApiInfo apiInfo; + @Autowired + private FieldsService fieldsService; + @Autowired + private FieldsItemService fieldsItemService; @Override @Transactional(rollbackFor = Exception.class) - public boolean syncPurchasee(List<Order> orders) { + public boolean syncPurchasee(List<OrderParams> orders) { if (orders.isEmpty()) { throw new CoolException("鍗曟嵁鍐呭涓嶈兘涓虹┖锛侊紒"); } @@ -82,12 +87,22 @@ if (!purchaseService.save(purchase)) { throw new CoolException("閲囪喘鍗曟嵁淇濆瓨澶辫触"); } + + //鏌ヨ鎵╁睍瀛楁鏄惁瀛樺湪 + List<Fields> fields = fieldsService.list(new LambdaQueryWrapper<Fields>().eq(Fields::getStatus, 1).eq(Fields::getFlagEnable, 1)); + //鍒ゆ柇瀛愬垪琛ㄤ笉涓虹┖ if (!ors.getChildren().isEmpty()) { ArrayList<PurchaseItem> list = new ArrayList<>(); ors.getChildren().forEach(orderItem -> { PurchaseItem item = new PurchaseItem(); BeanUtils.copyProperties(orderItem, item); +// if (!fields.isEmpty()) { +// List<String> fieldValue = fields.stream().map(Fields::getFields).collect(Collectors.toList()); +// fieldValue.forEach(value -> { +// +// }); +// } item.setPurchaseId(purchase.getId()); list.add(item); }); diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java new file mode 100644 index 0000000..5f3bfc8 --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java @@ -0,0 +1,16 @@ +package com.vincent.rsf.server.api.service.impl; + +import com.vincent.rsf.server.api.service.ReportMsgService; +import org.springframework.stereotype.Service; + +/** + * @author Ryan + * @version 1.0 + * @title ReportMsgServiceImpl + * @description + * @create 2025/3/12 17:08 + */ +@Service +public class ReportMsgServiceImpl implements ReportMsgService { + +} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java index b501bda..922d42f 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java @@ -1,8 +1,12 @@ package com.vincent.rsf.server.common.utils; +import cn.afterturn.easypoi.excel.annotation.Excel; import cn.afterturn.easypoi.excel.entity.ImportParams; import com.vincent.rsf.framework.common.Cools; +import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelComment; import io.swagger.annotations.ApiModelProperty; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.*; @@ -20,6 +24,7 @@ /** * Created by vincent on 2/17/2024 */ +@Slf4j public class ExcelUtil { public static void build(Workbook workbook, HttpServletResponse response) { @@ -33,6 +38,10 @@ } public static <T> Workbook create(List<T> list, Class<T> clz) { + return create(list, clz, false); + } + + public static <T> Workbook create(List<T> list, Class<T> clz, boolean flagTemplate) { HSSFWorkbook workbook = new HSSFWorkbook(); Sheet sheet = workbook.createSheet(clz.getSimpleName()); @@ -46,6 +55,15 @@ continue; } String memo = "Undefined"; + if (flagTemplate) { + if (field.isAnnotationPresent(ExcelComment.class)) { + memo = field.getAnnotation(ExcelComment.class).value(); + } + } else { + if (field.isAnnotationPresent(Excel.class)) { + memo = field.getAnnotation(Excel.class).name(); + } + } if (field.isAnnotationPresent(ApiModelProperty.class)) { memo = field.getAnnotation(ApiModelProperty.class).value(); } @@ -102,4 +120,81 @@ return params; } + /** + * 鏍规嵁 {@code tClass} 鐩稿叧鎴愬憳鍙橀噺鐨� {@link ExcelComment#example()} 瀛楁鍒涘缓妯℃嫙鏁版嵁锛屾殏涓嶆敮鎸� 澶嶆潅绫诲瀷 + * @param tClass + * @return + */ + public static <T> T mockData(Class<T> tClass) { + if (tClass == null) { + return null; + } + T instance = null; + + try { + instance = tClass.newInstance(); + Field[] declaredFields = tClass.getDeclaredFields(); + for (Field declaredField : declaredFields) { + ExcelComment comment = declaredField.getAnnotation(ExcelComment.class); + if (comment == null) { + continue; + } + declaredField.setAccessible(true); + Class<?> fieldType = declaredField.getType(); + + String exampleValue = comment.example(); + Object value = null; + + if (fieldType == int.class || fieldType == Integer.class) { + value = StringUtils.isBlank(exampleValue) ? 0 : Integer.parseInt(exampleValue); + } else if (fieldType == short.class || fieldType == Short.class) { + value = StringUtils.isBlank(exampleValue) ? 0 : Short.parseShort(exampleValue); + } else if (fieldType == long.class || fieldType == Long.class) { + value = StringUtils.isBlank(exampleValue) ? 0 : Long.parseLong(exampleValue); + } else if (fieldType == double.class || fieldType == Double.class) { + value = StringUtils.isBlank(exampleValue) ? 0 : Double.parseDouble(exampleValue); + } else if (fieldType == boolean.class || fieldType == Boolean.class) { + value = StringUtils.isNotBlank(exampleValue) && Boolean.parseBoolean(exampleValue); + } else if (fieldType == String.class) { + value = exampleValue; + } else if (fieldType == Date.class) { + value = DateUtils.parse(exampleValue); + } + + if (value == null && !isBaseType(fieldType)) { + declaredField.set(instance, null); + } else { + declaredField.set(instance, value); + } + } + } catch (Exception e) { + log.error("鏁版嵁鏋勯�犲け璐ワ紝璇锋煡璇㈣缁嗕俊鎭�", e); + return instance; + } + + return instance; + } + + + /** + * 鏄惁鏄熀纭�鏁版嵁绫诲瀷 + * + * @param className + * @return + */ + private static boolean isBaseType(Class<?> className) { + if (className.equals(java.lang.Integer.class) || + className.equals(java.lang.Byte.class) || + className.equals(java.lang.Long.class) || + className.equals(java.lang.Double.class) || + className.equals(java.lang.Float.class) || + className.equals(java.lang.Character.class) || + className.equals(java.lang.Short.class) || + className.equals(java.lang.Boolean.class)) { + return true; + } + return false; + } + + } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java index 80e9d25..38b052e 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java @@ -12,7 +12,9 @@ import com.vincent.rsf.server.common.domain.PageParam; import com.vincent.rsf.server.manager.entity.AsnOrder; import com.vincent.rsf.server.manager.service.AsnOrderService; +import com.vincent.rsf.server.system.constant.SerialRuleCode; import com.vincent.rsf.server.system.controller.BaseController; +import com.vincent.rsf.server.system.utils.SerialRuleUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -64,6 +66,10 @@ public R save(@RequestBody AsnOrder asnOrder) { asnOrder.setCreateBy(getLoginUserId()); asnOrder.setUpdateBy(getLoginUserId()); + String code = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ASN_ORDER, asnOrder); + if (!Objects.isNull(code)) { + asnOrder.setCode(code); + } if (!asnOrderService.save(asnOrder)) { return R.error("Save Fail"); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java index ab28479..0b65aca 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java @@ -1,10 +1,13 @@ package com.vincent.rsf.server.manager.controller; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; +import com.vincent.rsf.server.common.utils.CommonUtil; import com.vincent.rsf.server.common.utils.ExcelUtil; import com.vincent.rsf.server.common.annotation.OperationLog; import com.vincent.rsf.server.common.domain.BaseParam; @@ -12,9 +15,15 @@ import com.vincent.rsf.server.common.domain.PageParam; import com.vincent.rsf.server.manager.controller.params.AsnOrderItemParams; import com.vincent.rsf.server.manager.entity.AsnOrderItem; +import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate; import com.vincent.rsf.server.manager.service.AsnOrderItemService; import com.vincent.rsf.server.system.controller.BaseController; +import com.vincent.rsf.server.system.entity.Fields; +import com.vincent.rsf.server.system.entity.FieldsItem; +import com.vincent.rsf.server.system.service.FieldsItemService; +import com.vincent.rsf.server.system.service.FieldsService; import com.vincent.rsf.server.system.utils.SerialRuleUtils; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -24,7 +33,9 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.*; +import java.util.stream.Collectors; +@Api(tags = "ASN鍗曟槑缁�") @RestController public class AsnOrderItemController extends BaseController { @@ -60,17 +71,21 @@ @PreAuthorize("hasAuthority('manager:asnOrderItem:save')") @OperationLog("Create ASN鍗曟嵁") @PostMapping("/asnOrderItem/save") - public R save(@RequestBody AsnOrderItem asnOrderItem) { - asnOrderItem.setCreateBy(getLoginUserId()); - asnOrderItem.setUpdateBy(getLoginUserId()); - String code = SerialRuleUtils.generateRuleCode("sys_ans_order", asnOrderItem); - if (!Objects.isNull(code)) { - asnOrderItem.setAsnCode(code); + public R save(@RequestBody Map<String, Object> params) { + if (Objects.isNull(params)) { + throw new CoolException("淇℃伅涓嶈兘涓虹┖锛侊紒"); } - if (!asnOrderItemService.save(asnOrderItem)) { + params.put("createBy", getLoginUserId()); + params.put("updateBy", getLoginUser()); + + if (!asnOrderItemService.fieldsSave(params)) { return R.error("Save Fail"); } - return R.ok("Save Success").add(asnOrderItem); + return R.ok("Save Success"); + + + + } @PreAuthorize("hasAuthority('manager:asnOrderItem:update')") @@ -111,8 +126,12 @@ @PreAuthorize("hasAuthority('manager:asnOrderItem:list')") @PostMapping("/asnOrderItem/export") + @ApiOperation("鏀惰揣閫氱煡鍗曟槑缁�") public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception { - ExcelUtil.build(ExcelUtil.create(asnOrderItemService.list(), AsnOrderItem.class), response); + AsnOrderTemplate template = ExcelUtil.mockData(AsnOrderTemplate.class); + List<AsnOrderTemplate> list = new ArrayList<>(); + list.add(template); + ExcelUtil.build(ExcelUtil.create(list, AsnOrderTemplate.class, true), response); } /** @@ -123,13 +142,13 @@ @PostMapping("/asnOrder/import") @ApiOperation("ASN瀵煎叆鎺ュ彛") @PreAuthorize("hasAuthority('manager:asnOrder:update')") - public R importExcel(@RequestParam(value = "file") MultipartFile file, HttpServletRequest request) throws Exception { + public R importExcel(@RequestParam(value = "file") MultipartFile file, @RequestParam String asnId) throws Exception { if (Objects.isNull(file)) { throw new CoolException("鏂囦欢涓嶈兘涓虹┖锛侊紒"); } HashMap<String, Object> hashMap = new HashMap<>(); - if (!Objects.isNull(request.getParameter("asnId"))) { - hashMap.put("asnId", request.getParameter("asnId")); + if (!Objects.isNull(asnId)) { + hashMap.put("asnId", asnId); } return asnOrderItemService.excelImport(file, hashMap); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java index e2773cd..c37b9ed 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java @@ -1,15 +1,13 @@ package com.vincent.rsf.server.manager.entity; -import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.*; + import java.text.SimpleDateFormat; import java.util.Date; import lombok.experimental.Accessors; import org.springframework.format.annotation.DateTimeFormat; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import com.vincent.rsf.framework.common.Cools; @@ -17,6 +15,7 @@ import com.vincent.rsf.server.system.service.UserService; import com.vincent.rsf.server.system.entity.User; import java.io.Serializable; +import java.util.Map; @Data @Accessors(chain = true) @@ -45,6 +44,13 @@ private String platItemId; /** + * 鎵╁睍瀛楁 + */ + @ApiModelProperty("鎵╁睍瀛楁") + @TableField(exist = false) + private Map<String, String> extendFields; + + /** * 瀛楁绱㈠紩 */ @ApiModelProperty("瀛楁绱㈠紩") diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/AsnOrderTemplate.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/AsnOrderTemplate.java index 6e784bc..54f5883 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/AsnOrderTemplate.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/AsnOrderTemplate.java @@ -5,6 +5,8 @@ import cn.afterturn.easypoi.handler.inter.IExcelModel; import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelAutoColumnSize; import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelComment; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; @@ -27,61 +29,60 @@ public class AsnOrderTemplate implements IExcelModel, IExcelDataModel, Serializable { @Excel(name = "琛屽彿") - @ExcelComment(example = "1357564255478") + @ExcelComment(value = "platItemId", example = "1357564255478") private String platItemId; @Excel(name = "鐗╂枡鍚嶇О") - @ExcelComment(example = "鐗╂枡鍚嶇О") + @ExcelComment(value = "matnk",example = "鐗╂枡鍚嶇О") private String matnk; @Excel(name = "鏁伴噺") - @ExcelComment(example = "25") + @ExcelComment(value = "anfme",example = "25") private Double anfme; @Excel(name = "搴撳瓨鍗曚綅") - @ExcelComment(example = "涓�") + @ExcelComment(value = "stockUnit",example = "涓�") private String stockUnit; @Excel(name = "閲囪喘鏁伴噺") - @ExcelComment(example = "25") + @ExcelComment(value = "purQty",example = "25") private Double purQty; @Excel(name = "閲囪喘鍗曚綅") - @ExcelComment(example = "涓�") + @ExcelComment(value = "purUnit",example = "涓�") private String purUnit; @Excel(name = "宸插畬鎴愭暟閲�") - @ExcelComment(example = "25") + @ExcelComment(value = "qty",example = "25") private Double qty; @Excel(name = "渚涘簲鍟嗙紪鐮�") - @ExcelComment(example = "3654821") + @ExcelComment(value = "splrCode",example = "3654821") private String splrCode; @Excel(name = "渚涘簲鍟嗗悕绉�") - @ExcelComment(example = "娴欐睙涓壃鎶�鏈叕鍙�") + @ExcelComment(value = "splrName",example = "娴欐睙涓壃鎶�鏈叕鍙�") private String splrName; @Excel(name = "渚涘簲鍟嗘壒娆�") - @ExcelComment(example = "25251212") + @ExcelComment(value = "splrBatch",example = "25251212") private String splrBatch; @Excel(name = "浜岀淮鐮�") - @ExcelComment(example = "") + @ExcelComment(value = "qrcode",example = "") private String qrcode; @Excel(name = "鏉″舰鐮�") - @ExcelComment(example = "2354788") + @ExcelComment(value = "barcode",example = "2354788") private String barcode; @Excel(name = "鍖呰鍚嶇О") - @ExcelComment(example = "绠�") + @ExcelComment(value = "packName",example = "绠�") private String packName; @Excel(name = "澶囨敞") - @ExcelComment(example = "娉細鏄撶鍝侊紝杞绘嬁鏀�") + @ExcelComment(value = "memo",example = "娉細鏄撶鍝侊紝杞绘嬁鏀�") private String memo; - private Integer rowNum; diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderItemService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderItemService.java index deaee2f..c677466 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderItemService.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderItemService.java @@ -8,8 +8,11 @@ import java.io.IOException; import java.util.HashMap; +import java.util.Map; public interface AsnOrderItemService extends IService<AsnOrderItem> { R excelImport(MultipartFile file, HashMap<String, Object> hashMap) throws Exception; + + boolean fieldsSave(Map<String, Object> params); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java index 7e5cdf6..b7775b2 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java @@ -2,9 +2,11 @@ import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; +import com.vincent.rsf.server.common.utils.CommonUtil; import com.vincent.rsf.server.common.utils.ExcelUtil; import com.vincent.rsf.server.manager.entity.AsnOrder; import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate; @@ -14,17 +16,19 @@ import com.vincent.rsf.server.manager.mapper.AsnOrderMapper; import com.vincent.rsf.server.manager.service.AsnOrderItemService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.vincent.rsf.server.system.entity.Fields; +import com.vincent.rsf.server.system.entity.FieldsItem; +import com.vincent.rsf.server.system.service.FieldsItemService; +import com.vincent.rsf.server.system.service.FieldsService; import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Objects; +import java.util.*; @Service("asnOrderItemService") public class AsnOrderItemServiceImpl extends ServiceImpl<AsnOrderItemMapper, AsnOrderItem> implements AsnOrderItemService { @@ -32,10 +36,14 @@ @Resource private AsnOrderMapper asnOrderMapper; + @Autowired + private FieldsService fieldsService; + @Autowired + private FieldsItemService fieldsItemService; + @Override @Transactional(rollbackFor = Exception.class) public R excelImport(MultipartFile file, HashMap<String, Object> hashMap) throws Exception { - ExcelImportResult<AsnOrderTemplate> result = ExcelImportUtil.importExcelMore(file.getInputStream(), MatnrsTemplate.class, ExcelUtil.getDefaultImportParams()); if (result.getList().isEmpty()) { throw new CoolException("鐗╂枡瀵煎叆澶辫触锛侊紒"); @@ -43,7 +51,6 @@ if (!Objects.isNull(hashMap.get("asnId"))) { throw new CoolException("涓诲崟ID涓虹┖锛屾棤娉曟搷浣滐紒锛�"); } - AsnOrder order = asnOrderMapper.selectOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getId, hashMap.get("asnId"))); if (Objects.isNull(order)) { throw new CoolException("ASN鍗曟嵁涓嶅瓨鍦紒锛�"); @@ -61,4 +68,31 @@ } return R.ok("鎿嶄綔鎴愬姛锛侊紒"); } + + @Override + public boolean fieldsSave(Map<String, Object> params) { + List<Fields> fields = fieldsService.list(new LambdaQueryWrapper<Fields>().eq(Fields::getStatus, 1).eq(Fields::getFlagEnable, 1)); + List<FieldsItem> fieldsItems = new ArrayList<>(); + if (!fields.isEmpty()) { + String uuid16 = CommonUtil.randomUUID16(); + for (Fields obj : fields) { + if (!Objects.isNull(params.get(obj.getFields()))) { + FieldsItem item = new FieldsItem(); + item.setUuid(uuid16) + .setValue(params.get(obj.getFields()).toString()) + .setMatnrId(Long.parseLong(params.get("matnrId").toString())) + .setFieldsId(obj.getId()); + fieldsItems.add(item); + } + } + if (!fieldsItemService.saveBatch(fieldsItems)) { + throw new CoolException("鍗曟嵁鏄庣粏鎵╁睍瀛楁淇濆瓨澶辫触锛侊紒"); + } + } + AsnOrderItem asnOrderItem = JSONObject.parseObject(JSONObject.toJSONString(params), AsnOrderItem.class); + if (!this.save(asnOrderItem)) { + throw new CoolException("鏀惰揣閫氱煡鍗曟槑缁嗕繚瀛樺け璐ワ紒锛�"); + } + return true; + } } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java index 61f0632..3e6b57d 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java @@ -1,12 +1,8 @@ package com.vincent.rsf.server.manager.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.api.entity.dto.PoItemsDto; -import com.vincent.rsf.server.api.service.ErpApiService; -import com.vincent.rsf.server.manager.entity.AsnOrderItem; -import com.vincent.rsf.server.manager.entity.Purchase; -import com.vincent.rsf.server.manager.entity.PurchaseItem; +import com.vincent.rsf.server.api.service.ReceiveMsgService; import com.vincent.rsf.server.manager.mapper.AsnOrderItemMapper; import com.vincent.rsf.server.manager.mapper.AsnOrderMapper; import com.vincent.rsf.server.manager.entity.AsnOrder; @@ -32,7 +28,7 @@ public class AsnOrderServiceImpl extends ServiceImpl<AsnOrderMapper, AsnOrder> implements AsnOrderService { @Autowired - private ErpApiService erpApiService; + private ReceiveMsgService receiveMsgService; @Resource private PurchaseMapper purchaseMapper; @@ -49,7 +45,7 @@ throw new CoolException("ASN鍗曟嵁涓嶈兘涓虹┖锛侊紒"); } List<PoItemsDto> items = purchaseMapper.poList(asnIds); - if (erpApiService.reportInspectNotify(items)) { + if (receiveMsgService.reportInspectNotify(items)) { return true; } else { return false; diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java index 6fdeb55..49bc53d 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java @@ -18,4 +18,9 @@ * ASN閫氱煡鍗曠敓鎴愮紪鐮佽鍒� */ public final static String SYS_ASN_ORDER = "sys_ans_order"; + + /** + * 鏀惰揣鎵规瑙勫垯 + */ + public final static String SYS_RECEIPT_BATCH = "sys_receipt_batch"; } diff --git a/rsf-server/src/main/resources/application-dev.yml b/rsf-server/src/main/resources/application-dev.yml index 20d38b4..cf33bf5 100644 --- a/rsf-server/src/main/resources/application-dev.yml +++ b/rsf-server/src/main/resources/application-dev.yml @@ -76,7 +76,7 @@ #绔彛鍙� port: 8080 #鎺ュ搧閾炬帴鍓嶇紑 - prePath: rsf-server + pre-path: rsf-server #鎺ュ彛鏄庣粏 api: #璐ㄦ涓婃姤鎺ュ彛 -- Gitblit v1.9.1