package com.zy.asrs.controller; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.annotations.AppAuth; import com.core.common.BaseRes; import com.core.common.Cools; import com.core.common.R; import com.core.exception.CoolException; import com.zy.asrs.entity.InventoryCheckOrder; import com.zy.asrs.entity.InventoryCheckOrderDetl; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.entity.param.*; import com.zy.asrs.service.*; import com.zy.common.web.BaseController; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * Created by vincent on 2022/4/8 */ @Slf4j @RestController @RequestMapping("open/wms") public class OpenMesController extends BaseController { private static final boolean auth = true; public static final ArrayList APP_KEY_LIST = new ArrayList() {{ add("ea1f0459efc02a79f046f982767939ae"); }}; @Autowired private OpenService openService; @Autowired private ManLocDetlService manLocDetlService; @Autowired private WrkMastService wrkMastService; @Autowired private InventoryCheckOrderService inventoryCheckOrderService; @Autowired private InventoryCheckOrderDetlService inventoryCheckOrderDetlService; @PostMapping("/mat/sync/default/v1") @AppAuth(memo = "商品信息同步接口") public synchronized R syncMatInfo(@RequestHeader(required = false) String appkey, @RequestBody(required = false) MatSyncParam param, HttpServletRequest request) { auth(appkey, param, request); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } openService.syncMat(param); return R.ok(); } @PostMapping("/inventory/result") @AppAuth(memo = "盘点结果同步接口") public synchronized R inventory(@RequestHeader(required = false) String appkey, @RequestBody(required = false) CheckResult param, HttpServletRequest request) { auth(appkey, param, request); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarcode()); if (Cools.isEmpty(wrkMast)) { return R.error("无法通过托盘码找到该工作档,请检查托盘码是否正确"); } LocDetlAdjustParam adjustParam = new LocDetlAdjustParam(); adjustParam.setLocNo(wrkMast.getWrkSts() < 100 ? wrkMast.getLocNo() : wrkMast.getSourceLocNo()); List list = new ArrayList<>(); param.getDetails().forEach(elem -> { list.add(new LocDetlAdjustParam.LocDetlAdjust(elem.getMatnr(), elem.getBatch(), elem.getActulQty(), elem.getDanger())); }); manLocDetlService.adjustLocDetl2(adjustParam, getUserId()); return R.ok(); } @PostMapping("/orderSync/default/v1") @AppAuth(memo = "订单信息同步接口") public synchronized R syncOrderInfo(@RequestHeader(required = false) String appkey, @RequestBody(required = false) GTOrderParam param, HttpServletRequest request) { auth(appkey, param, request); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } return R.ok(); } /** * 添加入库单 */ @PostMapping("/order/pakin/default/v1") @AppAuth(memo = "入库单据下发") public synchronized R pakinOrderCreate(@RequestHeader(required = false) String appkey, @RequestBody OpenOrderPakinParam param, HttpServletRequest request) { auth(appkey, param, request); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } if (Cools.isEmpty(param.getOrderNo())) { return R.error("单据编号[orderNo]不能为空"); } if (Cools.isEmpty(param.getOrderType())) { return R.error("单据类型[orderType]不能为空"); } if (Cools.isEmpty(param.getDetails())) { return R.error("单据明细[orderDetails]不能为空"); } openService.pakinOrderCreate(param); return R.ok(); } /** * 添加出库单 */ @PostMapping("/order/pakout/default/v1") @AppAuth(memo = "添加订单出库") public synchronized R pakoutOrderCreate(@RequestHeader(required = false) String appkey, @RequestBody OpenOrderPakoutParam param, HttpServletRequest request) { auth(appkey, param, request); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } if (Cools.isEmpty(param.getLgort())) { return R.error("单据编号[lgort]不能为空"); } if (!param.getLgort().equals("5006")) { return R.ok(); } if (Cools.isEmpty(param.getOrderNo())) { return R.error("单据编号[orderNo]不能为空"); } if (Cools.isEmpty(param.getOrderType())) { return R.error("单据类型[orderType]不能为空"); } if (Cools.isEmpty(param.getDetails())) { return R.error("单据明细[orderDetails]不能为空"); } openService.pakoutOrderCreate(param); return R.ok(); } /** * 添加盘点单 */ @PostMapping("/inventory/trigger/v1") @AppAuth(memo = "添加盘点单") public synchronized R check(@RequestHeader(required = false) String appkey, @RequestBody CheckOrderParam param, HttpServletRequest request) { auth(appkey, param, request); String orderNo = param.getOrderNo(); long time = new Date().getTime(); if (Cools.isEmpty(orderNo)) { switch (param.getArea()) { case "堆垛机": orderNo = "DDJ" + time; break; case "四向库": orderNo = "SXK" + time; break; case "CTU": orderNo = "CTU" + time; break; } param.setOrderNo(orderNo); } int count = inventoryCheckOrderService.selectCount(new EntityWrapper().eq("order_no", orderNo)); if (count > 0) { return R.parse("单据编号已经存在:" + orderNo); } InventoryCheckOrder checkOrder = new InventoryCheckOrder(); checkOrder.setOrderNo(orderNo); checkOrder.setCreateBy(getUserId().toString()); checkOrder.setCreateTime(new Date()); checkOrder.setStatus("1"); param.getDetails().forEach(elem -> { checkOrder.setArea(param.getArea()); InventoryCheckOrderDetl detail = new InventoryCheckOrderDetl(); detail.setMatnr(elem.getMatnr()); detail.setBatch(elem.getBatch()); inventoryCheckOrderDetlService.insert(detail); }); inventoryCheckOrderService.insert(checkOrder); return R.ok(); } private void auth(String appkey, Object obj, HttpServletRequest request) { log.info("{}接口被访问;appkey:{};请求数据:{}", request.getRequestURI(), appkey, JSON.toJSONString(obj)); request.setAttribute("cache", obj); if (!auth) { return; } if (Cools.isEmpty(appkey)) { throw new CoolException("认证失败,请确认appkey无误!"); } if (!APP_KEY_LIST.contains(appkey)) { throw new CoolException("认证失败,请确认appkey无误!"); } } }