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.*;
|
import com.core.exception.CoolException;
|
import com.zy.asrs.entity.*;
|
import com.zy.asrs.entity.param.*;
|
import com.zy.asrs.service.LocDetlService;
|
import com.zy.asrs.service.OpenService;
|
import com.zy.asrs.service.WaitPakinService;
|
import com.zy.asrs.service.WrkDetlService;
|
import com.zy.common.model.DetlDto;
|
import com.zy.common.model.LocDetlDto;
|
import com.zy.common.model.enums.WorkNoType;
|
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.naming.ldap.HasControls;
|
import javax.servlet.http.HttpServletRequest;
|
import java.util.*;
|
|
/**
|
* Created by vincent on 2022/4/8
|
*/
|
@Slf4j
|
@RestController
|
@RequestMapping("open/asrs")
|
public class OpenController extends BaseController {
|
|
private static final boolean auth = true;
|
private static final String sign_arm_order = "|s|LABEL_";
|
private static final String sign_arm_sku = "|sku|LABEL_";
|
public static final ArrayList<String> APP_KEY_LIST = new ArrayList<String>() {{
|
add("ea1f0459efc02a79f046f982767939ae");
|
}};
|
|
@Autowired
|
private OpenService openService;
|
@Autowired
|
private LocDetlService locDetlService;
|
@Autowired
|
private WaitPakinService waitPakinService;
|
@Autowired
|
private WrkDetlService wrkDetlService;
|
|
// @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("/order/pakin/new/package/v1")
|
// @AppAuth(memo = "打包上线接口")
|
// public synchronized R pakinOrderPackage(@RequestHeader(required = false) String appkey,
|
// @RequestBody(required = false) PackParam param,
|
// HttpServletRequest request) {
|
// auth(appkey, param, request);
|
// if (Cools.isEmpty(param)) {
|
// return R.parse(BaseRes.PARAM);
|
// }
|
// openService.packageUp(param);
|
// return R.ok();
|
// }
|
|
/**
|
* 添加入库单
|
*/
|
@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.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("{}接口被访问;appkey:{};请求数据:{}", "open/sensorType/list/auth/v1", 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无误!");
|
}
|
}
|
|
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<DetlDto> 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));
|
}
|
|
|
/**
|
* 分拣线上报接收
|
*/
|
@PostMapping("/arm/task/v1")
|
@AppAuth(memo = "分拣线上报接收")
|
public synchronized R TaskArmReport(@RequestHeader(required = false) String appkey,
|
@RequestBody TaskArmReportParam 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.getSku())) {
|
return R.error("客人型号[sku]不能为空");
|
}
|
if (Cools.isEmpty(param.getPo())) {
|
return R.error("客人PO[po]不能为空");
|
}
|
if (Cools.isEmpty(param.getUpc())) {
|
return R.error("UPC[upc]不能为空");
|
}
|
if (Cools.isEmpty(param.getItem())) {
|
return R.error("UPC[item]不能为空");
|
}
|
if (Cools.isEmpty(param.getSupplier())) {
|
return R.error("货源[supplier]不能为空");
|
}
|
if (Cools.isEmpty(param.getStaNo())) {
|
return R.error("分拣点位[staNo]不能为空");
|
}
|
if (Cools.isEmpty(param.getBindingTags())) {
|
return R.error("分拣绑定类别[bindingTags]不能为空");
|
}
|
try{
|
openService.taskArmReport(param);
|
} catch (Exception e){
|
return R.error(e.getMessage()).add(e.getMessage());
|
}
|
return R.ok();
|
}
|
|
|
/**
|
* 单码完成
|
*/
|
@PostMapping("/arm/task/cycle_result")
|
@AppAuth(memo = "单码完成")
|
public synchronized R TaskArmCycleResult(@RequestHeader(required = false) String appkey,
|
@RequestBody TaskArmCycleResultParam param,
|
HttpServletRequest request) {
|
auth(appkey, param, request);
|
if (Cools.isEmpty(param)) {
|
return R.parse(BaseRes.PARAM);
|
}
|
if (Cools.isEmpty(param.getArm_no())) {
|
return R.error("机械臂编号[Arm_no]不能为空");
|
}
|
if (Cools.isEmpty(param.getOrder_id())) {
|
return R.error("单据编号[order_id]不能为空");
|
}
|
if (Cools.isEmpty(param.getPick_num())) {
|
return R.error("客人型号[pick_num]不能为空");
|
}
|
try{
|
param.OrderIdTwo(sign_arm_order,sign_arm_sku);
|
} catch (Exception e){
|
return R.error("单据编号[order_id]以 "+sign_arm_sku+" 与 "+sign_arm_order+" 作为拆分标记拆分失败!!!");
|
}
|
|
openService.taskArmCycleResult(param);
|
return R.ok();
|
}
|
|
|
/**
|
* 托盘完成
|
*/
|
@PostMapping("/arm/task/workspace_status")
|
@AppAuth(memo = "托盘完成")
|
public synchronized R TaskArmWorkspaceStatus(@RequestHeader(required = false) String appkey,
|
@RequestBody TaskArmWorkspaceStatusParam param,
|
HttpServletRequest request) {
|
auth(appkey, param, request);
|
if (Cools.isEmpty(param)) {
|
return R.parse(BaseRes.PARAM);
|
}
|
if (Cools.isEmpty(param.getArm_no())) {
|
return R.error("机械臂编号[Arm_no]不能为空");
|
}
|
if (Cools.isEmpty(param.getId())) {
|
return R.error("单据编号[order_id]不能为空");
|
}
|
if (Integer.parseInt(param.getId())<2){
|
return R.ok().add("来料口空间复位成功");
|
}
|
if (Cools.isEmpty(param.getType())) {
|
return R.error("客人型号[pick_num]不能为空");
|
}
|
if (Cools.isEmpty(param.getStatus())) {
|
return R.error("客人型号[pick_num]不能为空");
|
}
|
|
openService.taskArmWorkspaceStatus(param);
|
return R.ok();
|
}
|
|
|
/**
|
* 托盘就绪状态查询
|
*/
|
@PostMapping("/arm/task/loc_status")
|
@AppAuth(memo = "托盘就绪状态查询")
|
public synchronized R TaskArmLocStatus(@RequestHeader(required = false) String appkey,
|
@RequestBody ArmOKParam param,
|
HttpServletRequest request) {
|
auth(appkey, param, request);
|
if (Cools.isEmpty(param)) {
|
return R.parse(BaseRes.PARAM);
|
}
|
if (Cools.isEmpty(param.getArmNo())) {
|
return R.error("机械臂编号[armNo]不能为空");
|
}
|
if (Cools.isEmpty(param.getStaNo())) {
|
return R.error("站点编号[staNo]不能为空");
|
}
|
|
boolean taskArmLocStatus = openService.TaskArmLocStatus(param);
|
if (taskArmLocStatus){
|
return new R(200,"OK").add(true);
|
}
|
return R.error("不符合").add(false);
|
}
|
|
|
/**
|
* 异常上报
|
*/
|
@PostMapping("/armAbnormalOperation")
|
@AppAuth(memo = "异常上报")
|
public synchronized R ArmAbnormalOperation(@RequestHeader(required = false) String appkey,
|
@RequestBody TaskArmErrorParam param,
|
HttpServletRequest request) {
|
auth(appkey, param, request);
|
if (Cools.isEmpty(param.getArm_no())) {
|
return R.error("机械臂编号[Arm_no]不能为空");
|
}
|
if (Cools.isEmpty(param)) {
|
return R.parse(BaseRes.PARAM);
|
}
|
|
return R.ok().add(param);
|
}
|
|
|
/**
|
* 订单完成上报
|
*/
|
@PostMapping("/arm/task/order_result")
|
@AppAuth(memo = "订单完成上报")
|
public synchronized R TaskArmWorkOrderStatus(@RequestHeader(required = false) String appkey,
|
@RequestBody OrderArmEndParam param,
|
HttpServletRequest request) {
|
auth(appkey, param, request);
|
if (Cools.isEmpty(param)) {
|
return R.parse(BaseRes.PARAM);
|
}
|
if (Cools.isEmpty(param.getArm_no())) {
|
return R.error("机械臂编号[Arm_no]不能为空");
|
}
|
if (Cools.isEmpty(param.getOrder_id())) {
|
return R.error("单据编号[order_id]不能为空");
|
}
|
try{
|
param.OrderIdTwo(sign_arm_order,sign_arm_sku);
|
} catch (Exception e){
|
return R.error("单据编号[order_id]以 "+sign_arm_sku+" 与 "+sign_arm_order+" 作为拆分标记拆分失败!!!");
|
}
|
if (param.getArm_no()>4){
|
openService.taskArmOrderResult(param);
|
return R.ok();
|
}
|
|
openService.taskArmWorkOrderStatus(param);
|
return R.ok();
|
}
|
|
/**********************************************************哥斯拉项目对接接口*******************************************************************/
|
|
@PostMapping("/order/matSync/default/v2")
|
// @AppAuth(memo = "商品信息同步接口")
|
public synchronized R syncMatInfoV2(@RequestBody(required = false) List<MatSyncParam.MatParam> param){
|
|
System.out.println(param);
|
if (Cools.isEmpty(param)) {
|
return R.parse(BaseRes.PARAM);
|
}
|
MatSyncParam matSyncParam = new MatSyncParam();
|
List<MatSyncParam.MatParam> objects = new ArrayList<>();
|
for (MatSyncParam.MatParam matParam : param) {
|
objects.add(matParam);
|
}
|
|
matSyncParam.matDetails = objects;
|
openService.syncMat(matSyncParam);
|
return R.ok();
|
}
|
|
/**
|
* 站点同步接口
|
* 同步站点编号
|
* 同步站点进出类型
|
* 同步站点名称
|
* 同步操作类型
|
* return
|
*/
|
@PostMapping("/station/all")
|
public synchronized R stationAll(){
|
return openService.stationAll();
|
}
|
|
/**
|
* 组托信息下发
|
* return
|
*/
|
@PostMapping("/comb/auth")
|
public synchronized R comb(@RequestBody ArrayList<MesToCombParam> param){
|
for (MesToCombParam mesToCombParam : param) {
|
// 判断是否有相同条码的数据
|
if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>().
|
eq("zpallet", mesToCombParam.getPalletId()).eq("io_status", "N")) > 0) {
|
return R.error(mesToCombParam.getPalletId()+"-该托盘码已经存在组托档中");
|
}
|
|
if (mesToCombParam.getPalletId().length() != 8) {
|
return R.error(mesToCombParam.getPalletId()+"-该托盘码不为8位");
|
}
|
// if (param.getCombMats().size()>1){
|
// throw new CoolException("不允许混料===>>" + param.getBarcode());
|
// }
|
|
int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", mesToCombParam.getPalletId()));
|
int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet", mesToCombParam.getPalletId()));
|
// int countwait = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",param.getPalletId()));
|
if (countLoc > 0 || countWrk > 0) {
|
return R.error(mesToCombParam.getPalletId()+"-工作档/库存条码数据已存在");
|
}
|
}
|
for (MesToCombParam mesToCombParam : param) {
|
openService.mesToComb(mesToCombParam);
|
}
|
|
return R.ok();
|
}
|
|
/**
|
* 出库通知单
|
*/
|
|
@PostMapping("/outOrder")
|
public synchronized R outOrder (@RequestBody ArrayList<OutTaskParam> params){
|
for (OutTaskParam outTaskParam : params) {
|
openService.outOrder(outTaskParam);
|
}
|
return R.ok();
|
}
|
|
|
|
}
|