package com.zy.asrs.controller; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.alibaba.fastjson.JSONObject; 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.*; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.*; import com.zy.asrs.entity.result.KeyValueVo; import com.zy.asrs.service.*; import com.zy.common.CodeRes; import com.zy.common.config.AdminInterceptor; import com.zy.common.model.DetlDto; import com.zy.common.utils.BarcodeUtils; import com.zy.common.utils.QrCode; import com.zy.common.web.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.imageio.ImageIO; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.URLEncoder; import java.util.*; @RestController public class OrderCheckController extends BaseController { @Autowired private OrderService orderService; @Autowired private OrderDetlService orderDetlService; @Autowired private SnowflakeIdWorker snowflakeIdWorker; @Autowired private DocTypeService docTypeService; @Autowired private WrkDetlService wrkDetlService; @Autowired private WaitPakinService waitPakinService; @Autowired private OrderLogService orderLogService; @Autowired private OrderCheckService orderCheckService; @Autowired private LocCheckService locCheckService; @Autowired private ManLocDetlService manLocDetlService; @Autowired private LocCheckTrimService locCheckTrimService; @RequestMapping(value = "/orderCheck/examine") @ManagerAuth(memo = "审核盘点单") @Transactional public R examine(@RequestBody ExamineParam param){ orderCheckService.examine(param); return R.ok("审核完成"); } @RequestMapping(value = "/orderCheck/nav/list/auth") @ManagerAuth public R navList(@RequestParam(required = false) String orderNo){ EntityWrapper wrapper = new EntityWrapper<>(); if (!Cools.isEmpty(orderNo)) { wrapper.like("order_no", orderNo); } wrapper.le("settle", 2).eq("status", 1); wrapper.orderBy("create_time", false); List orders = orderService.selectList(wrapper); // 保留出库单 if (!Cools.isEmpty(orders)) { Iterator iterator = orders.iterator(); while (iterator.hasNext()) { Order order = iterator.next(); if (order.getDocType() != null) { DocType docType = docTypeService.selectById(order.getDocType()); if (docType != null) { if (docType.getPakout() == 0) { iterator.remove(); } } } } } return R.ok().add(orders); } @RequestMapping(value = "/orderCheck/head/page/auth") @ManagerAuth public R head(@RequestParam(defaultValue = "1")Integer curr, @RequestParam(defaultValue = "10")Integer limit, @RequestParam(required = false)String orderByField, @RequestParam(required = false)String orderByType, @RequestParam Map param){ EntityWrapper wrapper = new EntityWrapper<>(); excludeTrash(param); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} else { wrapper.orderBy("settle").orderBy("create_time", false); } return R.ok(orderCheckService.selectPage(new Page<>(curr, limit), wrapper)); } @RequestMapping(value = "/orderCheck/detl/all/auth") @ManagerAuth public R head(@RequestParam String orderNo){ List orderNo1 = locCheckService.selectList(new EntityWrapper().eq("order_no", orderNo)); return R.ok().add(orderNo1); } @RequestMapping(value = "/orderCheck/form/add/auth") @ManagerAuth(memo = "手动添加订单") @Transactional public R formAdd(@RequestBody OrderCheckParam param){ OrderCheck orderCheck1 = orderCheckService.selectByNo(param.getOrderNo()); OrderLog orderLog = orderLogService.selectByNo(param.getOrderNo()); if (orderCheck1 != null) { return R.error("盘点单单据编号已存在"); } if (orderLog != null) { return R.error("盘点单单据编号在历史档中已存在"); } Date now = new Date(); OrderCheck orderCheck = new OrderCheck(); orderCheck.setOrderNo(param.getOrderNo()); orderCheck.setUuid(String.valueOf(snowflakeIdWorker.nextId())); orderCheck.setOrderTime(DateUtils.convert(now)); orderCheck.setStatus(1); orderCheck.setSettle(1L); orderCheck.setDocType(16L); orderCheck.setCreateTime(now); orderCheck.setUpdateTime(now); if (!orderCheckService.insert(orderCheck)) { throw new CoolException("保存盘点单主档失败"); } for (ManLocDetl manLocDetl : param.getOrderDetlList()){ LocCheck locCheck = new LocCheck(); locCheck.setLocNo(manLocDetl.getLocNo()); locCheck.setMaktx(manLocDetl.getMaktx()); locCheck.setType(1); locCheck.setMatnr(manLocDetl.getMatnr()); locCheck.setAnfme(manLocDetl.getAnfme()); locCheck.setRealAnfme(0.0); locCheck.setDiffAnfme(0.0); locCheck.setExamine(0); locCheck.setOwner(manLocDetl.getOwner()); locCheck.setPayment(manLocDetl.getPayment()); locCheck.setCreateTime(now); locCheck.setUpdateTime(now); locCheck.setOrderNo(param.getOrderNo()); locCheck.setBatch(manLocDetl.getBatch()); if (!locCheckService.insert(locCheck)){ return R.error("插入失败"); } } return R.ok("盘点单添加成功"); } @RequestMapping(value = "/orderCheck/form/modify/auth") @ManagerAuth(memo = "手动修改订单") @Transactional public R formModify(@RequestBody OrderCheckParam param){ OrderCheck orderCheck = orderCheckService.selectByNo(param.getOrderNo()); if (orderCheck == null || orderCheck.getStatus() == 0) { return R.error("盘点单不存在"); } Date now = new Date(); Long userId = getUserId(); // 修改主档 orderCheck.setUpdateBy(userId); orderCheck.setUpdateTime(now); if (!orderCheckService.updateById(orderCheck)) { throw new CoolException("修改盘点单类型失败"); } // 修改明细档 // List orderDetls = orderDetlService.selectByOrderId(order.getId()); // 1.清空明细档 if (!locCheckService.delete(new EntityWrapper().eq("order_no",orderCheck.getOrderNo())) ) { throw new CoolException("清空盘点单明细失败"); } for (ManLocDetl manLocDetl : param.getOrderDetlList()){ LocCheck locCheck = new LocCheck(); locCheck.setLocNo(manLocDetl.getLocNo()); locCheck.setMaktx(manLocDetl.getMaktx()); locCheck.setType(1); locCheck.setMatnr(manLocDetl.getMatnr()); locCheck.setAnfme(manLocDetl.getAnfme()); locCheck.setRealAnfme(0.0); locCheck.setDiffAnfme(0.0); locCheck.setCreateTime(now); locCheck.setUpdateTime(now); locCheck.setOrderNo(param.getOrderNo()); if (!locCheckService.insert(locCheck)){ return R.error("插入失败"); } } return R.ok("盘点单修改成功"); } // ------------------------------------------------------------------------------------------------ @RequestMapping(value = "/orderCheck/{id}/auth") @ManagerAuth public R get(@PathVariable("id") String id) { return R.ok(orderService.selectById(String.valueOf(id))); } @RequestMapping(value = "/orderCheck/list/auth") @ManagerAuth public R list(@RequestParam(defaultValue = "1")Integer curr, @RequestParam(defaultValue = "10")Integer limit, @RequestParam(required = false)String orderByField, @RequestParam(required = false)String orderByType, @RequestParam Map param){ EntityWrapper wrapper = new EntityWrapper<>(); excludeTrash(param); Object orderNo = param.get("order_no"); wrapper.eq("order_no",orderNo); Page manLocDetlPage = locCheckService.selectPage(new Page<>(curr, limit), wrapper); return R.ok(manLocDetlPage); } private void convert(Map map, EntityWrapper wrapper){ for (Map.Entry entry : map.entrySet()){ String val = String.valueOf(entry.getValue()); 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 { wrapper.like(entry.getKey(), val); } } } @RequestMapping(value = "/orderCheck/update/auth") @ManagerAuth public R update(Order order){ if (Cools.isEmpty(order) || null == order.getId()){ return R.error(); } //订单完结前,判断是否存在作业中数据,存在则不能完结 if(order.getSettle() == 4){ int wrkCount = wrkDetlService.selectCount(new EntityWrapper().eq("order_no",order.getOrderNo())); int pakinCount = waitPakinService.selectCount(new EntityWrapper().eq("order_no",order.getOrderNo())); if (wrkCount > 0 || pakinCount > 0) { throw new CoolException("存在作业中数据,不能完结。请检查入库通知档和工作档"); } } order.setUpdateBy(getUserId()); order.setUpdateTime(new Date()); if (!orderService.updateById(order)) { throw new CoolException("修改盘点单失败"); } return R.ok(); } @RequestMapping(value = "/orderCheck/delete/auth") @ManagerAuth(memo = "手动删除订单") @Transactional public R delete(@RequestParam String orderNo){ orderCheckService.remove(orderNo); // Order order = orderService.selectById(orderId); // if (order != null) { // order.setStatus(0); // } // if (!orderService.updateById(order)) { // throw new CoolException("删除订单失败"); // } // orderDetlService.modifyStatus(orderId, 0); return R.ok(); } @RequestMapping(value = "/orderCheck/export/auth") @ManagerAuth public R export(@RequestBody JSONObject param){ EntityWrapper wrapper = new EntityWrapper<>(); List fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class); Map map = excludeTrash(param.getJSONObject("order")); convert(map, wrapper); List list = orderService.selectList(wrapper); return R.ok(exportSupport(list, fields)); } @RequestMapping(value = "/orderCheckQuery/auth") @ManagerAuth public R query(String condition) { EntityWrapper wrapper = new EntityWrapper<>(); wrapper.like("id", condition); Page page = orderService.selectPage(new Page<>(0, 10), wrapper); List> result = new ArrayList<>(); for (Order order : page.getRecords()){ Map map = new HashMap<>(); map.put("id", order.getId()); map.put("value", order.getOrderNo()); result.add(map); } return R.ok(result); } @RequestMapping(value = "/orderCheck/check/column/auth") @ManagerAuth public R query(@RequestBody JSONObject param) { Wrapper wrapper = new EntityWrapper().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val")); if (null != orderService.selectOne(wrapper)){ return R.parse(BaseRes.REPEAT).add(getComment(Order.class, String.valueOf(param.get("key")))); } return R.ok(); } @RequestMapping("/orderCheck/in") public R in(@RequestBody JSONObject param){ System.out.println("111 = " + 111); return R.ok(); } @RequestMapping("/orderCheck/create/auth") @ManagerAuth public R autoCreate(@RequestBody CheckDTO checkDTO){ Double prec = Double.valueOf(checkDTO.getPrec()); List data = checkDTO.getData(); EntityWrapper manLocDetlEntityWrapper = new EntityWrapper<>(); int count = manLocDetlService.selectCount(manLocDetlEntityWrapper); List countLocDetl = new ArrayList<>(); double precDpuble = prec / 100; count = (int)(count * precDpuble); if (checkDTO.getData() == null){ countLocDetl = locCheckService.getCountLocDetl(count); }else { for (CheckDTO.data a :data){ String matnr = a.getValue(); EntityWrapper manLocDetlEntityWrapper2 = new EntityWrapper<>(); manLocDetlEntityWrapper2.eq("matnr",matnr); int countfor = manLocDetlService.selectCount(manLocDetlEntityWrapper2); countfor = (countfor * precDpuble)>1? Math.round((float)(countfor * precDpuble)) : 1 ; for (ManLocDetl manLocDetl: locCheckService.getMatnrCountLocDetl(countfor,a.getValue())){ countLocDetl.add(manLocDetl); } } } return R.ok().add(countLocDetl); } @RequestMapping(value = "/orderCheck/print/auth") @ManagerAuth(memo = "订单编码打印") public R manPakOutPrint(@RequestParam(value = "param[]") String[] param) { if(Cools.isEmpty(param)) { return R.parse(CodeRes.EMPTY); } List res = new ArrayList<>(); for (String orderNo : param){ res = locCheckService.selectList(new EntityWrapper().eq("order_no", orderNo)); } return R.ok().add(res); } @RequestMapping(value = "/orderCheck/code/auth") // @ManagerAuth(memo = "物料编码条形码获取(type:1(条形码);2(二维码)") public R manPakOutCodeBarcode(@RequestParam(defaultValue = "2") Integer type , @RequestParam String param , HttpServletResponse response) throws Exception { AdminInterceptor.cors(response); if (Cools.isEmpty(param)){ return R.parse(BaseRes.EMPTY); } BufferedImage img; if (type == 1) { img = BarcodeUtils.encode(param); } else { img = QrCode.createImg(param); } if (!ImageIO.write(img, "jpg", response.getOutputStream())) { throw new IOException("Could not write an image of format jpg"); } response.getOutputStream().flush(); response.getOutputStream().close(); return R.ok(); } @RequestMapping("/orderCheck/create/loc/auth") @ManagerAuth public R autolocCreate(@RequestBody CheckDTO checkDTO){ Double prec = Double.valueOf(checkDTO.getPrec()); List data = checkDTO.getData(); EntityWrapper manLocDetlEntityWrapper = new EntityWrapper<>(); int count = manLocDetlService.selectCount(manLocDetlEntityWrapper); List countLocDetl = new ArrayList<>(); double precDpuble = prec / 100; count = (int)(count * precDpuble); if (checkDTO.getData() == null){ countLocDetl = locCheckService.getCountLocDetl(count); }else { for (CheckDTO.data a :data){ String locno = a.getValue(); EntityWrapper manLocDetlEntityWrapper2 = new EntityWrapper<>(); manLocDetlEntityWrapper2.eq("loc_no",locno); int countfor = manLocDetlService.selectCount(manLocDetlEntityWrapper2); countfor = (countfor * precDpuble)>1? Math.round((float)(countfor * precDpuble)) : 1 ; for (ManLocDetl manLocDetl: locCheckService.getLocCountLocDetl(countfor,a.getValue())){ countLocDetl.add(manLocDetl); } } } return R.ok().add(countLocDetl); } @RequestMapping("/orderCheck/create/owner/auth") @ManagerAuth public R autoOwnerlocCreate(@RequestBody CheckDTO checkDTO){ Double prec = Double.valueOf(checkDTO.getPrec()); List data = checkDTO.getData(); EntityWrapper manLocDetlEntityWrapper = new EntityWrapper<>(); int count = manLocDetlService.selectCount(manLocDetlEntityWrapper); List countLocDetl = new ArrayList<>(); double precDpuble = prec / 100; count = (int)(count * precDpuble); if (checkDTO.getData() == null){ countLocDetl = locCheckService.getCountLocDetl(count); }else { for (CheckDTO.data a :data){ String owner = a.getValue(); EntityWrapper manLocDetlEntityWrapper2 = new EntityWrapper<>(); manLocDetlEntityWrapper2.eq("owner",owner); int countfor = manLocDetlService.selectCount(manLocDetlEntityWrapper2); countfor = (countfor * precDpuble)>1? Math.round((float)(countfor * precDpuble)) : 1 ; for (ManLocDetl manLocDetl: locCheckService.getOwnerCountLocDetl(countfor,a.getValue())){ countLocDetl.add(manLocDetl); } } } return R.ok().add(countLocDetl); } @RequestMapping(value = "/orderCheck/mxamine") public R mxamine(@RequestBody LocCheck locCheck){ //审核 locCheck.setDiffAnfme(locCheck.getRealAnfme() - locCheck.getAnfme()); locCheck.setExamine(1); locCheck.setType(2); if (!locCheckService.updateById(locCheck)){ return R.error("状态更新失败"); } EntityWrapper manLocDetlEntityWrapper = new EntityWrapper<>(); manLocDetlEntityWrapper.eq("loc_no",locCheck.getLocNo()); manLocDetlEntityWrapper.eq("matnr",locCheck.getMatnr()); ManLocDetl manLocDetl = new ManLocDetl(); manLocDetl.setAnfme(locCheck.getRealAnfme()); if (!manLocDetlService.update(manLocDetl,manLocDetlEntityWrapper)){ return R.error("更新平库库存失败"); } Date now = new Date(); Long userId = getUserId(); LocCheckTrim locCheckTrim = new LocCheckTrim(); locCheckTrim.setLocNo(locCheck.getLocNo()); locCheckTrim.setMaktx(locCheck.getMaktx()); locCheckTrim.setType(locCheck.getType()); locCheckTrim.setExamine(locCheck.getExamine()); locCheckTrim.setMatnr(locCheck.getMatnr()); locCheckTrim.setAnfme(locCheck.getAnfme()); locCheckTrim.setRealAnfme(locCheck.getRealAnfme()); locCheckTrim.setDiffAnfme(locCheck.getDiffAnfme()); locCheckTrim.setCreateTime(now); locCheckTrim.setCreateBy(userId); locCheckTrim.setOrderNo(locCheck.getOrderNo()); if (!locCheckTrimService.insert(locCheckTrim)){ return R.error("历史档插入失败"); } return R.ok("审核完成!"); } @RequestMapping(value = "/orderCheck/all/get/loc") public R mxamine(){ List list = locCheckService.getLocCount(); List keyValueVoList = new ArrayList<>(); for (int i=0;i list = locCheckService.getOwnerCount(); List keyValueVoList = new ArrayList<>(); for (LocOwner basLocOwner: list){ KeyValueVo vo = new KeyValueVo(); vo.setName(basLocOwner.getOwner()); vo.setValue(basLocOwner.getId()); keyValueVoList.add(vo); } return R.ok(keyValueVoList); } @RequestMapping(value = "/orderCheck/printExport/auth") // @ManagerAuth(memo = "盘点单导出") public void export(HttpServletResponse response,@RequestParam String orderNo) throws IOException { //从数据库查询数据 EntityWrapper locCheckEntityWrapper = new EntityWrapper<>(); locCheckEntityWrapper.eq("order_no",orderNo); List list = locCheckService.selectList(locCheckEntityWrapper); for (LocCheck locCheck:list){ locCheck.setRealAnfme(null); } response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("盘点单", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName+ orderNo + ".xlsx"); Set includeColumnFiledNames = new HashSet(); includeColumnFiledNames.add("orderNo"); includeColumnFiledNames.add("matnr"); includeColumnFiledNames.add("maktx"); includeColumnFiledNames.add("locNo"); includeColumnFiledNames.add("anfme"); includeColumnFiledNames.add("owner"); includeColumnFiledNames.add("payment"); includeColumnFiledNames.add("createTime"); includeColumnFiledNames.add("realAnfme"); EasyExcel.write(response.getOutputStream(), LocCheck.class) .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) .includeColumnFiledNames(includeColumnFiledNames) .sheet("表1") .doWrite(list); } }