From 9fe1ec3afe8696c628d076d1f76686c4efc3012e Mon Sep 17 00:00:00 2001
From: zc <zyzc>
Date: 星期二, 21 十月 2025 10:49:55 +0800
Subject: [PATCH] 容器初始化功能优化
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderServiceImpl.java | 373 +++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 349 insertions(+), 24 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderServiceImpl.java
index a481d1f..6b434a1 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderServiceImpl.java
@@ -8,34 +8,45 @@
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.common.utils.ExcelUtil;
-import com.vincent.rsf.server.manager.entity.AsnOrder;
-import com.vincent.rsf.server.manager.entity.AsnOrderItem;
-import com.vincent.rsf.server.manager.entity.Matnr;
+import com.vincent.rsf.server.manager.controller.params.*;
+import com.vincent.rsf.server.manager.entity.*;
import com.vincent.rsf.server.manager.entity.excel.CheckOrderTemplate;
-import com.vincent.rsf.server.manager.enums.AsnExceStatus;
-import com.vincent.rsf.server.manager.enums.OrderType;
-import com.vincent.rsf.server.manager.enums.OrderWorkType;
+import com.vincent.rsf.server.manager.enums.*;
import com.vincent.rsf.server.manager.mapper.CheckOrderMapper;
-import com.vincent.rsf.server.manager.service.CheckOrderItemService;
-import com.vincent.rsf.server.manager.service.CheckOrderService;
-import com.vincent.rsf.server.manager.service.MatnrService;
+import com.vincent.rsf.server.manager.service.*;
+import com.vincent.rsf.server.system.constant.SerialRuleCode;
+import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import org.apache.commons.lang3.StringUtils;
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 java.text.ParseException;
+import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@Service("checkOrderService")
-public class CheckOrderServiceImpl extends ServiceImpl<CheckOrderMapper, AsnOrder> implements CheckOrderService {
+public class CheckOrderServiceImpl extends ServiceImpl<CheckOrderMapper, WkOrder> implements CheckOrderService {
@Autowired
private MatnrService matnrService;
-
@Autowired
private CheckOrderItemService checkOrderItemService;
+ @Autowired
+ private AsnOrderItemService asnOrderItemService;
+ @Autowired
+ private DeviceSiteService deviceSiteService;
+ @Autowired
+ private LocItemService locItemService;
+ @Autowired
+ private TaskService taskService;
+ @Autowired
+ private LocServiceImpl locService;
+ @Autowired
+ private TaskItemServiceImpl taskItemService;
+ @Autowired
+ private CheckOrderService checkOrderService;
/**
* @author Ryan
@@ -59,30 +70,38 @@
Map<String, List<CheckOrderTemplate>> listMap = resultList.stream().collect(Collectors.groupingBy(CheckOrderTemplate::getCode));
for (String key : listMap.keySet()) {
CheckOrderTemplate template = listMap.get(key).stream().findFirst().get();
- AsnOrder asnOrder = this.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, template.getCode()));
- if (!Objects.isNull(asnOrder)) {
+ WkOrder wkOrder = this.getOne(new LambdaQueryWrapper<WkOrder>().eq(WkOrder::getCode, template.getCode()));
+ if (!Objects.isNull(wkOrder)) {
continue;
}
- AsnOrder order = new AsnOrder();
+ WkOrder order = new WkOrder();
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+ Date arrTime = null;
+ try {
+ arrTime = dateFormat.parse(template.getArrTime());
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
order.setCode(template.getCode())
+ .setArrTime(arrTime)
.setMemo(template.getMemo())
.setUpdateBy(loginUserId)
.setCreateBy(loginUserId)
.setType(OrderType.getTypeVal(template.getType()))
- .setWkType(OrderWorkType.getWorkType(template.getWkType()));
+ .setWkType(CheckOrderType.getTypeVal(template.getWkType()));
if (!this.save(order)) {
throw new CoolException("鍗曟嵁淇濆瓨澶辫触锛侊紒");
}
- List<AsnOrderItem> items = new ArrayList<>();
+ List<WkOrderItem> items = new ArrayList<>();
for (CheckOrderTemplate orderTemplate : listMap.get(key)) {
- AsnOrderItem orderItem = new AsnOrderItem();
+ WkOrderItem orderItem = new WkOrderItem();
Matnr matnr = null;
if (StringUtils.isNotBlank(orderTemplate.getMatnrCode())) {
matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>()
.eq(Matnr::getCode, orderTemplate.getMatnrCode()));
}
- orderItem.setAsnId(order.getId())
- .setAsnCode(order.getCode())
+ orderItem.setOrderId(order.getId())
+ .setOrderCode(order.getCode())
.setSplrBatch(orderTemplate.getSplrBatch())
.setAnfme(Double.parseDouble(orderTemplate.getAnfme()))
.setSplrName(orderTemplate.getSplrName())
@@ -98,10 +117,10 @@
}
}
if (!items.isEmpty()) {
- double purQty = items.stream().mapToDouble(AsnOrderItem::getAnfme).sum();
- if (!this.update(new LambdaUpdateWrapper<AsnOrder>()
- .set(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val)
- .set(AsnOrder::getAnfme, purQty).eq(AsnOrder::getId, order.getId()))) {
+ double purQty = items.stream().mapToDouble(WkOrderItem::getAnfme).sum();
+ if (!this.update(new LambdaUpdateWrapper<WkOrder>()
+ .set(WkOrder::getExceStatus, CheckExceStatus.CHECK_ORDER_STATUS_UN_EXCE.val)
+ .set(WkOrder::getAnfme, purQty).eq(WkOrder::getId, order.getId()))) {
throw new CoolException("鍗曟嵁鏁伴噺淇敼澶辫触锛侊紒");
}
}
@@ -109,4 +128,310 @@
return R.ok("鎿嶄綔鎴愬姛锛侊紒");
}
+
+ /**
+ * @param
+ * @return
+ * @author Ryan
+ * @description 淇濆瓨鍑哄簱涓诲崟鍙婃槑缁�
+ * @time 2025/4/29 13:47
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public R saveCheckOrder(AsnOrderAndItemsParams params, Long loginUserId) {
+ if (Objects.isNull(params.getOrders())) {
+ throw new CoolException("涓诲崟淇℃伅涓嶈兘涓虹┖");
+ }
+ WkOrder orders = params.getOrders();
+ if (StringUtils.isBlank(orders.getWkType())) {
+ throw new CoolException("涓氬姟绫诲瀷涓嶈兘涓虹┖锛侊紒");
+ }
+
+ String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_CHECK_RULE_CODE, orders);
+ if (StringUtils.isBlank(ruleCode)) {
+ throw new CoolException("缂栫爜瑙勫垯閿欒锛氳妫�鏌ャ�孲YS_CHECK_RULE_CODE銆嶆槸鍚﹁缃纭紒锛�");
+ }
+ orders.setCode(ruleCode)
+ .setType(OrderType.ORDER_CHECK.type)
+ .setExceStatus(CheckExceStatus.CHECK_ORDER_STATUS_UN_EXCE.val)
+ .setUpdateBy(loginUserId)
+ .setCreateBy(loginUserId);
+ if (!this.save(orders)) {
+ throw new CoolException("涓诲崟淇濆瓨澶辫触锛侊紒");
+ }
+ if (params.getItems().isEmpty()) {
+ throw new CoolException("鐩樼偣鍗曟槑缁嗕笉鑳戒负绌猴紒锛�");
+ }
+ params.setOrders(orders);
+ try {
+ svaeOrUpdateOrderItem(params, loginUserId);
+ } catch (Exception e) {
+ throw new CoolException(e.getMessage());
+ }
+ return R.ok();
+ }
+
+ /**
+ * @param
+ * @return
+ * @author Ryan
+ * @description 淇敼涓诲崟鍙婃槑缁�
+ * @time 2025/4/29 13:47
+ */
+ @Override
+ public R updateOrderItem(AsnOrderAndItemsParams params, Long loginUserId) {
+ WkOrder orders = params.getOrders();
+ if (Objects.isNull(orders)) {
+ throw new CoolException("涓诲崟淇℃伅涓嶈兘涓虹┖锛侊紒");
+ }
+ if (Objects.isNull(orders.getId())) {
+ throw new CoolException("鏁版嵁閿欒锛氬崟鎹甀D涓嶈兘涓虹┖锛侊紒");
+ }
+ if (!this.updateById(orders)) {
+ throw new CoolException("涓诲崟淇敼澶辫触锛侊紒");
+ }
+ if (Objects.isNull(params.getItems()) || params.getItems().isEmpty()) {
+ throw new CoolException("鏄庣粏鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+ try {
+ svaeOrUpdateOrderItem(params, loginUserId);
+ } catch (Exception e) {
+ throw new CoolException(e.getMessage());
+ }
+ return R.ok();
+ }
+
+ /**
+ * @author Ryan
+ * @date 2025/7/16
+ * @description: 鑾峰彇鐩樼偣鍑哄叆绔欏彛
+ * @version 1.0
+ */
+ @Override
+ public R getSiteNos() {
+ List<Integer> list = Arrays.asList(TaskType.TASK_TYPE_CHECK_OUT.type, TaskType.TASK_TYPE_CHECK_IN.type);
+ List<DeviceSite> sites = deviceSiteService.list(new LambdaQueryWrapper<DeviceSite>().in(DeviceSite::getType, list).groupBy(DeviceSite::getSite));
+ return R.ok().add(sites);
+ }
+
+ /**
+ * @author Ryan
+ * @date 2025/7/16
+ * @description: 鐩樼偣鍑哄簱棰勮
+ * @version 1.0
+ */
+ @Override
+ public R genCheckPreview(OrderOutTaskParam param) {
+ List<WkOrderItem> orderItems = checkOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, param.getOrderId()));
+ if (orderItems.isEmpty()) {
+ throw new CoolException("鏁版嵁閿欒锛氱洏鐐瑰崟鏄庣粏涓嶅瓨鍦紒锛�");
+ }
+ return R.ok().add(orderItems);
+ }
+
+ /**
+ * @author Ryan
+ * @date 2025/7/16
+ * @description: 鏍规嵁鐗╂枡鐮佽幏鍙栨墍鏈夊湪搴撴槑缁�
+ * @version 1.0
+ */
+ @Override
+ public R getAllLocByMatnr(CheckLocQueryParams matnrs) {
+ if (Objects.isNull(matnrs.getMatnrCode()) && matnrs.getMatnrCode().isEmpty()) {
+ throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+ List<LocItem> locItems = locItemService.listByMatnr(matnrs);
+ if (!locItems.isEmpty()) {
+ List<Integer> list = Arrays.asList(TaskType.TASK_TYPE_CHECK_OUT.type, TaskType.TASK_TYPE_CHECK_IN.type);
+ DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
+ .in(DeviceSite::getType, list)
+ .groupBy(DeviceSite::getSite)
+ .last("limit 1"));
+ if (Objects.isNull(deviceSite)) {
+ throw new CoolException("搴撳彛涓嶄负绌猴紒锛�");
+ }
+ locItems.forEach(locItem -> {
+ locItem.setSiteNo(deviceSite.getSite());
+ });
+ }
+ return R.ok().add(locItems);
+ }
+
+ /**
+ * @author Ryan
+ * @date 2025/7/17
+ * @description: 鐢熸垚鐩樼偣浠诲姟
+ * @version 1.0
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public R genCheckOutTask(List<CheckOrderParams> checkParams, Long loginUserId) {
+ if (checkParams.isEmpty()) {
+ throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+ for (CheckOrderParams checkParam : checkParams) {
+ if (checkParam.getItems().isEmpty()) {
+ continue;
+ }
+ Map<String, List<CheckOrderItemParams>> listMap = checkParam.getItems().stream()
+ .collect(Collectors.groupingBy(CheckOrderItemParams::getBarcode));
+ listMap.keySet().forEach(key -> {
+ Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, key));
+ if (Objects.isNull(loc)) {
+ throw new CoolException("褰撳墠搴撲綅涓嶅瓨鍦紒锛�");
+ }
+ Task task1 = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, key));
+ if (!Objects.isNull(task1)) {
+ throw new CoolException("鎵樼洏浠诲姟宸插瓨鍦紒锛�");
+ }
+ List<CheckOrderItemParams> itemParams = listMap.get(key);
+ CheckOrderItemParams checkItem = itemParams.stream().findFirst().get();
+ Task task = new Task();
+ String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TASK_CODE, null);
+ if (StringUtils.isBlank(ruleCode)) {
+ throw new CoolException("浠诲姟鍙蜂笉鑳戒负绌猴紒锛�");
+ }
+ task.setOrgLoc(loc.getCode())
+ .setTaskCode(ruleCode)
+ .setTargSite(checkItem.getSiteNo())
+ .setResource(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val)
+ .setTaskType(TaskType.TASK_TYPE_CHECK_OUT.type)
+ .setTaskStatus(TaskStsType.GENERATE_OUT.id)
+ .setCreateTime(new Date())
+ .setUpdateBy(loginUserId)
+ .setUpdateTime(new Date())
+ .setCreateBy(loginUserId)
+ .setBarcode(key);
+
+ if (!taskService.save(task)) {
+ throw new CoolException("鐩樼偣浠诲姟鐢熸垚澶辫触锛侊紒");
+ }
+ List<TaskItem> items = new ArrayList<>();
+ itemParams.forEach(item -> {
+ TaskItem taskItem = new TaskItem();
+ taskItem.setTaskId(task.getId())
+ .setOrderType(OrderType.ORDER_CHECK.type)
+ .setWkType(Short.parseShort(OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.type))
+ .setAnfme(item.getAnfme())
+ .setWorkQty(0.0)
+ .setBatch(checkParam.getBatch())
+ .setMaktx(checkParam.getMaktx())
+ .setMatnrCode(checkParam.getMatnrCode())
+ .setPlatOrderCode(checkParam.getPlatOrderCode())
+ .setPlatWorkCode(checkParam.getPlatWorkCode())
+ .setUnit(checkParam.getStockUnit())
+ .setSpec(checkParam.getSpec())
+ .setModel(checkParam.getModel())
+ .setFieldsIndex(checkParam.getFieldsIndex())
+ .setMatnrId(checkParam.getMatnrId())
+ .setCreateBy(loginUserId)
+ .setSource(checkParam.getId())
+ .setSourceId(checkParam.getOrderId())
+ .setSourceCode(checkParam.getOrderCode())
+ .setCreateTime(new Date())
+ .setUpdateBy(loginUserId)
+ .setUpdateTime(new Date())
+ .setOrderItemId(checkParam.getId())
+ .setOrderId(checkParam.getOrderId())
+ .setPlatItemId(checkParam.getPlatItemId());
+ items.add(taskItem);
+
+ if (!checkOrderItemService.update(new LambdaUpdateWrapper<WkOrderItem>()
+ .eq(WkOrderItem::getId, checkParam.getId())
+ .setSql("work_qty = work_qty + " + item.getAnfme())
+ .set(WkOrderItem::getWorkQty, checkItem.getAnfme()))) {
+ throw new CoolException("鐩樼偣鏄庣粏淇敼澶辫触锛侊紒");
+ }
+ });
+ if (!taskItemService.saveBatch(items)) {
+ throw new CoolException("浠诲姟鏄庣粏淇濆瓨澶辫触锛侊紒");
+ }
+
+ loc.setUseStatus(LocStsType.LOC_STS_TYPE_R.type);
+ if (!locService.updateById(loc)) {
+ throw new CoolException("搴撲綅棰勭害鍑哄簱澶辫触锛侊紒");
+ }
+
+ });
+
+ Set<Long> checkItemIds = checkParams.stream().map(CheckOrderParams::getOrderId).collect(Collectors.toSet());
+ checkItemIds.forEach(orderId -> {
+ WkOrder order = this.getById(orderId);
+ if (Objects.isNull(order)) {
+ throw new CoolException("鏁版嵁閿欒锛氬崟鎹笉瀛樺湪锛侊紒");
+ }
+ List<WkOrderItem> orderItems = checkOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, orderId));
+ if (orderItems.isEmpty()) {
+ throw new CoolException("鏁版嵁閿欒锛氬崟鎹槑缁嗕笉瀛樺湪锛侊紒");
+ }
+ Double sum = orderItems.stream().mapToDouble(WkOrderItem::getWorkQty).sum();
+
+ if (order.getAnfme().compareTo(sum) <= 0) {
+ order.setWorkQty(sum).setExceStatus(CheckExceStatus.CHECK_ORDER_STATUS_EXCE_DONE.val);
+ } else {
+ order.setWorkQty(sum).setExceStatus(CheckExceStatus.CHECK_ORDER_STATUS_EXCE_ING.val);
+ }
+
+ if (!this.updateById(order)) {
+ throw new CoolException("鐩樼偣鍗曚俊鎭慨鏀瑰け璐ワ紒锛�");
+ }
+ });
+ }
+ return R.ok();
+ }
+
+ /**
+ * @author Ryan
+ * @date 2025/7/16
+ * @description: 鍙栨秷鐩樼偣鍗曟嵁
+ * @version 1.0
+ */
+ @Override
+ public R cancelCheckOrder(Long id) {
+ WkOrder order = this.getById(id);
+ if (Objects.isNull(order)) {
+ throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
+ }
+ if (!order.getExceStatus().equals(CheckExceStatus.CHECK_ORDER_STATUS_UN_EXCE.val)) {
+ throw new CoolException("褰撳墠鍗曟嵁涓嶅彲鎵ц鍙栨秷鎿嶄綔锛侊紒");
+ }
+
+ if (!this.removeById(id)) {
+ throw new CoolException("鐩樼偣鍗曟嵁鍒犻櫎澶辫触锛侊紒");
+ }
+
+ if (!checkOrderItemService.remove(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, id))) {
+ throw new CoolException("鐩樼偣鍗曟槑缁嗗垹闄ゅけ璐ワ紒锛�");
+ }
+ return R.ok();
+ }
+
+ /**
+ * @param
+ * @return
+ * @author Ryan
+ * @description 鏇存柊鎴栦繚瀛樻槑缁�
+ * @time 2025/4/7 13:28
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public void svaeOrUpdateOrderItem(AsnOrderAndItemsParams params, Long loginUserId) throws Exception {
+ WkOrder orders = params.getOrders();
+ params.getItems().forEach(item -> {
+ item.put("orderId", orders.getId());
+ item.put("orderCode", orders.getCode());
+ item.put("poCode", orders.getPoCode());
+ item.put("createBy", loginUserId);
+ item.put("updateBy", loginUserId);
+ if (!asnOrderItemService.fieldsSave(item, loginUserId)) {
+ throw new CoolException("鏄庣粏淇濆瓨澶辫触锛侊紒");
+ }
+ });
+ List<WkOrderItem> orderItems = checkOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>()
+ .eq(WkOrderItem::getOrderId, params.getOrders().getId()));
+ Double sum = orderItems.stream().mapToDouble(WkOrderItem::getAnfme).sum();
+ orders.setAnfme(sum);
+ if (!this.updateById(orders)) {
+ throw new CoolException("璁″垝鏀惰揣鏁伴噺淇敼澶辫触锛侊紒");
+ }
+ }
}
--
Gitblit v1.9.1