package com.zy.asrs.controller; import com.alibaba.fastjson.JSON; import com.core.annotations.AppAuth; import com.core.common.*; import com.core.exception.CoolException; import com.zy.asrs.entity.ErpOrder; import com.zy.asrs.entity.ErpOrderDetl; import com.zy.asrs.entity.param.*; import com.zy.asrs.entity.ErpMat; import com.zy.asrs.service.ErpOrderDetlService; import com.zy.asrs.service.ErpOrderService; import com.zy.asrs.service.OpenService; import com.zy.asrs.service.ErpMatService; import com.zy.common.model.DetlDto; import com.zy.common.web.BaseController; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.*; import java.util.concurrent.ConcurrentHashMap; /** * Created by vincent on 2022/4/8 */ @Slf4j @RestController @RequestMapping("open/asrs") public class OpenController 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 ErpMatService erpMatService; @Autowired private ErpOrderService erpOrderService; @Autowired private ErpOrderDetlService erpOrderDetlService; @Value("${open-asrs.auth.app-id:wms_8f7c3d126a944e3ab5c89d21f4a7c6b2}") private String openAppId; @Value("${open-asrs.auth.app-secret:D9f3A7xP1kLm8Q2tW5zH0sY6vR4bNcE7FjK3uM9pT2aL8qX6}") private String openAppSecret; @Value("${open-asrs.auth.token-valid-minutes:30}") private Integer tokenValidMinutes; private static final Map TOKEN_CACHE = new ConcurrentHashMap<>(); @PostMapping("/getToken") public synchronized R getToken(@RequestBody(required = false) Map param) { log.info("{}接口被访问;请求数据:{}", "/getToken", JSON.toJSONString(param)); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } String appId = param.get("appId"); String appSecret = param.get("appSecret"); if (Cools.isEmpty(appId)) { return R.error("参数[appId]不能为空"); } if (Cools.isEmpty(appSecret)) { return R.error("参数[appSecret]不能为空"); } if (Cools.isEmpty(openAppId) || Cools.isEmpty(openAppSecret)) { throw new CoolException("系统未配置open-asrs.auth.app-id或open-asrs.auth.app-secret"); } if (!openAppId.equals(appId) || !openAppSecret.equals(appSecret)) { throw new CoolException("认证失败,请确认appId或appSecret无误!"); } String token = UUID.randomUUID().toString().replace("-", ""); long expireAt = System.currentTimeMillis() + tokenValidMinutes * 60L * 1000L; TOKEN_CACHE.put(token, new TokenInfoParam(appId, expireAt)); Map result = new HashMap<>(); result.put("token", token); result.put("validTime", tokenValidMinutes); return R.ok().add(result); } public static boolean validToken(String authorization) { if (Cools.isEmpty(authorization)) { return false; } TokenInfoParam tokenInfo = TOKEN_CACHE.get(authorization); if (tokenInfo == null) { return false; } if (System.currentTimeMillis() > tokenInfo.getExpireAt()) { TOKEN_CACHE.remove(authorization); return false; } return true; } @PostMapping("/order/matSync/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("/erp/mat/sync") public synchronized R erpMatSync(@RequestBody(required = false) List> body, HttpServletRequest request) { auth(null, body, request); if (Cools.isEmpty(body)) { return R.parse(BaseRes.PARAM); } openService.syncErpMat(body); Map res = new HashMap<>(); res.put("result", "SUCCESS"); return R.ok().add(res); } @PostMapping("/erp/order/addPrd") public synchronized R erpOrderAddPrd(@RequestBody Object body, HttpServletRequest request) { List orders; if (body instanceof List) { orders = JSON.parseArray(JSON.toJSONString(body), OrderDto.class); } else { OrderDto dto = JSON.parseObject(JSON.toJSONString(body), OrderDto.class); orders = new ArrayList<>(); orders.add(dto); } auth(null, orders, request); if (Cools.isEmpty(orders)) { return R.parse(BaseRes.PARAM); } return R.ok().add(openService.addErpOrder(orders)); } @PostMapping("/erp/order/addQc") public synchronized R erpOrderAddQc(@RequestBody Object body, HttpServletRequest request) { List orders; if (body instanceof List) { orders = JSON.parseArray(JSON.toJSONString(body), OrderDto.class); } else { OrderDto dto = JSON.parseObject(JSON.toJSONString(body), OrderDto.class); orders = new ArrayList<>(); orders.add(dto); } auth(null, orders, request); if (Cools.isEmpty(orders)) { return R.parse(BaseRes.PARAM); } return R.ok().add(openService.addErpOrder(orders)); } @PostMapping("/erp/order/addSrm") public synchronized R erpOrderAddSrm(@RequestBody Object body, HttpServletRequest request) { List orders; if (body instanceof List) { orders = JSON.parseArray(JSON.toJSONString(body), OrderDto.class); } else { OrderDto dto = JSON.parseObject(JSON.toJSONString(body), OrderDto.class); orders = new ArrayList<>(); orders.add(dto); } auth(null, orders, request); if (Cools.isEmpty(orders)) { return R.parse(BaseRes.PARAM); } return R.ok().add(openService.addErpOrder(orders)); } @PostMapping("/MES/inventory/details") public synchronized R mesInventoryDetails(@RequestBody(required = false) Map param, HttpServletRequest request) throws IOException { auth(null, param, request); if (param == null) { param = new HashMap<>(); } return R.ok().add(openService.mesInventoryDetails(param)); } @PostMapping("/MES/inventory/summary") public synchronized R mesInventorySummary(@RequestBody(required = false) Map param, HttpServletRequest request) throws IOException { auth(null, param, request); if (param == null) { param = new HashMap<>(); } return R.ok().add(openService.mesInventorySummary(param)); } /** * 添加入库单 */ @PostMapping("/order/pakin/default/v1") 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.getOrderDetails())) { return R.error("单据明细[orderDetails]不能为空"); } openService.pakinOrderCreate(param); return R.ok(); } /** * 入库单回写 */ @PostMapping("/order/pakin/complete/default/v1") public synchronized R orderPakinComplete(@RequestHeader(required = false) String appkey, @RequestBody(required = false) OpenOrderCompleteParam param, HttpServletRequest request) { auth(appkey, param, request); return R.ok().add(openService.pakinOrderComplete(param)); } /** * 添加出库单 */ @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.getOrderDetails())) { return R.error("单据明细[orderDetails]不能为空"); } openService.pakoutOrderCreate(param); return R.ok(); } /** * 出库单回写 */ @PostMapping("/order/pakout/complete/default/v1") public synchronized R orderPakoutComplete(@RequestHeader(required = false) String appkey, @RequestBody(required = false) OpenOrderCompleteParam param, HttpServletRequest request) { auth(appkey, param, request); return R.ok().add(openService.pakoutOrderComplete(param)); } /** * 库存统计 */ @RequestMapping("/stock/default/v1") public R queryStock(@RequestHeader(required = false) String appkey, HttpServletRequest request) { auth(appkey, null, request); return R.ok().add(openService.queryStock()); } private void auth(String appkey, Object obj, HttpServletRequest request) { log.info("{}接口被访问;token:{};请求数据:{}", "open/sensorType/list/auth/v1", request.getHeader("Authorization"), JSON.toJSONString(obj)); request.setAttribute("cache", obj); if (!auth) { return; } String authorization = request.getHeader("Authorization"); if (Cools.isEmpty(authorization)) { authorization = request.getHeader("authorization"); } if (!Cools.isEmpty(authorization)) { String val = authorization.trim(); if (val.toLowerCase().startsWith("bearer")) { int idx = val.indexOf(' '); authorization = idx > -1 ? val.substring(idx + 1).trim() : ""; } else { authorization = val; } } if (!Cools.isEmpty(authorization)) { if (validToken(authorization)) { return; } throw new CoolException("认证失败,请确认Authorization无误!"); } throw new CoolException("认证失败,请确认Authorization无误!"); } public static void main(String[] args) { // 1 System.out.println("======================================"); OpenOrderPakinParam param = new OpenOrderPakinParam(); param.setOrderNo(String.valueOf(new SnowflakeIdWorker().nextId())); param.setOrderType("打包上线单"); param.setOrderTime(DateUtils.convert(new Date())); List orderDetails = new ArrayList<>(); param.setOrderDetails(orderDetails); for (int i = 0; i < 3; i++) { DetlDto detlDto = new DetlDto(); switch (i) { case 0: detlDto.setMatnr("MDH020030530"); detlDto.setBatch("500"); detlDto.setAnfme(18.0); break; case 1: detlDto.setMatnr("MDH020016416"); detlDto.setBatch("500"); detlDto.setAnfme(32.0); break; case 2: detlDto.setMatnr("LSH90152025"); detlDto.setAnfme(50.0); break; default: break; } orderDetails.add(detlDto); } System.out.println(JSON.toJSONString(param)); // 2 System.out.println("======================================"); OpenOrderCompleteParam param1 = new OpenOrderCompleteParam(); param1.setOrderNo("963001846497017856"); System.out.println(JSON.toJSONString(param1)); } }