自动化立体仓库 - WMS系统
src/main/java/com/zy/asrs/controller/BasDevpController.java
@@ -20,10 +20,13 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.nio.charset.Charset;
import java.util.*;
@RestController
public class BasDevpController extends BaseController {
    private static final Charset SQL_SERVER_VARCHAR_CHARSET = Charset.forName("GBK");
    @Autowired
    private BasDevpService basDevpService;
@@ -91,6 +94,7 @@
    @ManagerAuth(memo = "站点添加")
    public R add(BasDevp basDevp) {
        normalizeInboundPriority(basDevp, null);
        normalizeAndValidateForSave(basDevp);
        basDevp.setModiUser(getUserId());
        basDevp.setModiTime(new Date());
        basDevp.setAppeUser(getUserId());
@@ -110,6 +114,7 @@
            return R.error("站点不存在");
        }
        normalizeInboundPriority(basDevp, existing);
        normalizeAndValidateForSave(basDevp);
        basDevp.setModiUser(getUserId());
        basDevp.setModiTime(new Date());
        basDevpService.updateById(basDevp);
@@ -166,6 +171,57 @@
        return R.ok();
    }
    private void normalizeAndValidateForSave(BasDevp basDevp) {
        if (basDevp == null) {
            return;
        }
        basDevp.setInEnable(normalizeYn("可入", basDevp.getInEnable()));
        basDevp.setOutEnable(normalizeYn("可出", basDevp.getOutEnable()));
        basDevp.setAutoing(normalizeYn("自动", basDevp.getAutoing()));
        basDevp.setLoading(normalizeYn("有物", basDevp.getLoading()));
        basDevp.setCanining(normalizeYn("能入", basDevp.getCanining()));
        basDevp.setCanouting(normalizeYn("能出", basDevp.getCanouting()));
        basDevp.setFronting(normalizeYn("fronting", basDevp.getFronting()));
        basDevp.setRearing(normalizeYn("rearing", basDevp.getRearing()));
        basDevp.setUping(normalizeYn("uping", basDevp.getUping()));
        basDevp.setDowning(normalizeYn("downing", basDevp.getDowning()));
        basDevp.setInreq1(normalizeYn("需求1", basDevp.getInreq1()));
        basDevp.setInreq2(normalizeYn("需求2", basDevp.getInreq2()));
        basDevp.setInOk(normalizeYn("in_ok", basDevp.getInOk()));
        basDevp.setOutOk(normalizeYn("out_ok", basDevp.getOutOk()));
        validateVarcharLength("设备描述", basDevp.getDecDesc(), 30);
        validateVarcharLength("备注", basDevp.getDevMk(), 1);
        validateVarcharLength("条形码", basDevp.getBarcode(), 255);
        validateVarcharLength("绑定库区", basDevp.getArea(), 255);
        validateVarcharLength("第一优先池", basDevp.getInFirstCrnCsv(), 255);
        validateVarcharLength("第二优先池", basDevp.getInSecondCrnCsv(), 255);
    }
    private String normalizeYn(String label, String value) {
        if (Cools.isEmpty(value)) {
            return null;
        }
        String normalized = value.trim().toUpperCase(Locale.ROOT);
        if ("Y".equals(normalized) || "1".equals(normalized) || "TRUE".equals(normalized) || "YES".equals(normalized)) {
            return "Y";
        }
        if ("N".equals(normalized) || "0".equals(normalized) || "FALSE".equals(normalized) || "NO".equals(normalized) || "OFF".equals(normalized) || "ON".equals(normalized)) {
            return "N";
        }
        throw new CoolException(label + "只能为Y或N");
    }
    private void validateVarcharLength(String label, String value, int maxBytes) {
        if (value == null) {
            return;
        }
        int bytes = value.getBytes(SQL_SERVER_VARCHAR_CHARSET).length;
        if (bytes > maxBytes) {
            throw new CoolException(label + "长度不能超过" + maxBytes + "字节");
        }
    }
    private void normalizeInboundPriority(BasDevp basDevp, BasDevp existing) {
        if (basDevp == null) {
            return;