From dcc2fc4faf3150480c83c1c818d6a945eb6ed007 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期二, 17 三月 2026 14:13:01 +0800
Subject: [PATCH] #
---
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/LocController.java | 202 +++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 188 insertions(+), 14 deletions(-)
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/LocController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/LocController.java
index 4c307dc..cde1aa9 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/LocController.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/LocController.java
@@ -2,21 +2,21 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zy.acs.common.constant.CommonConstant;
import com.zy.acs.common.utils.Utils;
import com.zy.acs.framework.common.Cools;
import com.zy.acs.framework.common.R;
import com.zy.acs.framework.exception.CoolException;
-import com.zy.acs.manager.common.utils.ExcelUtil;
import com.zy.acs.manager.common.annotation.OperationLog;
import com.zy.acs.manager.common.domain.BaseParam;
import com.zy.acs.manager.common.domain.KeyValVo;
import com.zy.acs.manager.common.domain.PageParam;
+import com.zy.acs.manager.common.utils.ExcelUtil;
import com.zy.acs.manager.manager.controller.param.LocInitParam;
-import com.zy.acs.manager.manager.entity.Loc;
-import com.zy.acs.manager.manager.entity.Zone;
+import com.zy.acs.manager.manager.entity.*;
import com.zy.acs.manager.manager.enums.LocStsType;
-import com.zy.acs.manager.manager.service.LocService;
-import com.zy.acs.manager.manager.service.ZoneService;
+import com.zy.acs.manager.manager.enums.StatusType;
+import com.zy.acs.manager.manager.service.*;
import com.zy.acs.manager.system.controller.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -24,6 +24,7 @@
import javax.servlet.http.HttpServletResponse;
import java.util.*;
+import java.util.stream.Collectors;
@RestController
@RequestMapping("/api")
@@ -33,13 +34,19 @@
private LocService locService;
@Autowired
private ZoneService zoneService;
+ @Autowired
+ private CodeService codeService;
+ @Autowired
+ private LocStsService locStsService;
+ @Autowired
+ private LocTypeService locTypeService;
@PreAuthorize("hasAuthority('manager:loc:list')")
@PostMapping("/loc/page")
public R page(@RequestBody Map<String, Object> map) {
BaseParam baseParam = buildParam(map, BaseParam.class);
PageParam<Loc, BaseParam> pageParam = new PageParam<>(baseParam, Loc.class);
- return R.ok().add(locService.page(pageParam, pageParam.buildWrapper(true)));
+ return R.ok().add(locService.page(pageParam, pageParam.buildWrapper(false)));
}
@PreAuthorize("hasAuthority('manager:loc:list')")
@@ -86,6 +93,22 @@
return R.ok("Update Success").add(loc);
}
+ @PreAuthorize("hasAuthority('manager:loc:update')")
+ @OperationLog("Update Loc")
+ @PostMapping("/loc/update/many")
+ public R updateMany(@RequestBody List<Loc> locList) {
+ if (!Cools.isEmpty(locList)) {
+ for (Loc loc : locList) {
+ loc.setUpdateBy(getLoginUserId());
+ loc.setUpdateTime(new Date());
+ if (!locService.updateById(loc)) {
+ return R.error("Update Fail");
+ }
+ }
+ }
+ return R.ok("Update Success").add(locList.stream().map(Loc::getId).collect(Collectors.toList()));
+ }
+
@PreAuthorize("hasAuthority('manager:loc:remove')")
@OperationLog("Delete Loc")
@PostMapping("/loc/remove/{ids}")
@@ -108,12 +131,6 @@
item -> vos.add(new KeyValVo(item.getId(), item.getLocNo()))
);
return R.ok().add(vos);
- }
-
- @PreAuthorize("hasAuthority('manager:loc:list')")
- @PostMapping("/loc/export")
- public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
- ExcelUtil.build(ExcelUtil.create(locService.list(), Loc.class), response);
}
@PreAuthorize("hasAuthority('manager:loc:save')")
@@ -141,13 +158,13 @@
locNo, // 搴撲綅缂栧彿
null, // 鍚嶇О
null, // 鏉$爜
- LocStsType.IDLE.val(), // 搴撲綅鐘舵��
+ param.getLocSts(), // 搴撲綅鐘舵��
offset, // 鍋忕Щ閲�
r, // 鎺�
b, // 鍒�
l, // 灞�
null, // 鎵樼洏鐮�
- null, // 搴撲綅绫诲瀷
+ param.getLocType(), // 搴撲綅绫诲瀷
null, // 鐘舵�乕闈炵┖]
null, // 鏄惁鍒犻櫎[闈炵┖]
null, // 绉熸埛
@@ -157,6 +174,7 @@
null, // 淇敼鏃堕棿
null // 澶囨敞
);
+ loc.setCompDirect(param.getCompDirect());
if (locService.count(new LambdaQueryWrapper<Loc>().eq(Loc::getLocNo, locNo)) > 0) {
throw new CoolException(locNo + " location has exist !");
}
@@ -169,4 +187,160 @@
return R.ok("initialize success");
}
+ @PreAuthorize("hasAuthority('manager:loc:list')")
+ @PostMapping("/loc/export")
+ public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
+ ExcelUtil.build(ExcelUtil.create(locService.list(), Loc.class), response);
+ }
+
+ @PreAuthorize("hasAuthority('manager:loc:save')")
+ @PostMapping("/loc/import")
+ public R importBatch(@RequestBody List<Map<String, Object>> rows) {
+ if (Cools.isEmpty(rows)) {
+ return R.ok();
+ }
+ Date now = new Date();
+ Long userId = getLoginUserId();
+ for (Map<String, Object> row : rows) {
+ Zone zone = resolveZone(readCell(row, "zone"));
+ Integer rowNo = parseInteger(row.get("row"), "row", true);
+ Integer bayNo = parseInteger(row.get("bay"), "bay", true);
+ Integer levNo = parseInteger(row.get("lev"), "lev", true);
+ String locNo = buildLocNo(zone, rowNo, bayNo, levNo);
+ if (locService.selectByLocNo(locNo) != null) {
+ continue;
+ }
+
+ Long locStsId = resolveLocStsId(readCell(row, "loc_sts"));
+ Long locTypeId = resolveLocTypeId(readCell(row, "loc_type"));
+ Long codeId = resolveCodeId(readCell(row, "code"));
+ Integer compDirect = parseInteger(row.get("comp_direct"), "comp_direct", false);
+ Double offset = parseDouble(row.get("offset"), "offset");
+
+ Loc loc = new Loc();
+ loc.setZoneId(zone.getId());
+ loc.setUuid(locNo);
+ loc.setLocNo(locNo);
+ loc.setRow(rowNo);
+ loc.setBay(bayNo);
+ loc.setLev(levNo);
+
+ loc.setLocSts(locStsId);
+ loc.setLocType(locTypeId);
+ loc.setCode(codeId);
+ loc.setCompDirect(compDirect);
+ loc.setOffset(offset);
+
+ loc.setStatus(StatusType.ENABLE.val);
+ loc.setCreateBy(userId);
+ loc.setCreateTime(now);
+ loc.setUpdateBy(userId);
+ loc.setUpdateTime(now);
+
+ if (!locService.save(loc)) {
+ throw new CoolException(locNo + " save fail !");
+ }
+ }
+ return R.ok();
+ }
+
+ private Zone resolveZone(String identifier) {
+ if (Cools.isEmpty(identifier)) {
+ throw new CoolException("zone is required");
+ }
+ return zoneService.selectByUuid(identifier);
+ }
+
+ private Long resolveLocStsId(String identifier) {
+ if (Cools.isEmpty(identifier)) {
+ throw new CoolException("loc_sts is required");
+ }
+ LocStsType locStsType = LocStsType.valueOf(identifier);
+ if (locStsType == null) {
+ throw new CoolException("loc_sts " + identifier + " not found");
+ }
+ return locStsType.val();
+ }
+
+ private Long resolveLocTypeId(String identifier) {
+ if (Cools.isEmpty(identifier)) {
+ return null;
+ }
+ LocType locType = locTypeService.getOne(new LambdaQueryWrapper<LocType>().eq(LocType::getUuid, identifier), false);
+ if (locType == null) {
+ throw new CoolException("loc_type " + identifier + " not found");
+ }
+ return locType.getId();
+ }
+
+ private Long resolveCodeId(String data) {
+ if (Cools.isEmpty(data)) {
+ return null;
+ }
+ String codeData = Utils.zeroFill(data, CommonConstant.QR_CODE_LEN);
+ Code code = codeService.getCacheByData(codeData);
+ if (code == null) {
+ throw new CoolException("code " + data + " not exist");
+ }
+ return code.getId();
+ }
+
+ private Integer parseInteger(Object value, String field, boolean required) {
+ if (value instanceof Number) {
+ return ((Number) value).intValue();
+ }
+ String text = value == null ? null : String.valueOf(value).trim();
+ if (Cools.isEmpty(text)) {
+ if (required) {
+ throw new CoolException(field + " is required");
+ }
+ return null;
+ }
+ try {
+ return Double.valueOf(text).intValue();
+ } catch (NumberFormatException ex) {
+ throw new CoolException(field + " format error: " + text);
+ }
+ }
+
+ private Double parseDouble(Object value, String field) {
+ if (value instanceof Number) {
+ return ((Number) value).doubleValue();
+ }
+ String text = value == null ? null : String.valueOf(value).trim();
+ if (Cools.isEmpty(text)) {
+ return null;
+ }
+ try {
+ return Double.valueOf(text);
+ } catch (NumberFormatException ex) {
+ throw new CoolException(field + " format error: " + text);
+ }
+ }
+
+ private String readCell(Map<String, Object> row, String key) {
+ if (row == null) {
+ return null;
+ }
+ Object value = row.get(key);
+ if (value == null) {
+ return null;
+ }
+ String text = String.valueOf(value).trim();
+ return Cools.isEmpty(text) ? null : text;
+ }
+
+ private String buildLocNo(Zone zone, Integer row, Integer bay, Integer lev) {
+ if (zone == null || row == null || bay == null || lev == null) {
+ throw new CoolException("zone/row/bay/lev cannot be null");
+ }
+ if (Cools.isEmpty(zone.getUuid())) {
+ throw new CoolException("zone uuid is empty");
+ }
+ return Utils.zeroFill(zone.getUuid(), 2)
+ + String.format("%03d", row)
+ + String.format("%03d", bay)
+ + String.format("%02d", lev);
+ }
+
}
--
Gitblit v1.9.1