package com.zy.asrs.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.core.annotations.ManagerAuth; 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.*; import com.zy.asrs.entity.param.CombParam; import com.zy.asrs.service.*; import com.zy.common.model.MobileLocDetlVo; import com.zy.common.web.BaseController; import com.zy.ints.entity.WaitMatchk; import com.zy.ints.entity.WaitMatin; import com.zy.ints.service.WaitMatchkService; import com.zy.ints.service.WaitMatinService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 移动端接口控制器 * Created by vincent on 2020/6/10 */ @RestController @RequestMapping("mobile") public class MobileController extends BaseController { @Autowired private MobileService mobileService; @Autowired private LocMastService locMastService; @Autowired private LocDetlService locDetlService; @Autowired private WrkDetlService wrkDetlService; @Autowired private WaitMatinService waitMatinService; @Autowired private WaitMatchkService waitMatchkService; @Autowired private MatCodeService matCodeService; @Autowired private WrkMastService wrkMastService; /** * 组托 */ @RequestMapping("/comb/auth") @ManagerAuth(memo = "组托") public R comb(@RequestBody CombParam combParam){ System.out.println("combParam = " + combParam); mobileService.comb(combParam, getUserId()); return R.ok(); } /** * 组托 */ @RequestMapping("/comb/form") @ManagerAuth(memo = "组托") public R combForm(@RequestParam CombParam combParam){ mobileService.comb(combParam, getUserId()); return R.ok(); } /** * 库存查询(根据物料编码和库位查询库存数量和捡料数量) * @param locNo * @param matNo * @return */ @RequestMapping("/locDetl/stockQuery") @ManagerAuth public R stockQuery(@RequestParam(required = false)String locNo, @RequestParam(required = false)String matNo){ if (!Cools.isEmpty(locNo)) { LocMast locMast = locMastService.selectById(locNo); if (null == locMast || !"F".equals(locMast.getLocSts())) { return R.parse(BaseRes.EMPTY); } List locDetls = locDetlService.selectList(new EntityWrapper() .eq("loc_no", locNo).orderBy("appe_time", false)); List res = new ArrayList<>(); locDetls.forEach(locDetl -> { MobileLocDetlVo vo = new MobileLocDetlVo(); List wrkDetlsList = wrkDetlService.queryWrkDetl(locDetl.getMatNo(), locDetl.getLocNo()); final Double[] pickNum = {0.0}; wrkDetlsList.forEach(item -> { pickNum[0] = pickNum[0] + item.getQty(); }); vo.setPickNum(pickNum[0]); vo.setLocNo(locDetl.getLocNo()); vo.setMatNo(locDetl.getMatNo()); vo.setMatName(locDetl.getMatName()); vo.setCount(locDetl.getQty()); res.add(vo); }); return R.ok().add(res); } if (!Cools.isEmpty(matNo)) { List locDetls = locDetlService.selectList(new EntityWrapper() .eq("mat_no", matNo).orderBy("appe_time", false)); List res = new ArrayList<>(); locDetls.forEach(locDetl -> { MobileLocDetlVo vo = new MobileLocDetlVo(); List wrkDetlsList = wrkDetlService.queryWrkDetl(locDetl.getMatNo(), locDetl.getLocNo()); final Double[] pickNum = {0.0}; wrkDetlsList.forEach(item -> { pickNum[0] = pickNum[0] + item.getQty(); }); vo.setPickNum(pickNum[0]); vo.setLocNo(locDetl.getLocNo()); vo.setMatNo(locDetl.getMatNo()); vo.setMatName(locDetl.getMatName()); vo.setCount(locDetl.getQty()); res.add(vo); }); return R.ok().add(res); } return R.parse(BaseRes.PARAM); } // 拣料检索托盘信息 @RequestMapping("/piking/auth") @ManagerAuth public R pikingAuth(String barcode) { WrkMast wrkMast = wrkMastService.selectByBarcode(barcode); if (Cools.isEmpty(wrkMast)) { throw new CoolException(barcode + "暂无工作档"); } if (wrkMast.getIoType() != 103 && wrkMast.getIoType() != 107){ throw new CoolException(barcode + "不为拣料/盘点出库"); } List wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo()); return R.ok().add(wrkDetls); } /** * 根据库位号查找库存明细 */ @RequestMapping("/locDetl") @ManagerAuth public R getLocDetl(@RequestParam(required = false)String locNo, @RequestParam(required = false)String matNo){ if (!Cools.isEmpty(locNo)) { LocMast locMast = locMastService.selectById(locNo); if (null == locMast || !"F".equals(locMast.getLocSts())) { return R.parse(BaseRes.EMPTY); } List locDetls = locDetlService.selectList(new EntityWrapper() .eq("loc_no", locNo).orderBy("appe_time", false)); List res = new ArrayList<>(); locDetls.forEach(locDetl -> { MobileLocDetlVo vo = new MobileLocDetlVo(); vo.setLocNo(locDetl.getLocNo()); vo.setMatNo(locDetl.getMatNo()); vo.setMatName(locDetl.getMatName()); vo.setCount(locDetl.getQty()); res.add(vo); }); return R.ok().add(res); } if (!Cools.isEmpty(matNo)) { List locDetls = locDetlService.selectList(new EntityWrapper() .eq("mat_no", matNo).orderBy("appe_time", false)); List res = new ArrayList<>(); locDetls.forEach(locDetl -> { MobileLocDetlVo vo = new MobileLocDetlVo(); vo.setLocNo(locDetl.getLocNo()); vo.setMatNo(locDetl.getMatNo()); vo.setMatName(locDetl.getMatName()); vo.setCount(locDetl.getQty()); res.add(vo); }); return R.ok().add(res); } return R.parse(BaseRes.PARAM); } /** * 根据通知单查询明细 */ @RequestMapping("/bill/query/auth") @ManagerAuth(memo = "根据通知单查询明细") public R billQuery(@RequestParam String billNo){ List waitMatins = waitMatinService.selectList(new EntityWrapper().eq("bill_no", billNo).last("and qty > in_qty")); List vos = new ArrayList<>(); if (!Cools.isEmpty(waitMatins)) { for (WaitMatin waitMatin : waitMatins) { CombBillQueryVo vo = new CombBillQueryVo(); vo.setMatNo(waitMatin.getMatNo()); vo.setMatName(waitMatin.getMatName()); vo.setCount(waitMatin.getQty()-waitMatin.getInQty()); vo.setBillNo(waitMatin.getBillNo()); vo.setSeqNo(waitMatin.getSeqNo()); vo.setUnit(waitMatin.getUnit()); vo.setSpecs(waitMatin.getSpecs()); vo.setSize(waitMatin.getSize()); vo.setColor(waitMatin.getColor()); vos.add(vo); } } return R.ok().add(vos); } /** * PDA盘点根据出库口查询对应物料信息 */ @RequestMapping("/check/queryMatFromDevNo") public R queryMatFromDevNo(Integer devNo) { List list = wrkDetlService.queryMatFromDevNo(devNo); return R.ok().add(list); } /** * 根据PDA盘点数量,更新盘点通知档 * @param param * @return */ @RequestMapping("/stock/check") @Transactional @ManagerAuth public R erpStockCheck(@RequestBody String param) { Boolean flag = false; JSONObject jsonObject = JSONObject.parseObject(param); String checkListStr = jsonObject.getString("checkList"); List checkList = JSONArray.parseArray(checkListStr, WaitMatchk.class); Long userId = 9527L; //getUserId();//9527L; int seq = 0; Date now = new Date(); for (Integer i = 0; i < checkList.size(); i++) { String locNo = checkList.get(i).getLocNo(); String matNo = checkList.get(i).getMatNo(); Double checkQty = checkList.get(i).getCheckQty(); Wrapper wrapper = new EntityWrapper().eq("loc_no",locNo).eq("mat_no",matNo); WaitMatchk waitMatchk0 = waitMatchkService.selectOne(wrapper); if(null != waitMatchk0){ waitMatchk0.setCheckQty(checkQty); flag = waitMatchkService.update(waitMatchk0,wrapper); if(!flag){ throw new CoolException("更新盘点通知档失败"); } } else { MatCode matCode = matCodeService.selectOne(new EntityWrapper().eq("mat_no",matNo)); WaitMatchk waitMatchk1 = waitMatchkService.selectOne(new EntityWrapper().eq("loc_no",locNo).orderBy("seq_no",false)); if(null != matCode) { WaitMatchk waitMatchk = new WaitMatchk(); waitMatchk.setLocNo(locNo); waitMatchk.setMatNo(matNo); if(null != waitMatchk1){ waitMatchk.setBillNo(waitMatchk1.getBillNo()); waitMatchk.setSeqNo(waitMatchk1.getSeqNo()+1); waitMatchk.setZpallet(waitMatchk1.getZpallet()); waitMatchk.setLinkErp(waitMatchk1.getLinkErp()); waitMatchk.setIoStatus(waitMatchk1.getIoStatus()); } else { waitMatchk.setBillNo("0"); waitMatchk.setSeqNo(seq++); waitMatchk.setLinkErp(0); waitMatchk.setIoStatus(1); } waitMatchk.setBillType(1);//抽盘 waitMatchk.setMatName(matCode.getMatName()); waitMatchk.setStockQty(0D); waitMatchk.setCheckQty(checkQty); waitMatchk.setModiTime(now); waitMatchk.setModiUser(getUserId()); waitMatchk.setAppeTime(now); waitMatchk.setAppeUser(getUserId()); flag = waitMatchkService.insert(waitMatchk); if(!flag){ throw new CoolException("新增盘点通知档数据失败"); } } } } return R.ok().add(flag); } // 拣料转全板 // sBarcode 原托盘码 tBarcode 转换托盘码 @RequestMapping("/piking/to/full") @ManagerAuth @Transactional public R pikingToFull(String sBarcode,String tBarcode) { // 检查转换托盘码是否在库 List locDetls = locDetlService.selectByZpallet(tBarcode); if (!Cools.isEmpty(locDetls)) { throw new CoolException("需要转换的托盘已被使用,请更换托盘!"); } WrkMast twrkMast = wrkMastService.selectByBarcode(tBarcode); if (!Cools.isEmpty(twrkMast)) { throw new CoolException("需要转换的托盘已被使用,请更换托盘!"); } LocMast tlocMast = locMastService.selectByBarcode(tBarcode); if (!Cools.isEmpty(tlocMast)) { throw new CoolException("需要转换的托盘已被使用,请更换托盘!"); } WrkDetl twrkDetl = wrkDetlService.selectByZpallet0(tBarcode); if (!Cools.isEmpty(twrkDetl)) { throw new CoolException("需要转换的托盘已被使用,请更换托盘!"); } // 修改工作档托盘码 WrkMast wrkMast = wrkMastService.selectByBarcode(sBarcode); if (wrkMast.getWrkSts() != 14) { throw new CoolException("出库未完成!"); } List wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo()); for (WrkDetl wrkDetl : wrkDetls) { //++++ wrkDetlService.updateBarcode(sBarcode,tBarcode,wrkDetl.getSupplier()); } if (Cools.isEmpty(wrkMast)) { throw new CoolException("请确认托盘码!"); } // 修改库存明细档托盘码 List locDetls1 = locDetlService.selectByZpallet(sBarcode); for (LocDetl locDetl : locDetls1) { //++++ locDetlService.updateZpallet(sBarcode,tBarcode,locDetl.getSupplier()); } // 修改工作主档条码 wrkMast.setBarcode(tBarcode); wrkMastService.updateById(wrkMast); LocMast locMast = locMastService.selectByBarcode(sBarcode); locMast.setBarcode(tBarcode); locMastService.updateById(locMast); return R.ok("转换成功"); } }