package com.zy.asrs.wms.asrs.controller; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zy.asrs.framework.common.Cools; import com.zy.asrs.framework.common.R; import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.wms.asrs.entity.Loc; import com.zy.asrs.wms.asrs.entity.LocDetl; import com.zy.asrs.wms.asrs.entity.LocDetlField; import com.zy.asrs.wms.asrs.entity.MatField; import com.zy.asrs.wms.asrs.entity.param.GeneratePakInParam; import com.zy.asrs.wms.asrs.entity.param.LocAdjustParam; import com.zy.asrs.wms.asrs.service.*; import com.zy.asrs.wms.common.annotation.OperationLog; import com.zy.asrs.wms.system.controller.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; 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.*; @RestController @RequestMapping("/api") public class WorkController extends BaseController { @Autowired private WorkService workService; @Autowired private LocDetlService locDetlService; @Autowired private LocService locService; @Autowired private MatFieldService matFieldService; @Autowired private LocDetlFieldService locDetlFieldService; @OperationLog("生成入库任务") @PostMapping("/rpc/generatePakIn") public R generatePakIn(@RequestBody GeneratePakInParam param) { try { if (param.getTaskType() == 10) { workService.generateEmptyPakIn(param);//空托盘 }else { workService.generatePakIn(param);//满托盘 } return R.ok("添加成功"); } catch (Exception e) { return R.error(e.getMessage()); } } @OperationLog("库存调整") @PostMapping("/loc/adjust") @Transactional public R locAdjust(@RequestBody LocAdjustParam param) { if (param == null) { return R.error("参数不能为空"); } if (Cools.isEmpty(param.getLocNo())) { return R.error("库位号不能为空"); } if (param.getDetls() == null) { return R.error("库存明细不能为空"); } Loc loc = locService.getOne(new LambdaQueryWrapper().eq(Loc::getLocNo, param.getLocNo())); if (loc == null) { return R.error("库位不存在"); } //删除源库存 locDetlService.removeLocDetl(loc.getId()); List matFields = matFieldService.list(new LambdaQueryWrapper().eq(MatField::getUnique, 1)); for (Map map : param.getDetls()) { LocDetl locDetl = JSON.parseObject(JSON.toJSONString(map), LocDetl.class); HashMap uniqueFields = new HashMap<>(); for (Map.Entry entry : map.entrySet()) { for (MatField field : matFields) { if (entry.getKey().equals(field.getName())) { uniqueFields.put(entry.getKey(), entry.getValue()); } } } locDetl.setAnfme(Double.parseDouble(map.get("qty").toString())); locDetl.syncFieldMap(uniqueFields); if (locDetl.getAnfme() <= 0D) { throw new CoolException("数量不能小于0"); } locDetl.setId(null); locDetl.setLocId(loc.getId()); locDetl.setLocNo(loc.getLocNo()); boolean save = locDetlService.save(locDetl); if (!save) { throw new CoolException("库存调整失败"); } //插入库存明细字段 for (MatField matField : matFields) { LocDetlField locDetlField = new LocDetlField(); locDetlField.setDetlId(locDetl.getId()); locDetlField.setFieldId(matField.getId()); locDetlField.setName(matField.getName()); locDetlField.setValue(Optional.ofNullable(uniqueFields.get(matField.getName()).toString()).orElse("")); locDetlFieldService.save(locDetlField); } } return R.ok(); } }