From 391dd89a6583e0f1eceaf1297fd852e3da32bf68 Mon Sep 17 00:00:00 2001 From: pang.jiabao <pang_jiabao@163.com> Date: 星期四, 17 四月 2025 16:39:30 +0800 Subject: [PATCH] 出库作业里面显示冻结/未冻结 --- src/main/java/com/zy/asrs/controller/PlaController.java | 357 +++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 318 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/PlaController.java b/src/main/java/com/zy/asrs/controller/PlaController.java index f8978f1..72e4036 100644 --- a/src/main/java/com/zy/asrs/controller/PlaController.java +++ b/src/main/java/com/zy/asrs/controller/PlaController.java @@ -1,31 +1,40 @@ package com.zy.asrs.controller; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.plugins.Page; import com.core.annotations.ManagerAuth; +import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.R; +import com.core.common.SnowflakeIdWorker; import com.core.exception.CoolException; -import com.zy.asrs.entity.ManPakOut; -import com.zy.asrs.entity.Pla; -import com.zy.asrs.entity.PlaQty; -import com.zy.asrs.service.ManPakOutService; -import com.zy.asrs.service.PlaQtyService; -import com.zy.asrs.service.PlaService; +import com.zy.asrs.entity.*; +import com.zy.asrs.entity.param.GlobleParameter; +import com.zy.asrs.entity.result.KeyValueVo; +import com.zy.asrs.service.*; +import com.zy.asrs.utils.PlaExcelListener; import com.zy.asrs.utils.SaasUtils; +import com.zy.common.CodeRes; +import com.zy.common.entity.PlaExcel; import com.zy.common.web.BaseController; +import lombok.Synchronized; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -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 org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; -import java.util.Date; -import java.util.List; -import java.util.Map; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLEncoder; +import java.util.*; @RestController +@Slf4j public class PlaController extends BaseController { @Autowired @@ -34,16 +43,49 @@ private PlaQtyService plaQtyService; @Autowired private ManPakOutService manPakOutService; + @Autowired + private OrderService orderService; + @Autowired + private OrderDetlService orderDetlService; + @Autowired + private PlaLogService plaLogService; + @Autowired + private MatService matService; + @Autowired + private SnowflakeIdWorker snowflakeIdWorker; + @RequestMapping(value = "/pla/list/auth") @ManagerAuth - public R list(@RequestParam(defaultValue = "1")Integer curr, - @RequestParam(defaultValue = "10")Integer limit, - @RequestParam(required = false)String condition, - @RequestParam Map<String, Object> param){ + public R list(@RequestParam(defaultValue = "1") Integer curr, + @RequestParam(defaultValue = "10") Integer limit, + @RequestParam(required = false) String condition, + @RequestParam Map<String, Object> param) { excludeTrash(param); EntityWrapper<Pla> wrapper = new EntityWrapper<>(); + + if (!Cools.isEmpty(param.get("brand"))) { + wrapper.eq("brand", param.get("brand")); + param.remove("brand"); + } + // 浠撳簱绮剧‘鍖归厤 + if (!Cools.isEmpty(param.get("stash"))) { + wrapper.eq("stash", param.get("stash")); + param.remove("stash"); + } + // 娌℃湁閫夋嫨鐨勬椂鍊欓粯璁や笉鏄剧ず宸插嚭搴撶殑鐗╂枡 + if (Cools.isEmpty(param.get("status"))) { + wrapper.ne("status", "鍏ㄩ儴鍑哄簱"); + } + + if (!Cools.isEmpty(param.get("batch")) && param.get("batch").toString().contains(",")) { + String[] batchs = param.get("batch").toString().split(","); + wrapper.in("batch", batchs); + param.remove("batch"); + } + convert(param, wrapper); + wrapper.orderBy("batch", true).orderBy("package_no", true); allLike(Pla.class, param.keySet(), wrapper, condition); return R.ok(plaService.selectPage(new Page<>(curr, limit), wrapper)); } @@ -51,7 +93,7 @@ @RequestMapping(value = "/pla/add/auth") @ManagerAuth public R add(@RequestBody List<Pla> plas) { - System.out.println(plas.toString()); + log.info(plas.toString()); plas.forEach(pla -> { plaService.insert(pla); }); @@ -61,9 +103,42 @@ @RequestMapping(value = "/pla/update/auth") @ManagerAuth public R update(@RequestBody List<Pla> plas) { - System.out.println(plas.toString()); + log.info(plas.toString()); plas.forEach(pla -> { + Pla plaSave = plaService.selectById(pla.getId()); + pla.setModifyTime(new Date()); plaService.updateById(pla); + + PlaLog plaLog = new PlaLog(); + BeanUtils.copyProperties(plaSave, plaLog); + plaLog.setId(null); + plaLog.setCreateTime(new Date()); + plaLog.setModifyUser(getUser().getUsername()); + plaLogService.insert(plaLog); + + }); + return R.ok(); + } + + @RequestMapping(value = "/pla/delete/auth") + @ManagerAuth + public R delete(@RequestBody List<Pla> plas) { + log.info(plas.toString()); + plas.forEach(pla -> { + if (!pla.getStatus().equals(GlobleParameter.PLA_STATUS_00) && !pla.getStatus().equals(GlobleParameter.PLA_STATUS_0) && !pla.getStatus().equals(GlobleParameter.PLA_STATUS_1)) { + throw new CoolException("宸插叆搴撶殑鏁版嵁鏃犳硶琚垹闄�"); + } + Pla plaSave = plaService.selectById(pla.getId()); + pla.setModifyTime(new Date()); + plaService.deleteById(pla.getId()); + + PlaLog plaLog = new PlaLog(); + BeanUtils.copyProperties(plaSave, plaLog); + plaLog.setId(null); + plaLog.setCreateTime(new Date()); + plaLog.setModifyUser(getUser().getUsername()); + plaLogService.insert(plaLog); + }); return R.ok(); } @@ -75,30 +150,70 @@ } @RequestMapping(value = "/pla/sellout/auth") - @ManagerAuth + @ManagerAuth(memo = "sellout") + @Transactional + @Synchronized public R sellout(@RequestBody List<Pla> plas) { - plas.forEach(pla -> { + String orderNo = plas.get(0).getOrderNo(); + String maktx = plas.get(0).getBrand(); + Double allOrderWeight = 0.0; + Order order = orderService.selectByNo(orderNo); + OrderDetl orderDetl = orderDetlService.selectByOrderNoAndMaktx(orderNo, maktx); - if(pla.getWeightAnfme() - pla.getQtyAnfme() - pla.getOrderWeight() < 0){ - throw new CoolException("璇ュ簱瀛樺墿浣欓噸閲忎笉瓒筹紝璇疯皟鏁村嚭搴撻噸閲�"); + for (Pla pla : plas) { + // 鑾峰彇鏈�鏂板喕缁撶姸鎬� + Pla pla1 = plaService.selectOne(new EntityWrapper<Pla>().setSqlSelect("stock_freeze as stockFreeze,stock_freeze_by as stockFreezeBy,stock_freeze_date as stockFreezeDate").eq("id", pla.getId())); + pla.setStockFreeze(pla1.getStockFreeze()); + pla.setStockFreezeBy(pla1.getStockFreezeBy()); + pla.setStockFreezeDate(pla1.getStockFreezeDate()); + if (pla.getStockFreeze() == 0) { +// throw new CoolException("搴撳瓨宸茶鍐荤粨锛岃閲嶆柊閫夋嫨搴撳瓨"); + log.info("璇ュ簱瀛樺凡琚叾浠栫敤鎴峰喕缁擄紝璇烽噸鏂伴�夋嫨;{},{}", pla.getStockFreezeBy(), getUser().getUsername()); + if (!Cools.eq(pla.getStockFreezeBy(), getUser().getUsername())) { + throw new CoolException("璇ュ簱瀛樺凡琚叾浠栫敤鎴峰喕缁擄紝璇烽噸鏂伴�夋嫨"); + } + } + + allOrderWeight += pla.getOrderWeight(); + + if (pla.getWeightAnfme() - pla.getQtyAnfme() - pla.getOrderWeight() < 0) { + throw new CoolException("鎵瑰彿:" + pla.getBatch() + "锛屽寘鍙�:" + pla.getPackageNo() + " 鍓╀綑鍙嚭搴撻噸閲忎笉瓒筹紝璇疯皟鏁村嚭搴撻噸閲�"); + } + if (Cools.isEmpty(pla.getMassState())){ + throw new CoolException("璐ㄩ噺鎸囨爣涓轰笂浼�"); } pla.setQtyAnfme(pla.getQtyAnfme() + pla.getOrderWeight()); pla.setHandlerBy(getUser().getUsername()); - pla.setStatus("寰呭嚭搴�"); + pla.setStatus(GlobleParameter.PLA_STATUS_2); + pla.setModifyTime(new Date()); pla.setPakoutTime(pla.getPakoutTime().split("\\(")[0]); + //鐢熸垚姝ゆ浣滀笟淇℃伅 PlaQty plaQty = new PlaQty(); - BeanUtils.copyProperties(pla,plaQty); + BeanUtils.copyProperties(pla, plaQty); plaQty.setCreateTime(new Date()); plaQty.setId(null); - + plaQty.setTransfer(order.getDocType$()); + plaQty.setOrderDetlId(orderDetl.getId()); plaService.updateById(pla); plaQtyService.insert(plaQty); - //鐢熸垚鎷h揣鍗� - addPakOUT(plaQty); + addPakOUT(plaQty, getUserId()); - }); + } + ; + + //淇敼鍗曟嵁淇℃伅 + if (orderDetl.getAnfme() - orderDetl.getWorkQty() - allOrderWeight < 0) { + throw new CoolException("璇ヨ鍗曞嚭搴撴暟閲忓ぇ浜庤鍗曞緟鍑烘暟閲忥紝璇烽噸鏂伴�夋嫨鍑哄簱鏁伴噺"); + } + if (order.getStatus() < 2) { + orderService.updateSettle(order.getId(), 2L, getUserId()); + } + + orderDetl.setWorkQty(orderDetl.getWorkQty() + allOrderWeight); + orderDetlService.updateById(orderDetl); + return R.ok(); } @@ -106,7 +221,14 @@ @RequestMapping(value = "/pla/returned/auth") @ManagerAuth public R returned(@RequestBody List<PlaQty> plaQties) { - plaService.returned(plaQties,getUser()); + plaService.returned(plaQties, getUser()); + return R.ok(); + } + + @RequestMapping(value = "/pla/viladate/auth") + @ManagerAuth + public R viladate(@RequestBody List<Pla> plas) { + plaService.viladate(plas, getUser()); return R.ok(); } @@ -119,40 +241,197 @@ pla.setModifyTime(new Date()); pla.setWeightAnfme(0.0); plaService.updateById(pla); - SaasUtils.insertLog(1,pla.getLocNo(),pla.getBatch()+","+pla.getPackageNo(),anfme,getUser().getUsername()); + SaasUtils.insertLog(1, pla.getLocNo(), pla.getBrand(), anfme, getUser().getUsername(), + null, pla.getBatch(), pla.getPackageNo(), pla.getOwner(), pla.getWorkshop(), null); }); return R.ok(); } - private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){ - for (Map.Entry<String, Object> entry : map.entrySet()){ + @RequestMapping(value = "/pla/updateStockFreeze") + @Transactional + @ManagerAuth(memo = "搴撲綅鍐荤粨") + public R updateStockFreeze(@RequestBody List<Pla> plas) { + if (Cools.isEmpty(plas)) { + return R.error("鏃犳暟鎹�"); + } + for (Pla pla : plas) { + if (pla.getStockFreeze() == 0) { + continue; +// throw new CoolException("搴撳瓨宸茶鍐荤粨锛�"); + } + pla.setStockFreeze(0); + pla.setStockFreezeBy(getUser().getUsername()); + pla.setStockFreezeDate(new Date()); + pla.setModifyTime(new Date()); + plaService.updateById(pla); + } + return R.ok("鍐荤粨鎴愬姛"); + } + + @RequestMapping(value = "/pla/updateStockDisFreeze") + @ManagerAuth(memo = "搴撲綅瑙e喕") + public R updateStockDisFreeze(@RequestBody List<Pla> plas) { + if (Cools.isEmpty(plas)) { + return R.error("鏃犳暟鎹�"); + } + for (Pla pla : plas) { + if (pla.getStockFreeze() == 1) { + continue; +// throw new CoolException("搴撲綅鏈喕缁擄紝鏃犻渶瑙e喕"); + } + if (!Cools.eq(pla.getStockFreezeBy(), getUser().getUsername())) { + throw new CoolException("鏃犳硶瑙e喕鍏朵粬鐢ㄦ埛鍐荤粨鐨勫簱浣�"); + } + pla.setStockFreeze(1); + pla.setStockFreezeBy(getUser().getUsername()); + pla.setStockFreezeDate(new Date()); + pla.setModifyTime(new Date()); + plaService.updateById(pla); + + } + return R.ok("瑙i櫎鍐荤粨鎴愬姛"); + } + + @RequestMapping(value = "/matMaktxQuery/auth") + @ManagerAuth + public R queryMat(String condition) { + EntityWrapper<Mat> wrapper = new EntityWrapper<>(); + wrapper.like("maktx", condition); + Page<Mat> page = matService.selectPage(new Page<>(0, 10), wrapper); + List<Map<String, Object>> result = new ArrayList<>(); + for (Mat mat : page.getRecords()) { + Map<String, Object> map = new HashMap<>(); + map.put("id", mat.getMaktx()); + map.put("value", mat.getMaktx()); + result.add(map); + } + return R.ok(result); + } + + @RequestMapping(value = "/pla/statis/auth") + @ManagerAuth + public R statis(@RequestParam(defaultValue = "1") Integer curr, + @RequestParam(defaultValue = "10") Integer limit, + @RequestParam Map<String, Object> param) { + + Page<Pla> stockStatis = plaService.getStockStatisAll(toPage(curr, limit, param, Pla.class)); + + return R.ok().add(stockStatis); + } + + /** + * excel瀵煎叆妯℃澘涓嬭浇 + */ + @RequestMapping(value = "/pla/excel/import/mould") + public void plaExcelImportMould(HttpServletResponse response) throws IOException { + List<PlaExcel> excels = new ArrayList<>(); + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf-8"); + String fileName = URLEncoder.encode("鑱氫钩閰窫xcel瀵煎叆妯℃澘", "UTF-8"); + response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); + EasyExcel.write(response.getOutputStream(), PlaExcel.class) + .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) + .sheet("sheet1") + .doWrite(excels); + } + + // excel瀵煎叆 + @PostMapping(value = "/pla/excel/import/auth") + @ManagerAuth(memo = "pla妗f鏁版嵁瀵煎叆") + @Transactional + public R matExcelImport(MultipartFile file) throws IOException { + PlaExcelListener listener = new PlaExcelListener(getUserId()); + try { + EasyExcel.read(file.getInputStream(), PlaExcel.class, listener).sheet().doRead(); + } catch (Exception e) { + e.printStackTrace(); + int index = listener.getIndex() - 1; + throw new CoolException("瀵煎叆鐨勬暟鎹牸寮忛敊璇紝鍘熷洜锛�" + e.getMessage() + "锛岀" + index + "锛屾暟鎹牸寮忎笉瀵�"); + } + log.info("瀵煎叆淇敼淇℃伅杈撳嚭锛�" + listener.getRecordLog()); + return R.ok("鎴愬姛鍚屾" + listener.getTotal() + "鏉la鐗╂枡鏁版嵁"); + } + + // 鎵撳嵃 + @RequestMapping(value = "/pla/print/auth") + @ManagerAuth(memo = "pla缂栫爜鎵撳嵃") + public R matCodePrint(@RequestBody List<Pla> plas) { + if (Cools.isEmpty(plas)) { + return R.parse(CodeRes.EMPTY); + } + List<Pla> res = new ArrayList<>(); + for (Pla pla : plas) { + res.add(pla); + } + return R.ok().add(res); + } + + /*************************************** xm-select ***********************************************/ + + // xm-select 鎼滅储鎵瑰彿 + @RequestMapping("/pla/batch/all/get/kv") + @ManagerAuth + public R getMatDataKV(@RequestParam(required = false) String condition) { + Wrapper<Pla> wrapper = new EntityWrapper<Pla>().setSqlSelect("batch") + .andNew().like("batch", condition) + .groupBy("batch") + .orderBy("batch", false); + Page<Pla> plaPage = new Page<>(1, 30); + plaPage.setSearchCount(false); + Page<Pla> plaPage1 = plaService.selectPage(plaPage, wrapper); + // 閲嶆柊鏌ヨ鐒跺悗缁檖age璁剧疆Total + plaPage.setTotal(this.plaService.selectCount(new EntityWrapper<Pla>().setSqlSelect("batch") + .andNew().like("batch", condition))); + List<KeyValueVo> valueVos = new ArrayList<>(); + for (Pla pla : plaPage1.getRecords()) { + KeyValueVo vo = new KeyValueVo(); + vo.setName(pla.getBatch()); + vo.setValue(pla.getBatch()); + valueVos.add(vo); + } + return R.ok().add(valueVos); + } + + private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper) { + for (Map.Entry<String, Object> entry : map.entrySet()) { String val = String.valueOf(entry.getValue()); - if (val.contains(RANGE_TIME_LINK)){ + if (val.contains(RANGE_TIME_LINK)) { String[] dates = val.split(RANGE_TIME_LINK); wrapper.ge(entry.getKey(), DateUtils.convert(dates[0])); wrapper.le(entry.getKey(), DateUtils.convert(dates[1])); + } else if (entry.getKey().contains("Min")) { + wrapper.ge(entry.getKey().substring(0, entry.getKey().length() - 3), val); + } else if (entry.getKey().contains("Max")) { + wrapper.le(entry.getKey().substring(0, entry.getKey().length() - 3), val); } else { wrapper.like(entry.getKey(), val); } } } - private R addPakOUT(PlaQty plaQty){ - ManPakOut manPakOut=new ManPakOut(); - manPakOut.setWrkNo(plaQty.getOrderNo()+"-"+System.currentTimeMillis()); - manPakOut.setWrkSts((long)1); + @Synchronized + private R addPakOUT(PlaQty plaQty, Long userId) { + ManPakOut manPakOut = new ManPakOut(); + manPakOut.setWrkNo(plaQty.getOrderNo() + "-" + String.valueOf(snowflakeIdWorker.nextId())); + manPakOut.setWrkSts((long) 1); manPakOut.setAnfme(plaQty.getOrderWeight()); + manPakOut.setMaktx(plaQty.getBrand()); manPakOut.setLocNo(plaQty.getLocNo()); manPakOut.setBatch(plaQty.getBatch()); - manPakOut.setBarcode(plaQty.getPackageNo()); + manPakOut.setBarcode(plaQty.getPackageNo() + ""); manPakOut.setUuid(String.valueOf(System.currentTimeMillis())); manPakOut.setCreateTime(new Date()); manPakOut.setUpdateTime(new Date()); manPakOut.setCount(0.0); manPakOut.setDocNum(plaQty.getOrderNo()); manPakOut.setStatus(0); + manPakOut.setDocId(plaQty.getOrderDetlId()); manPakOut.setNodeId(plaQty.getId()); + manPakOut.setCustName(plaQty.getCustomer()); + manPakOut.setCreateBy(userId); + //棰勮鍙戣揣鏃堕棿 + manPakOut.setSpecs(plaQty.getPakoutTime()); //manPakOut.setNodeId(plaQty.getOrderDetlId()); manPakOutService.insert(manPakOut); return R.ok(); -- Gitblit v1.9.1