Merge branch 'refs/heads/phyzwms2' into phyzasrs-erp
 
	
	
	
	
	
	
	
	
	
	
	
	
	
 |  |  | 
 |  |  | import com.core.common.DateUtils; | 
 |  |  | import com.core.common.R; | 
 |  |  | import com.zy.asrs.entity.AgvLocDetl; | 
 |  |  | import com.zy.asrs.entity.DocType; | 
 |  |  | import com.zy.asrs.entity.Mat; | 
 |  |  | import com.zy.asrs.entity.OrderDetl; | 
 |  |  | import com.zy.asrs.service.AgvLocDetlService; | 
 |  |  | import com.zy.asrs.service.DocTypeService; | 
 |  |  | import com.zy.asrs.service.MatService; | 
 |  |  | import com.zy.asrs.service.OrderDetlService; | 
 |  |  | import com.zy.common.web.BaseController; | 
 |  |  | 
 |  |  | import org.springframework.web.multipart.MultipartFile; | 
 |  |  |  | 
 |  |  | import java.io.IOException; | 
 |  |  | import java.util.ArrayList; | 
 |  |  | import java.util.List; | 
 |  |  | import java.util.Map; | 
 |  |  |  | 
 |  |  | 
 |  |  |     private MatService matService; | 
 |  |  |     @Autowired | 
 |  |  |     private OrderDetlService orderDetlService; | 
 |  |  |     @Autowired | 
 |  |  |     private DocTypeService docTypeService; | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/locDetl/list/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  | 
 |  |  |                     .where("loc_no like '" +row +"%'"); | 
 |  |  |         } | 
 |  |  |         Page<AgvLocDetl> agvLocDetlPage = agvLocDetlService.selectPage(new Page<>(curr, limit), wrapper); | 
 |  |  |         List<DocType> pakins = docTypeService.selectList(new EntityWrapper<DocType>().eq("pakout", 1)); | 
 |  |  |         List<Long> docIds = new ArrayList<>(); | 
 |  |  |         for (DocType pakin : pakins) { | 
 |  |  |             if (pakin.getDocId() != 33 && pakin.getDocId() != 35) { | 
 |  |  |                 docIds.add(pakin.getDocId()); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         for (AgvLocDetl record : agvLocDetlPage.getRecords()) { | 
 |  |  |             OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("three_code", record.getThreeCode()).eq("matnr", record.getMatnr()).ne("order_no", record.getOrderNo()).ne("order_no", "DB" + record.getOrderNo())); | 
 |  |  |             OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>() | 
 |  |  |                     .eq("three_code", record.getThreeCode()) | 
 |  |  |                     .eq("matnr", record.getMatnr()) | 
 |  |  |                     .in("source",docIds)); | 
 |  |  |             if (orderDetl.getAnfme() - orderDetl.getQty() > 0) { | 
 |  |  |                 record.setStock(orderDetl.getAnfme() - orderDetl.getQty()); | 
 |  |  |             } else { | 
 
 |  |  | 
 |  |  | import com.core.annotations.ManagerAuth; | 
 |  |  | import com.core.common.Cools; | 
 |  |  | import com.core.common.R; | 
 |  |  | import com.core.common.SnowflakeIdWorker; | 
 |  |  | import com.core.exception.CoolException; | 
 |  |  | import com.zy.asrs.entity.*; | 
 |  |  | import com.zy.asrs.entity.param.*; | 
 |  |  | 
 |  |  |     private AgvWrkMastService agvWrkMastService; | 
 |  |  |     @Autowired | 
 |  |  |     private AgvWrkDetlService agvWrkDetlService; | 
 |  |  |     @Autowired | 
 |  |  |     private SnowflakeIdWorker snowflakeIdWorker; | 
 |  |  |     @Autowired | 
 |  |  |     private FlowLogService flowLogService; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /* | 
 |  |  | 
 |  |  |             } | 
 |  |  |             AgvWrkMast wrkMast = createWrkMast(ioType, 22L, locNo, "", barcode, now, getUserId(), 30,floor); | 
 |  |  |             // 同步调拨单 | 
 |  |  |             long flowId = snowflakeIdWorker.nextId(); | 
 |  |  |             List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", locNo)); | 
 |  |  |             for (AgvLocDetl agvLocDetl : agvLocDetls) { | 
 |  |  |                 AgvWrkDetl wrkDetl = new AgvWrkDetl(); | 
 |  |  | 
 |  |  |                 if (!agvWrkDetlService.insert(wrkDetl)) { | 
 |  |  |                     throw new CoolException("保存工作明细失败"); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 // 更新订单 | 
 |  |  |                 OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("source",33).eq("matnr", agvLocDetl.getMatnr()).eq("three_code",agvLocDetl.getThreeCode())); | 
 |  |  | //                FlowLog flowLog = new FlowLog(); | 
 |  |  | //                flowLog.setFid(String.valueOf(flowId)); | 
 |  |  | //                flowLog.setSpare2(wrkMast.getWrkNo().toString()); | 
 |  |  | //                flowLog.setLocNo(wrkMast.getSourceLocNo()); | 
 |  |  | //                flowLog.setSpare1(barcode); | 
 |  |  | //                flowLog.setOpType(5L); | 
 |  |  | //                flowLog.setOrderNo(orderDetl.getOrderNo()); | 
 |  |  | //                flowLog.setThreeCode(orderDetl.getThreeCode()); | 
 |  |  | //                flowLog.setMatnr(agvLocDetl.getMatnr()); | 
 |  |  | //                flowLog.setMaktx(agvLocDetl.getMaktx()); | 
 |  |  | //                flowLog.setOrderPrevious(orderDetl.getAnfme()); | 
 |  |  | //                flowLog.setOrderCurrent(orderDetl.getAnfme()); | 
 |  |  | //                flowLog.setOrderChanged(0.0); | 
 |  |  | // | 
 |  |  | //                flowLog.setQtyPrevious(orderDetl.getQty()); | 
 |  |  | //                flowLog.setQtyCurrent(orderDetl.getQty() + agvLocDetl.getAnfme()); | 
 |  |  | //                flowLog.setQtyChanged(agvLocDetl.getAnfme()); | 
 |  |  | // | 
 |  |  | //                flowLog.setLocPrevious(agvLocDetl.getAnfme()); | 
 |  |  | //                flowLog.setLocCurrent(0.0d); | 
 |  |  | //                flowLog.setLocChanged(agvLocDetl.getAnfme()); | 
 |  |  | //                flowLog.setUserId(getUserId()); | 
 |  |  | //                flowLog.setAppeTime(now); | 
 |  |  | //                if (!flowLogService.insert(flowLog)) { | 
 |  |  | //                    throw new CoolException("同步半成品调拨单流水记录失败"); | 
 |  |  | //                } | 
 |  |  |                 orderDetl.setQty(orderDetl.getQty() + agvLocDetl.getAnfme()); | 
 |  |  |                 if (!orderDetlService.update(orderDetl,new EntityWrapper<OrderDetl>().eq("source",33).eq("matnr", agvLocDetl.getMatnr()).eq("three_code",agvLocDetl.getThreeCode()))){ | 
 |  |  |                     throw new CoolException("修改订单明细失败,请联系管理员"+agvLocDetl.getOrderNo()+agvLocDetl.getMatnr()); | 
 
| New file | 
 |  |  | 
 |  |  | 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.baomidou.mybatisplus.plugins.Page; | 
 |  |  | import com.core.common.DateUtils; | 
 |  |  | import com.zy.asrs.entity.FlowLog; | 
 |  |  | import com.zy.asrs.service.FlowLogService; | 
 |  |  | import com.core.annotations.ManagerAuth; | 
 |  |  | import com.core.common.BaseRes; | 
 |  |  | import com.core.common.Cools; | 
 |  |  | import com.core.common.R; | 
 |  |  | import com.zy.common.web.BaseController; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.web.bind.annotation.*; | 
 |  |  |  | 
 |  |  | import java.util.*; | 
 |  |  |  | 
 |  |  | @RestController | 
 |  |  | public class FlowLogController extends BaseController { | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private FlowLogService flowLogService; | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/flowLog/{id}/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R get(@PathVariable("id") String id) { | 
 |  |  |         return R.ok(flowLogService.selectById(String.valueOf(id))); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/flowLog/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(required = false)String condition, | 
 |  |  |                   @RequestParam Map<String, Object> param){ | 
 |  |  |         EntityWrapper<FlowLog> wrapper = new EntityWrapper<>(); | 
 |  |  |         excludeTrash(param); | 
 |  |  |         convert(param, wrapper); | 
 |  |  |         allLike(FlowLog.class, param.keySet(), wrapper, condition); | 
 |  |  |         if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} | 
 |  |  |         return R.ok(flowLogService.selectPage(new Page<>(curr, limit), wrapper)); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     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)){ | 
 |  |  |                 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 = "/flowLog/add/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R add(FlowLog flowLog) { | 
 |  |  |         flowLogService.insert(flowLog); | 
 |  |  |         return R.ok(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/flowLog/update/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R update(FlowLog flowLog){ | 
 |  |  |         if (Cools.isEmpty(flowLog) || null==flowLog.getId()){ | 
 |  |  |             return R.error(); | 
 |  |  |         } | 
 |  |  |         flowLogService.updateById(flowLog); | 
 |  |  |         return R.ok(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/flowLog/delete/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R delete(@RequestParam(value="ids[]") Long[] ids){ | 
 |  |  |          for (Long id : ids){ | 
 |  |  |             flowLogService.deleteById(id); | 
 |  |  |         } | 
 |  |  |         return R.ok(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/flowLog/export/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R export(@RequestBody JSONObject param){ | 
 |  |  |         EntityWrapper<FlowLog> wrapper = new EntityWrapper<>(); | 
 |  |  |         List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class); | 
 |  |  |         Map<String, Object> map = excludeTrash(param.getJSONObject("flowLog")); | 
 |  |  |         convert(map, wrapper); | 
 |  |  |         List<FlowLog> list = flowLogService.selectList(wrapper); | 
 |  |  |         return R.ok(exportSupport(list, fields)); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/flowLogQuery/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R query(String condition) { | 
 |  |  |         EntityWrapper<FlowLog> wrapper = new EntityWrapper<>(); | 
 |  |  |         wrapper.like("id", condition); | 
 |  |  |         Page<FlowLog> page = flowLogService.selectPage(new Page<>(0, 10), wrapper); | 
 |  |  |         List<Map<String, Object>> result = new ArrayList<>(); | 
 |  |  |         for (FlowLog flowLog : page.getRecords()){ | 
 |  |  |             Map<String, Object> map = new HashMap<>(); | 
 |  |  |             map.put("id", flowLog.getId()); | 
 |  |  |             map.put("value", flowLog.getId()); | 
 |  |  |             result.add(map); | 
 |  |  |         } | 
 |  |  |         return R.ok(result); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/flowLog/check/column/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R query(@RequestBody JSONObject param) { | 
 |  |  |         Wrapper<FlowLog> wrapper = new EntityWrapper<FlowLog>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val")); | 
 |  |  |         if (null != flowLogService.selectOne(wrapper)){ | 
 |  |  |             return R.parse(BaseRes.REPEAT).add(getComment(FlowLog.class, String.valueOf(param.get("key")))); | 
 |  |  |         } | 
 |  |  |         return R.ok(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } | 
 
 |  |  | 
 |  |  |     private MatService matService; | 
 |  |  |     @Autowired | 
 |  |  |     private AgvLocDetlService agvLocDetlService; | 
 |  |  |     @Autowired | 
 |  |  |     private FlowLogService flowLogService; | 
 |  |  |  | 
 |  |  |     @GetMapping("/doc/type/list") | 
 |  |  |     @Transactional | 
 |  |  | 
 |  |  |     @Transactional | 
 |  |  |     public R formAdd(@RequestBody OrderDomainParam param){ | 
 |  |  |         Order order = orderService.selectByNo(param.getOrderNo()); | 
 |  |  |         long flowId = snowflakeIdWorker.nextId(); | 
 |  |  |         if (order != null) { | 
 |  |  |             return R.error("单据编号已存在"); | 
 |  |  |         } | 
 |  |  | 
 |  |  |             DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch()); | 
 |  |  |             if (DetlDto.has(list, dto)) { | 
 |  |  |                 OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getThreeCode(),orderDetl.getDeadTime()); | 
 |  |  |                 Double anfme = item.getAnfme(); | 
 |  |  |                 item.setAnfme(item.getAnfme() + orderDetl.getAnfme()); | 
 |  |  |                 if (!orderDetlService.updateById(item)) { | 
 |  |  |                     throw new CoolException("保存订单明细档失败"); | 
 |  |  |                 } | 
 |  |  |                 // 流水 -- 新增订单明细 | 
 |  |  | //                FlowLog flowLog = new FlowLog(); | 
 |  |  | //                flowLog.setFid(String.valueOf(flowId)); | 
 |  |  | //                flowLog.setOpType(2L); | 
 |  |  | //                flowLog.setOrderNo(param.getOrderNo()); | 
 |  |  | //                flowLog.setThreeCode(orderDetl.getThreeCode()); | 
 |  |  | //                flowLog.setMatnr(orderDetl.getMatnr()); | 
 |  |  | //                flowLog.setMaktx(orderDetl.getMaktx()); | 
 |  |  | //                flowLog.setOrderPrevious(anfme); | 
 |  |  | //                flowLog.setOrderCurrent(anfme + orderDetl.getAnfme()); | 
 |  |  | //                flowLog.setOrderChanged(orderDetl.getAnfme()); | 
 |  |  | //                flowLog.setQtyPrevious(orderDetl.getQty()); | 
 |  |  | //                flowLog.setQtyCurrent(orderDetl.getQty()); | 
 |  |  | //                flowLog.setQtyChanged(0.0D); | 
 |  |  | //                flowLog.setUserId(getUserId()); | 
 |  |  | //                flowLog.setAppeTime(now); | 
 |  |  | //                if (!flowLogService.insert(flowLog)) { | 
 |  |  | //                    throw new CoolException("同步半成品调拨单流水记录失败"); | 
 |  |  | //                } | 
 |  |  |             } else { | 
 |  |  |                 list.add(dto); | 
 |  |  |                 orderDetl.setOrderId(order.getId()); | 
 |  |  | 
 |  |  |                 if (!orderDetlService.insert(orderDetl)) { | 
 |  |  |                     throw new CoolException("保存订单明细档失败"); | 
 |  |  |                 } | 
 |  |  | //                // 流水 -- 新增订单明细 | 
 |  |  | //                FlowLog flowLog = new FlowLog(); | 
 |  |  | //                flowLog.setFid(String.valueOf(flowId)); | 
 |  |  | //                flowLog.setOpType(1L); | 
 |  |  | //                flowLog.setOrderNo(param.getOrderNo()); | 
 |  |  | //                flowLog.setThreeCode(orderDetl.getThreeCode()); | 
 |  |  | //                flowLog.setMatnr(orderDetl.getMatnr()); | 
 |  |  | //                flowLog.setMaktx(orderDetl.getMaktx()); | 
 |  |  | //                flowLog.setOrderPrevious(0.0D); | 
 |  |  | //                flowLog.setOrderCurrent(orderDetl.getAnfme()); | 
 |  |  | //                flowLog.setOrderChanged(orderDetl.getAnfme()); | 
 |  |  | //                flowLog.setQtyPrevious(0.0D); | 
 |  |  | //                flowLog.setQtyCurrent(0.0D); | 
 |  |  | //                flowLog.setQtyChanged(0.0D); | 
 |  |  | //                flowLog.setUserId(getUserId()); | 
 |  |  | //                flowLog.setAppeTime(now); | 
 |  |  | //                if (!flowLogService.insert(flowLog)) { | 
 |  |  | //                    throw new CoolException("同步半成品调拨单流水记录失败"); | 
 |  |  | //                } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         if (param.getDocType().intValue() == 32) { | 
 |  |  | 
 |  |  |                         if (!orderDetlService.insert(orderDetl)) { | 
 |  |  |                             throw new CoolException("生成半成品调拨单明细档失败"); | 
 |  |  |                         } | 
 |  |  | //                        // 流水 -- 新增订单明细 | 
 |  |  | //                        FlowLog flowLog = new FlowLog(); | 
 |  |  | //                        flowLog.setFid(String.valueOf(flowId)); | 
 |  |  | //                        flowLog.setOpType(1L); | 
 |  |  | //                        flowLog.setOrderNo(param.getOrderNo()); | 
 |  |  | //                        flowLog.setThreeCode(orderDetl.getThreeCode()); | 
 |  |  | //                        flowLog.setMatnr(orderDetl.getMatnr()); | 
 |  |  | //                        flowLog.setMaktx(orderDetl.getMaktx()); | 
 |  |  | //                        flowLog.setOrderPrevious(0.0D); | 
 |  |  | //                        flowLog.setOrderCurrent(orderDetl.getAnfme()); | 
 |  |  | //                        flowLog.setOrderChanged(orderDetl.getAnfme()); | 
 |  |  | //                        flowLog.setQtyPrevious(0.0D); | 
 |  |  | //                        flowLog.setQtyCurrent(0.0D); | 
 |  |  | //                        flowLog.setQtyChanged(0.0D); | 
 |  |  | //                        flowLog.setUserId(getUserId()); | 
 |  |  | //                        flowLog.setAppeTime(now); | 
 |  |  | //                        if (!flowLogService.insert(flowLog)) { | 
 |  |  | //                            throw new CoolException("同步半成品调拨单流水记录失败"); | 
 |  |  | //                        } | 
 |  |  |  | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return R.ok("订单添加成功"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |     @Transactional | 
 |  |  |     public R formModify(@RequestBody OrderDomainParam param){ | 
 |  |  |         Order order = orderService.selectById(param.getOrderId()); | 
 |  |  |         long flowId = snowflakeIdWorker.nextId(); | 
 |  |  |         int docType = param.getDocType().intValue(); | 
 |  |  |         if (order == null || order.getStatus() == 0) { | 
 |  |  |             return R.error("订单不存在"); | 
 |  |  | 
 |  |  |             DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getAnfme(), orderDetl.getProcessSts()); | 
 |  |  |             if (DetlDto.has(list, dto)) { | 
 |  |  |                 OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getThreeCode(),orderDetl.getDeadTime()); | 
 |  |  |                 Double anfme = item.getAnfme(); | 
 |  |  |                 item.setAnfme(item.getAnfme() + orderDetl.getAnfme()); | 
 |  |  |                 if (!orderDetlService.updateById(item)) { | 
 |  |  |                     throw new CoolException("保存订单明细档失败"); | 
 |  |  |                 } | 
 |  |  | //                // 流水 -- 新增订单明细 | 
 |  |  | //                FlowLog flowLog = new FlowLog(); | 
 |  |  | //                flowLog.setFid(String.valueOf(flowId)); | 
 |  |  | //                flowLog.setOpType(2L); | 
 |  |  | //                flowLog.setOrderNo(param.getOrderNo()); | 
 |  |  | //                flowLog.setThreeCode(orderDetl.getThreeCode()); | 
 |  |  | //                flowLog.setMatnr(orderDetl.getMatnr()); | 
 |  |  | //                flowLog.setMaktx(orderDetl.getMaktx()); | 
 |  |  | //                flowLog.setOrderPrevious(anfme); | 
 |  |  | //                flowLog.setOrderCurrent(anfme + orderDetl.getAnfme()); | 
 |  |  | //                flowLog.setOrderChanged(orderDetl.getAnfme()); | 
 |  |  | //                flowLog.setQtyPrevious(orderDetl.getQty()); | 
 |  |  | //                flowLog.setQtyCurrent(orderDetl.getQty()); | 
 |  |  | //                flowLog.setQtyChanged(0.0D); | 
 |  |  | //                flowLog.setUserId(getUserId()); | 
 |  |  | //                flowLog.setAppeTime(now); | 
 |  |  | //                if (!flowLogService.insert(flowLog)) { | 
 |  |  | //                    throw new CoolException("同步半成品调拨单流水记录失败"); | 
 |  |  | //                } | 
 |  |  |             } else { | 
 |  |  |                 if (docType == 35 && orderDetl.getProcessSts() == 1) { | 
 |  |  |                     List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>() | 
 |  |  | 
 |  |  |                 if (!orderDetlService.insert(orderDetl)) { | 
 |  |  |                     throw new CoolException("保存订单明细档失败"); | 
 |  |  |                 } | 
 |  |  |                 // 流水 -- 新增订单明细 | 
 |  |  | //                FlowLog flowLog = new FlowLog(); | 
 |  |  | //                flowLog.setFid(String.valueOf(flowId)); | 
 |  |  | //                flowLog.setOpType(2L); | 
 |  |  | //                flowLog.setOrderNo(param.getOrderNo()); | 
 |  |  | //                flowLog.setThreeCode(orderDetl.getThreeCode()); | 
 |  |  | //                flowLog.setMatnr(orderDetl.getMatnr()); | 
 |  |  | //                flowLog.setMaktx(orderDetl.getMaktx()); | 
 |  |  | //                flowLog.setOrderPrevious(0.0D); | 
 |  |  | //                flowLog.setOrderCurrent(orderDetl.getAnfme()); | 
 |  |  | //                flowLog.setOrderChanged(orderDetl.getAnfme()); | 
 |  |  | //                flowLog.setQtyPrevious(orderDetl.getQty()); | 
 |  |  | //                flowLog.setQtyCurrent(orderDetl.getQty()); | 
 |  |  | //                flowLog.setQtyChanged(0.0D); | 
 |  |  | //                flowLog.setUserId(getUserId()); | 
 |  |  | //                flowLog.setAppeTime(now); | 
 |  |  | //                if (!flowLogService.insert(flowLog)) { | 
 |  |  | //                    throw new CoolException("同步半成品调拨单流水记录失败"); | 
 |  |  | //                } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         return R.ok("订单修改成功"); | 
 
 |  |  | 
 |  |  |                 //issued = manLocDetlService.queryStockAndSetLocDto(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued,orderDetl.getThreeCode(),orderDetl.getDeadTime()); | 
 |  |  |  | 
 |  |  |                 //先找AGV的库存,如果返回的issued大于0,则去四项库找 | 
 |  |  |                 issued = agvLocDetlService.queryStockAndSetLocDto(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued,orderDetl.getThreeCode(),orderDetl.getDeadTime()); | 
 |  |  |                 issued = agvLocDetlService.queryStockAndSetLocDto(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued,orderDetl.getThreeCode(),orderDetl.getDeadTime(),null); | 
 |  |  |  | 
 |  |  |                 //从四项库的库存里面找, | 
 |  |  |                 //issued = locDetlService.queryStockAndSetLocDto(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued,orderDetl.getThreeCode(),orderDetl.getDeadTime()); | 
 |  |  |  | 
 |  |  |                 if (issued > 0) { | 
 |  |  |                     LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued,orderDetl.getProcessSts()); | 
 |  |  |                     locDto.setLack(Boolean.TRUE); | 
 |  |  |                     locDtoList.add(locDto); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |         return R.ok().add(locDtoList); | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //出库 | 
 |  |  |     @PostMapping("/bcp/out/pakout/preview/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R bcpPakoutPreview(@RequestBody List<Long> ids) { | 
 |  |  |  | 
 |  |  |         List<OrderDetl> orderDetlList = orderDetlService.selectBatchIds(ids); | 
 |  |  |         //返回给前端的库位以及站点信息 | 
 |  |  |         List<LocDto> locDtoList = new ArrayList<>(); | 
 |  |  |  | 
 |  |  |         for (OrderDetl orderDetl : orderDetlList) { | 
 |  |  |             double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty()).orElse(0.0D); | 
 |  |  |             Order order = orderService.selectByNo(orderDetl.getOrderNo()); | 
 |  |  |             DocType docType = docTypeService.selectById(order.getDocType()); | 
 |  |  |             if("人工补货单".equals(docType.getDocName())){ | 
 |  |  |                 if (issued <= 0.0D) { continue; } | 
 |  |  |                 issued = locDetlService.queryStockAndSetLocDto1(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued,orderDetl.getThreeCode(),orderDetl.getDeadTime()); | 
 |  |  |                 if (issued > 0) { | 
 |  |  |                     LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued,orderDetl.getProcessSts()); | 
 |  |  |                     locDto.setLack(Boolean.TRUE); | 
 |  |  |                     locDtoList.add(locDto); | 
 |  |  |                 } | 
 |  |  |             }else { | 
 |  |  |                 if (issued <= 0.0D) { continue; } | 
 |  |  |  | 
 |  |  |                 //从平库寻找 | 
 |  |  |                 //issued = manLocDetlService.queryStockAndSetLocDto(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued,orderDetl.getThreeCode(),orderDetl.getDeadTime()); | 
 |  |  |  | 
 |  |  |                 //先找AGV的库存,如果返回的issued大于0,则去四项库找 | 
 |  |  |                 issued = agvLocDetlService.queryStockAndSetLocDto(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued,orderDetl.getThreeCode(),orderDetl.getDeadTime(),"bcp"); | 
 |  |  |  | 
 |  |  |                 //从四项库的库存里面找, | 
 |  |  |                 //issued = locDetlService.queryStockAndSetLocDto(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued,orderDetl.getThreeCode(),orderDetl.getDeadTime()); | 
 |  |  | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |             //先找AGV的库存,如果返回的issued大于0,则去四项库找 | 
 |  |  |             issued = agvLocDetlService.queryStockAndSetLocDto(vo.getMatnr(),vo.getBatch(),JSON.toJSONString(vo.getOrderDtos()),locDtoList,issued, vo.getCsocode(), vo.getIsoseq()); | 
 |  |  |             issued = agvLocDetlService.queryStockAndSetLocDto(vo.getMatnr(),vo.getBatch(),JSON.toJSONString(vo.getOrderDtos()),locDtoList,issued, vo.getCsocode(), vo.getIsoseq(),null); | 
 |  |  |             //从四项库的库存里面找, | 
 |  |  |             issued = locDetlService.queryStockAndSetLocDto(vo.getMatnr(),vo.getBatch(),JSON.toJSONString(vo.getOrderDtos()),locDtoList,issued, vo.getCsocode(), vo.getIsoseq()); | 
 |  |  |  | 
 
| New file | 
 |  |  | 
 |  |  | package com.zy.asrs.entity; | 
 |  |  |  | 
 |  |  | import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId; | 
 |  |  | import com.baomidou.mybatisplus.enums.IdType; | 
 |  |  | import com.baomidou.mybatisplus.annotations.TableField; | 
 |  |  | import java.text.SimpleDateFormat; | 
 |  |  | import java.util.Date; | 
 |  |  | import org.springframework.format.annotation.DateTimeFormat; | 
 |  |  |  | 
 |  |  | import io.swagger.annotations.ApiModelProperty; | 
 |  |  | import lombok.Data; | 
 |  |  | import com.baomidou.mybatisplus.annotations.TableName; | 
 |  |  | import java.io.Serializable; | 
 |  |  |  | 
 |  |  | @Data | 
 |  |  | @TableName("man_flow_log") | 
 |  |  | public class FlowLog implements Serializable { | 
 |  |  |  | 
 |  |  |     private static final long serialVersionUID = 1L; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 数据编号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "数据编号") | 
 |  |  |     @TableId(value = "id", type = IdType.AUTO) | 
 |  |  |     private Long id; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 流水号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "流水号") | 
 |  |  |     private String fid; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 操作类型 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "操作类型") | 
 |  |  |     @TableField("op_type") | 
 |  |  |     private Long opType; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 订单号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "订单号") | 
 |  |  |     @TableField("order_no") | 
 |  |  |     private String orderNo; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 销售单号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "销售单号") | 
 |  |  |     @TableField("three_code") | 
 |  |  |     private String threeCode; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 库位号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "库位号") | 
 |  |  |     @TableField("loc_no") | 
 |  |  |     private String locNo; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 物料号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "物料号") | 
 |  |  |     private String matnr; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 物料名称 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "物料名称") | 
 |  |  |     private String maktx; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 订单数量变更前 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "订单数量变更前") | 
 |  |  |     @TableField("order_previous") | 
 |  |  |     private Double orderPrevious; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 订单数量变更后 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "订单数量变更后") | 
 |  |  |     @TableField("order_current") | 
 |  |  |     private Double orderCurrent; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 订单数量变更 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "订单数量变更") | 
 |  |  |     @TableField("order_changed") | 
 |  |  |     private Double orderChanged; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 作业数量变更前 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "作业数量变更前") | 
 |  |  |     @TableField("qty_previous") | 
 |  |  |     private Double qtyPrevious; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 作业数量变更后 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "作业数量变更后") | 
 |  |  |     @TableField("qty_current") | 
 |  |  |     private Double qtyCurrent; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 作业数量变更 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "作业数量变更") | 
 |  |  |     @TableField("qty_changed") | 
 |  |  |     private Double qtyChanged; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 变更前数量 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "变更前数量") | 
 |  |  |     @TableField("loc_previous") | 
 |  |  |     private Double locPrevious; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 变更后数量 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "变更后数量") | 
 |  |  |     @TableField("loc_current") | 
 |  |  |     private Double locCurrent; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 变更值 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "变更值") | 
 |  |  |     @TableField("loc_changed") | 
 |  |  |     private Double locChanged; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 备用1 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "备用1") | 
 |  |  |     private String spare1; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 备用2 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "备用2") | 
 |  |  |     private String spare2; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 备用3 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "备用3") | 
 |  |  |     private String spare3; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 备用4 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "备用4") | 
 |  |  |     private String spare4; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 备用5 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "备用5") | 
 |  |  |     private String spare5; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 操作员 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "操作员") | 
 |  |  |     @TableField("user_id") | 
 |  |  |     private Long userId; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 更新时间 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "更新时间") | 
 |  |  |     @TableField("appe_time") | 
 |  |  |     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") | 
 |  |  |     private Date appeTime; | 
 |  |  |  | 
 |  |  |     public FlowLog() {} | 
 |  |  |  | 
 |  |  |     public FlowLog(Long id,String fid,Long opType,String orderNo,String threeCode,String locNo,String matnr,String maktx,Double orderPrevious,Double orderCurrent,Double orderChanged,Double qtyPrevious,Double qtyCurrent,Double qtyChanged,Double locPrevious,Double locCurrent,Double locChanged,String spare1,String spare2,String spare3,String spare4,String spare5,Long userId,Date appeTime) { | 
 |  |  |         this.id = id; | 
 |  |  |         this.fid = fid; | 
 |  |  |         this.opType = opType; | 
 |  |  |         this.orderNo = orderNo; | 
 |  |  |         this.threeCode = threeCode; | 
 |  |  |         this.locNo = locNo; | 
 |  |  |         this.matnr = matnr; | 
 |  |  |         this.maktx = maktx; | 
 |  |  |         this.orderPrevious = orderPrevious; | 
 |  |  |         this.orderCurrent = orderCurrent; | 
 |  |  |         this.orderChanged = orderChanged; | 
 |  |  |         this.qtyPrevious = qtyPrevious; | 
 |  |  |         this.qtyCurrent = qtyCurrent; | 
 |  |  |         this.qtyChanged = qtyChanged; | 
 |  |  |         this.locPrevious = locPrevious; | 
 |  |  |         this.locCurrent = locCurrent; | 
 |  |  |         this.locChanged = locChanged; | 
 |  |  |         this.spare1 = spare1; | 
 |  |  |         this.spare2 = spare2; | 
 |  |  |         this.spare3 = spare3; | 
 |  |  |         this.spare4 = spare4; | 
 |  |  |         this.spare5 = spare5; | 
 |  |  |         this.userId = userId; | 
 |  |  |         this.appeTime = appeTime; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | //    FlowLog flowLog = new FlowLog( | 
 |  |  | //            null,    // 数据编号[非空] | 
 |  |  | //            null,    // 流水号 | 
 |  |  | //            null,    // 操作类型 | 
 |  |  | //            null,    // 订单号 | 
 |  |  | //            null,    // 销售单号 | 
 |  |  | //            null,    // 库位号 | 
 |  |  | //            null,    // 物料号 | 
 |  |  | //            null,    // 物料名称 | 
 |  |  | //            null,    // 订单数量变更前 | 
 |  |  | //            null,    // 订单数量变更后 | 
 |  |  | //            null,    // 订单数量变更 | 
 |  |  | //            null,    // 作业数量变更前 | 
 |  |  | //            null,    // 作业数量变更后 | 
 |  |  | //            null,    // 作业数量变更 | 
 |  |  | //            null,    // 变更前数量 | 
 |  |  | //            null,    // 变更后数量 | 
 |  |  | //            null,    // 变更值 | 
 |  |  | //            null,    // 备用1 | 
 |  |  | //            null,    // 备用2 | 
 |  |  | //            null,    // 备用3 | 
 |  |  | //            null,    // 备用4 | 
 |  |  | //            null,    // 备用5 | 
 |  |  | //            null,    // 操作员 | 
 |  |  | //            null    // 更新时间 | 
 |  |  | //    ); | 
 |  |  |  | 
 |  |  |     public String getAppeTime$(){ | 
 |  |  |         if (Cools.isEmpty(this.appeTime)){ | 
 |  |  |             return ""; | 
 |  |  |         } | 
 |  |  |         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getOpType$() { | 
 |  |  |         String otp = ""; | 
 |  |  |         if (this.opType == 1L) { | 
 |  |  |             otp = "新增订单"; | 
 |  |  |         } else if (this.opType == 2L) { | 
 |  |  |             otp = "修改订单"; | 
 |  |  |         } else if (this.opType == 3L) { | 
 |  |  |             otp = "组托入库"; | 
 |  |  |         } else if (this.opType == 4L) { | 
 |  |  |             otp = "订单出库"; | 
 |  |  |         } else if (this.opType == 5L) { | 
 |  |  |             otp = "调拨出库"; | 
 |  |  |         } else if (this.opType == 6L) { | 
 |  |  |             otp = "加工出库"; | 
 |  |  |         } else if (this.opType == 7L) { | 
 |  |  |             otp = "取消入库"; | 
 |  |  |         } else if (this.opType == 8L) { | 
 |  |  |             otp = "取消移库"; | 
 |  |  |         } else if (this.opType == 9L) { | 
 |  |  |             otp = "取消调拨"; | 
 |  |  |         } | 
 |  |  |         return otp; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  | } | 
 
 |  |  | 
 |  |  |  | 
 |  |  | import com.baomidou.mybatisplus.mapper.BaseMapper; | 
 |  |  | import com.zy.asrs.entity.AgvLocDetl; | 
 |  |  | import com.zy.asrs.entity.LocDetl; | 
 |  |  | import org.apache.ibatis.annotations.Mapper; | 
 |  |  | import org.apache.ibatis.annotations.Param; | 
 |  |  | import org.apache.ibatis.annotations.Select; | 
 |  |  | 
 |  |  |     @Select("select sum(a.anfme) as sum from agv_loc_detl a left join agv_loc_mast b on a.loc_no = b.loc_no where b.loc_sts = 'F' and a.matnr = #{matnr} AND a.three_code = #{threeCode}") | 
 |  |  |     Double selectSumAnfmeByMatnr(@Param("matnr") String matnr,@Param("threeCode") String threeCode); | 
 |  |  |  | 
 |  |  |     @Select("select * from agv_loc_detl where 1=1 and loc_no = #{locNo} and matnr = #{matnr} and three_code = #{csocode}") | 
 |  |  |     AgvLocDetl selectItemByOrderNo(@Param("locNo")String locNo, @Param("matnr")String matnr, @Param("batch")String batch, @Param("csocode")String csocode, @Param("isocode")String isocode); | 
 |  |  |  | 
 |  |  |     @Select("select sum(a.anfme) as sum from agv_loc_detl a left join agv_loc_mast b on a.loc_no = b.loc_no where b.loc_sts = 'F' and a.matnr = #{matnr} AND a.three_code = #{threeCode} AND a.process_sts = 1") | 
 |  |  |     Double selectSumAnfmeByMatnrProcess(@Param("matnr") String matnr,@Param("threeCode") String threeCode); | 
 |  |  |  | 
 
| New file | 
 |  |  | 
 |  |  | package com.zy.asrs.mapper; | 
 |  |  |  | 
 |  |  | import com.zy.asrs.entity.FlowLog; | 
 |  |  | import com.baomidou.mybatisplus.mapper.BaseMapper; | 
 |  |  | import org.apache.ibatis.annotations.Mapper; | 
 |  |  | import org.springframework.stereotype.Repository; | 
 |  |  |  | 
 |  |  | @Mapper | 
 |  |  | @Repository | 
 |  |  | public interface FlowLogMapper extends BaseMapper<FlowLog> { | 
 |  |  |  | 
 |  |  | } | 
 
 |  |  | 
 |  |  |  | 
 |  |  |     LocDetl selectItem(@Param("locNo")String locNo, @Param("matnr")String matnr, @Param("batch")String batch,@Param("suppCode")String suppCode); | 
 |  |  |  | 
 |  |  |     LocDetl selectItemByOrderNo(@Param("locNo")String locNo, @Param("matnr")String matnr, @Param("batch")String batch, @Param("csocode")String csocode, @Param("isocode")String isocode); | 
 |  |  |  | 
 |  |  |     int deleteItem(@Param("locNo")String locNo, @Param("matnr")String matnr, @Param("batch")String batch, @Param("suppCode")String suppCode, @Param("threeCode")String threeCode, @Param("deadTime")String deadTime); | 
 |  |  |  | 
 |  |  |     int updateAnfme(@Param("anfme")Double anfme, @Param("locNo")String locNo, @Param("matnr")String matnr, @Param("batch")String batch, @Param("suppCode")String suppCode, @Param("threeCode")String threeCode, @Param("deadTime")String deadTime); | 
 
 |  |  | 
 |  |  |      */ | 
 |  |  |     OrderDetl selectItemByOrderNo(@Param("orderNo") String orderNo, @Param("matnr") String matnr, @Param("batch") String batch, @Param("csocode")String csocode, @Param("isocode")String isocode); | 
 |  |  |  | 
 |  |  |     OrderDetl selectItemByOrderNo2(@Param("orderNo") String orderNo, @Param("matnr") String matnr, @Param("threeCode") String threeCode); | 
 |  |  |  | 
 |  |  |     OrderDetl selectItemNoneOfBatch(@Param("orderNo")String orderNo, @Param("matnr")String matnr); | 
 |  |  |  | 
 |  |  |     OrderDetl selectItemOfBatch(@Param("matnr")String matnr, @Param("batch")String batch); | 
 
 |  |  | 
 |  |  | import com.baomidou.mybatisplus.plugins.Page; | 
 |  |  | import com.baomidou.mybatisplus.service.IService; | 
 |  |  | import com.zy.asrs.entity.AgvLocDetl; | 
 |  |  | import com.zy.asrs.entity.LocDetl; | 
 |  |  | import com.zy.common.model.LocDto; | 
 |  |  | import com.zy.common.model.TaskDto; | 
 |  |  | import org.springframework.web.multipart.MultipartFile; | 
 |  |  | 
 |  |  |  | 
 |  |  |     public void addLocDetlInfo(String locNo, int taskCode); | 
 |  |  |  | 
 |  |  |     public double queryStockAndSetLocDto(String matnr, String batch, String orderNo, List<LocDto> locDtoList, double issued, String csocode, String isoseq); | 
 |  |  |     AgvLocDetl selectItem(String locNo, String matnr, String batch, String csocode, String isoCode); | 
 |  |  |  | 
 |  |  |     public double queryStockAndSetLocDto(String matnr, String batch, String orderNo, List<LocDto> locDtoList, double issued, String csocode, String isoseq, String type); | 
 |  |  |  | 
 |  |  |     public void updateStock(String sourceLoc, String targetLoc); | 
 |  |  |  | 
 
| New file | 
 |  |  | 
 |  |  | package com.zy.asrs.service; | 
 |  |  |  | 
 |  |  | import com.zy.asrs.entity.FlowLog; | 
 |  |  | import com.baomidou.mybatisplus.service.IService; | 
 |  |  |  | 
 |  |  | public interface FlowLogService extends IService<FlowLog> { | 
 |  |  |  | 
 |  |  | } | 
 
 |  |  | 
 |  |  |  | 
 |  |  |     LocDetl selectItem(String locNo, String matnr, String batch,String suppCode); | 
 |  |  |  | 
 |  |  |     LocDetl selectItem(String locNo, String matnr, String batch, String csocode, String isoCode); | 
 |  |  |  | 
 |  |  |     Page<LocDetl> getStockOut(Page<LocDetl> page); | 
 |  |  |  | 
 |  |  |     /** | 
 
 |  |  | 
 |  |  |  | 
 |  |  |     OrderDetl selectItem(String orderNo, String matnr, String batch, String csocode, String isoCode); | 
 |  |  |  | 
 |  |  |     OrderDetl selectItem(String orderNo, String matnr, String threeCode); | 
 |  |  |  | 
 |  |  |     OrderDetl selectItemNoneOfBatch(String orderNo, String matnr); | 
 |  |  |  | 
 |  |  |     OrderDetl selectItemOfBatch(String matnr, String batch); | 
 
 |  |  | 
 |  |  | import com.zy.asrs.entity.AgvLocDetl; | 
 |  |  | import com.zy.asrs.entity.AgvLocMast; | 
 |  |  | import com.zy.asrs.entity.AgvWrkDetl; | 
 |  |  | import com.zy.asrs.entity.LocDetl; | 
 |  |  | import com.zy.asrs.mapper.AgvLocDetlMapper; | 
 |  |  | import com.zy.asrs.service.AgvBasDevpService; | 
 |  |  | import com.zy.asrs.service.AgvLocDetlService; | 
 |  |  | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public double queryStockAndSetLocDto(String matnr, String batch, String orderNo, List<LocDto> locDtoList, double issued, String csocode, String isoseq) { | 
 |  |  |     public double queryStockAndSetLocDto(String matnr, String batch, String orderNo, List<LocDto> locDtoList, double issued, String csocode, String isoseq,String type) { | 
 |  |  |         //根据物料号和批次找到对应的库存,并且按照修改时间排序 | 
 |  |  |         Wrapper<AgvLocDetl> wrapper = new EntityWrapper<AgvLocDetl>().eq("matnr", matnr).orderBy("modi_time"); | 
 |  |  |  | 
 |  |  |         if (type != null) { | 
 |  |  |             wrapper.notLike("loc_no", "F1"); | 
 |  |  |         } | 
 |  |  |         wapperSetCondition(wrapper,"batch",batch); | 
 |  |  |         wapperSetCondition(wrapper,"three_code",csocode); | 
 |  |  |         wapperSetCondition(wrapper,"dead_time",isoseq); | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public AgvLocDetl selectItem(String locNo, String matnr, String batch, String csocode, String isoCode) { | 
 |  |  |         return this.baseMapper.selectItemByOrderNo(locNo, matnr, batch,csocode,isoCode); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public Double getSumAnfmeProcess(String matnr, String threeCode) { | 
 |  |  |         return this.baseMapper.selectSumAnfmeByMatnrProcess(matnr, threeCode); | 
 |  |  |     } | 
 
 |  |  | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         if (agvLocDetls.size() == sameNumber) { | 
 |  |  |         if (agvLocDetls.size() == sameNumber || agvLocDetls.size() == 1) { | 
 |  |  |             agvWrkMast.setIoType(101); | 
 |  |  |             agvWrkMast.setModiTime(new Date()); | 
 |  |  |             agvWrkMastService.update(agvWrkMast,new EntityWrapper<AgvWrkMast>().eq("wrk_no", pickParams.getWrkNo())); | 
 
 |  |  | 
 |  |  | import com.alibaba.fastjson.JSONObject; | 
 |  |  | import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
 |  |  | import com.core.common.Cools; | 
 |  |  | import com.core.common.SnowflakeIdWorker; | 
 |  |  | import com.core.exception.CoolException; | 
 |  |  | import com.zy.asrs.entity.*; | 
 |  |  | import com.zy.asrs.entity.param.LocDetlAdjustParam; | 
 |  |  | 
 |  |  |     private WrkMastExecuteService wrkMastExecuteService; | 
 |  |  |     @Autowired | 
 |  |  |     private ConfigService configService; | 
 |  |  |     @Autowired | 
 |  |  |     private SnowflakeIdWorker snowflakeIdWorker; | 
 |  |  |     @Autowired | 
 |  |  |     private FlowLogService flowLogService; | 
 |  |  |     @Autowired | 
 |  |  |     private LocDetlServiceImpl locDetlService; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /* | 
 |  |  | 
 |  |  |             //生成工作档 | 
 |  |  |             AgvWrkMast wrkMast = createWrkMast(ioType,wrkSts,sourceLocNo,targetLocNo,containerCode,now,userId,Short.valueOf(containerCode.substring(0,2)),null); | 
 |  |  |             //生成工作档明细 | 
 |  |  |             long flowId = snowflakeIdWorker.nextId(); | 
 |  |  |             taskDto.getLocDtos().forEach(locDto -> { | 
 |  |  |                 if (!BaseController.isJSON(locDto.getOrderNo())) { | 
 |  |  |                     //明细档所需参数 | 
 |  |  | 
 |  |  |                             locDto.getCsocode(), | 
 |  |  |                             locDto.getIsoseq(), | 
 |  |  |                             locDto.getProcessSts()); | 
 |  |  |                     OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq()); | 
 |  |  |                     AgvLocDetl locDetl = agvLocDetlService.selectItem(wrkMast.getSourceLocNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq()); | 
 |  |  |                     // 流水 -- 新增订单明细 | 
 |  |  | //                    FlowLog flowLog = new FlowLog(); | 
 |  |  | //                    flowLog.setFid(String.valueOf(flowId)); | 
 |  |  | //                    flowLog.setSpare2(wrkMast.getWrkNo().toString()); | 
 |  |  | //                    flowLog.setLocNo(wrkMast.getSourceLocNo()); | 
 |  |  | //                    flowLog.setSpare1(containerCode); | 
 |  |  | //                    flowLog.setOpType(4L); | 
 |  |  | //                    flowLog.setOrderNo(locDto.getOrderNo()); | 
 |  |  | //                    flowLog.setThreeCode(locDto.getCsocode()); | 
 |  |  | //                    flowLog.setMatnr(locDto.getMatnr()); | 
 |  |  | //                    flowLog.setMaktx(locDto.getMaktx()); | 
 |  |  | //                    flowLog.setOrderPrevious(orderDetl.getAnfme()); | 
 |  |  | //                    flowLog.setOrderCurrent(orderDetl.getAnfme()); | 
 |  |  | //                    flowLog.setOrderChanged(0.0); | 
 |  |  | // | 
 |  |  | //                    flowLog.setQtyPrevious(orderDetl.getQty()); | 
 |  |  | //                    flowLog.setQtyCurrent(orderDetl.getQty() + locDto.getAnfme()); | 
 |  |  | //                    flowLog.setQtyChanged(locDto.getAnfme()); | 
 |  |  | // | 
 |  |  | //                    flowLog.setLocPrevious(locDetl.getAnfme()); | 
 |  |  | //                    flowLog.setLocCurrent(locDetl.getAnfme() - locDto.getAnfme()); | 
 |  |  | //                    flowLog.setLocChanged(locDto.getAnfme()); | 
 |  |  | //                    flowLog.setUserId(userId); | 
 |  |  | //                    flowLog.setAppeTime(now); | 
 |  |  | //                    if (!flowLogService.insert(flowLog)) { | 
 |  |  | //                        throw new CoolException("同步半成品调拨单流水记录失败"); | 
 |  |  | //                    } | 
 |  |  |  | 
 |  |  |                 }else { | 
 |  |  |                     List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class); | 
 |  |  |                     orderDtoList.forEach(orderDto -> { | 
 |  |  | 
 |  |  |                                 locDto.getProcessSts()); | 
 |  |  |                     }); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |                 //修改订单信息 | 
 |  |  |                 modifyOrderDetl(locDto, userId); | 
 |  |  | 
 |  |  |             //生成工作档 | 
 |  |  |             AgvWrkMast wrkMast = createWrkMast(ioType,wrkSts,sourceLocNo,targetLocNo,containerCode,now,userId,Short.valueOf(containerCode.substring(0,2)),null); | 
 |  |  |             //生成工作档明细 | 
 |  |  |             long flowId = snowflakeIdWorker.nextId(); | 
 |  |  |             taskDto.getLocDtos().forEach(locDto -> { | 
 |  |  |                 if (!BaseController.isJSON(locDto.getOrderNo())) { | 
 |  |  |                     //明细档所需参数 | 
 |  |  | 
 |  |  |                             locDto.getCsocode(), | 
 |  |  |                             locDto.getIsoseq(), | 
 |  |  |                             locDto.getProcessSts()); | 
 |  |  |                     OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq()); | 
 |  |  |                     AgvLocDetl locDetl = agvLocDetlService.selectItem(wrkMast.getSourceLocNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq()); | 
 |  |  |  | 
 |  |  | //                    FlowLog flowLog = new FlowLog(); | 
 |  |  | //                    flowLog.setFid(String.valueOf(flowId)); | 
 |  |  | //                    flowLog.setSpare2(wrkMast.getWrkNo().toString()); | 
 |  |  | //                    flowLog.setLocNo(wrkMast.getSourceLocNo()); | 
 |  |  | //                    flowLog.setSpare1(containerCode); | 
 |  |  | //                    flowLog.setOpType(6L); | 
 |  |  | //                    flowLog.setOrderNo(locDto.getOrderNo()); | 
 |  |  | //                    flowLog.setThreeCode(locDto.getCsocode()); | 
 |  |  | //                    flowLog.setMatnr(locDto.getMatnr()); | 
 |  |  | //                    flowLog.setMaktx(locDto.getMaktx()); | 
 |  |  | //                    flowLog.setOrderPrevious(orderDetl.getAnfme()); | 
 |  |  | //                    flowLog.setOrderCurrent(orderDetl.getAnfme()); | 
 |  |  | //                    flowLog.setOrderChanged(0.0); | 
 |  |  | // | 
 |  |  | //                    flowLog.setQtyPrevious(orderDetl.getQty()); | 
 |  |  | //                    flowLog.setQtyCurrent(orderDetl.getQty() + locDto.getAnfme()); | 
 |  |  | //                    flowLog.setQtyChanged(locDto.getAnfme()); | 
 |  |  | // | 
 |  |  | //                    flowLog.setLocPrevious(locDetl.getAnfme()); | 
 |  |  | //                    flowLog.setLocCurrent(locDetl.getAnfme() - locDto.getAnfme()); | 
 |  |  | //                    flowLog.setLocChanged(locDto.getAnfme()); | 
 |  |  | //                    flowLog.setUserId(userId); | 
 |  |  | //                    flowLog.setAppeTime(now); | 
 |  |  | //                    if (!flowLogService.insert(flowLog)) { | 
 |  |  | //                        throw new CoolException("同步半成品调拨单流水记录失败"); | 
 |  |  | //                    } | 
 |  |  |                 }else { | 
 |  |  |                     List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class); | 
 |  |  |                     orderDtoList.forEach(orderDto -> { | 
 |  |  | 
 |  |  |             br = 2; | 
 |  |  |         } | 
 |  |  |         if (agvBasDevp.getLocType1() != br) { | 
 |  |  |             throw new CoolException("站点异常!"); | 
 |  |  |             throw new CoolException("站点类型和货架类型不符!"); | 
 |  |  |         } | 
 |  |  |         if (containerType == 40) { | 
 |  |  |             locType = 5; | 
 |  |  | 
 |  |  |             //生成工作档 | 
 |  |  |             AgvWrkMast wrkMast = createWrkMast(1,201L,devNo,locNo,containerCode,now,userId, containerType,agvLocMast.getPltType()); | 
 |  |  |             //生成工作档明细 | 
 |  |  |             long flowId = snowflakeIdWorker.nextId(); | 
 |  |  |             agvWaitPakinList.forEach(wp -> { | 
 |  |  |                 createWrkDetlReWrite(wp.getMatnr(),wrkMast.getWrkNo(),wp.getOrderNo(),wp.getBatch(),wp.getAnfme(),wp.getSuppCode(),now,userId,wp.getThreeCode(),wp.getDeadTime(),wp.getProcessSts()); | 
 |  |  |                 // 流水 -- 新增订单明细 | 
 |  |  |                 OrderDetl orderDetl = orderDetlService.selectItem(wp.getOrderNo(), wp.getMatnr(), wp.getThreeCode()); | 
 |  |  | //                FlowLog flowLog = new FlowLog(); | 
 |  |  | //                flowLog.setFid(String.valueOf(flowId)); | 
 |  |  | //                flowLog.setSpare2(wrkMast.getWrkNo().toString()); | 
 |  |  | //                flowLog.setLocNo(locNo); | 
 |  |  | //                flowLog.setSpare1(containerCode); | 
 |  |  | //                flowLog.setOpType(3L); | 
 |  |  | //                flowLog.setOrderNo(wp.getOrderNo()); | 
 |  |  | //                flowLog.setThreeCode(wp.getThreeCode()); | 
 |  |  | //                flowLog.setMatnr(wp.getMatnr()); | 
 |  |  | //                flowLog.setMaktx(wp.getMaktx()); | 
 |  |  | //                flowLog.setOrderPrevious(orderDetl.getAnfme()); | 
 |  |  | //                flowLog.setOrderCurrent(orderDetl.getAnfme()); | 
 |  |  | //                flowLog.setOrderChanged(0.0); | 
 |  |  | //                flowLog.setQtyPrevious(orderDetl.getQty()-wp.getAnfme()); | 
 |  |  | //                flowLog.setQtyCurrent(orderDetl.getQty()); | 
 |  |  | //                flowLog.setQtyChanged(wp.getAnfme()); | 
 |  |  | // | 
 |  |  | //                flowLog.setLocPrevious(0.0D); | 
 |  |  | //                flowLog.setLocCurrent(wp.getAnfme()); | 
 |  |  | //                flowLog.setLocChanged(wp.getAnfme()); | 
 |  |  | // | 
 |  |  | //                flowLog.setUserId(userId); | 
 |  |  | //                flowLog.setAppeTime(now); | 
 |  |  | //                if (!flowLogService.insert(flowLog)) { | 
 |  |  | //                    throw new CoolException("同步半成品调拨单流水记录失败"); | 
 |  |  | //                } | 
 |  |  |             }); | 
 |  |  |             //修改入库通知档状态 | 
 |  |  |             agvWaitPakinService.updateIoStatus(containerCode,"Y"); | 
 |  |  | 
 |  |  |         AgvBasDevp agvBasDevp = agvBasDevpService.selectById(station); | 
 |  |  |         if(!agvBasDevp.getLocSts().equals("O")){ | 
 |  |  |             throw new CoolException("当前工作位状态为" + agvBasDevp.getLocSts()+",无法进行空板出库"); | 
 |  |  |         } | 
 |  |  |         AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", agvBasDevp.getDevNo())); | 
 |  |  |         if(!Cools.isEmpty(agvWrkMast)){ | 
 |  |  |             throw new CoolException("有货架在往站点搬运" + agvBasDevp.getDevNo()+",无法进行空板出库"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         //寻找相应类型的空货架 | 
 |  |  | 
 |  |  |     @Transactional | 
 |  |  |     public void cancelWrkMast(String workNo, Long userId,Integer type) { | 
 |  |  |         AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo); | 
 |  |  |         long flowId = snowflakeIdWorker.nextId(); | 
 |  |  |         if (Cools.isEmpty(wrkMast)){ | 
 |  |  |             throw new CoolException(workNo+"工作档不存在"); | 
 |  |  |         } | 
 |  |  | 
 |  |  |                         // 回滚入库订单 | 
 |  |  |                         OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("three_code", agvWaitPakin.getThreeCode()).eq("matnr", agvWaitPakin.getMatnr()).eq("order_no", agvWaitPakin.getOrderNo())); | 
 |  |  |                         orderDetl.setQty(orderDetl.getQty() - agvWaitPakin.getAnfme()); | 
 |  |  |  | 
 |  |  |                         if (!orderDetlService.updateById(orderDetl)) { | 
 |  |  |                             throw new CoolException("订单回滚失败"); | 
 |  |  |                         } | 
 |  |  | //                        FlowLog flowLog = new FlowLog(); | 
 |  |  | //                        flowLog.setFid(String.valueOf(flowId)); | 
 |  |  | //                        flowLog.setSpare2(wrkMast.getWrkNo().toString()); | 
 |  |  | //                        flowLog.setLocNo(locNo); | 
 |  |  | //                        flowLog.setSpare1(wrkMast.getBarcode()); | 
 |  |  | //                        flowLog.setOpType(3L); | 
 |  |  | //                        flowLog.setOrderNo(agvWaitPakin.getOrderNo()); | 
 |  |  | //                        flowLog.setThreeCode(agvWaitPakin.getThreeCode()); | 
 |  |  | //                        flowLog.setMatnr(agvWaitPakin.getMatnr()); | 
 |  |  | //                        flowLog.setMaktx(agvWaitPakin.getMaktx()); | 
 |  |  | //                        flowLog.setOrderPrevious(orderDetl.getAnfme()); | 
 |  |  | //                        flowLog.setOrderCurrent(orderDetl.getAnfme()); | 
 |  |  | //                        flowLog.setOrderChanged(0.0); | 
 |  |  | // | 
 |  |  | //                        flowLog.setQtyPrevious(orderDetl.getQty()); | 
 |  |  | //                        flowLog.setQtyCurrent(orderDetl.getQty()-agvWaitPakin.getAnfme()); | 
 |  |  | //                        flowLog.setQtyChanged(-agvWaitPakin.getAnfme()); | 
 |  |  | // | 
 |  |  | //                        flowLog.setLocPrevious(0.0); | 
 |  |  | //                        flowLog.setLocCurrent(0.0); | 
 |  |  | //                        flowLog.setLocChanged(-agvWaitPakin.getAnfme()); | 
 |  |  | // | 
 |  |  | //                        flowLog.setUserId(userId); | 
 |  |  | //                        flowLog.setAppeTime(new Date()); | 
 |  |  | //                        if (!flowLogService.insert(flowLog)) { | 
 |  |  | //                            throw new CoolException("同步半成品调拨单流水记录失败"); | 
 |  |  | //                        } | 
 |  |  |                         // 删除组托档 | 
 |  |  |                         if (!agvWaitPakinService.delete(new EntityWrapper<AgvWaitPakin>().eq("supp_code",agvWaitPakin.getSuppCode()).eq("matnr",agvWaitPakin.getMatnr()).eq("three_code",agvWaitPakin.getThreeCode()))) { | 
 |  |  |                             throw new CoolException("入库通知档取消失败"); | 
 |  |  | 
 |  |  |                         OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("three_code", agvLocDetl.getThreeCode()).eq("matnr", agvLocDetl.getMatnr()).eq("order_no", "DB" + agvLocDetl.getOrderNo())); | 
 |  |  |                         orderDetl.setQty(orderDetl.getQty() + agvLocDetl.getAnfme()); | 
 |  |  |                         if (!orderDetlService.updateById(orderDetl)) { | 
 |  |  |                             throw new CoolException("保存工作明细失败"); | 
 |  |  |                             throw new CoolException("更新订单明细失败"); | 
 |  |  |                         } | 
 |  |  | //                        FlowLog flowLog = new FlowLog(); | 
 |  |  | //                        flowLog.setFid(String.valueOf(flowId)); | 
 |  |  | //                        flowLog.setSpare2(wrkMast.getWrkNo().toString()); | 
 |  |  | //                        flowLog.setLocNo(locNo); | 
 |  |  | //                        flowLog.setSpare1(wrkMast.getBarcode()); | 
 |  |  | //                        flowLog.setOpType(8L); | 
 |  |  | //                        flowLog.setOrderNo(agvLocDetl.getOrderNo()); | 
 |  |  | //                        flowLog.setThreeCode(agvLocDetl.getThreeCode()); | 
 |  |  | //                        flowLog.setMatnr(agvLocDetl.getMatnr()); | 
 |  |  | //                        flowLog.setMaktx(agvLocDetl.getMaktx()); | 
 |  |  | //                        flowLog.setOrderPrevious(orderDetl.getAnfme()); | 
 |  |  | //                        flowLog.setOrderCurrent(orderDetl.getAnfme()); | 
 |  |  | //                        flowLog.setOrderChanged(0.0); | 
 |  |  | // | 
 |  |  | //                        flowLog.setQtyPrevious(orderDetl.getQty()); | 
 |  |  | //                        flowLog.setQtyCurrent(orderDetl.getQty() + agvLocDetl.getAnfme()); | 
 |  |  | //                        flowLog.setQtyChanged(-agvLocDetl.getAnfme()); | 
 |  |  | // | 
 |  |  | //                        flowLog.setLocPrevious(0.0); | 
 |  |  | //                        flowLog.setLocCurrent(agvLocDetl.getAnfme()); | 
 |  |  | //                        flowLog.setLocChanged(agvLocDetl.getAnfme()); | 
 |  |  | // | 
 |  |  | //                        flowLog.setUserId(userId); | 
 |  |  | //                        flowLog.setAppeTime(new Date()); | 
 |  |  | //                        if (!flowLogService.insert(flowLog)) { | 
 |  |  | //                            throw new CoolException("同步半成品调拨单流水记录失败"); | 
 |  |  | //                        } | 
 |  |  |                     } | 
 |  |  |                 } else { | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 // 自动调拨出库取消 | 
 |  |  |             } else if(wrkMast.getIoType() == 108 || wrkMast.getIoType() == 111 || wrkMast.getIoType() == 112) { | 
 |  |  |                 if (wrkMast.getIoType() == 112) { | 
 |  |  | 
 |  |  |                     if (!orderDetlService.update(orderDetl,new EntityWrapper<OrderDetl>().eq("order_no","DB" + agvLocDetl.getOrderNo()).eq("matnr", agvLocDetl.getMatnr()).eq("three_code",agvLocDetl.getThreeCode()))){ | 
 |  |  |                         throw new CoolException("修改订单明细失败,请联系管理员"+agvLocDetl.getOrderNo()+agvLocDetl.getMatnr()); | 
 |  |  |                     } | 
 |  |  | //                    FlowLog flowLog = new FlowLog(); | 
 |  |  | //                    flowLog.setFid(String.valueOf(flowId)); | 
 |  |  | //                    flowLog.setSpare2(wrkMast.getWrkNo().toString()); | 
 |  |  | //                    flowLog.setLocNo(locNo); | 
 |  |  | //                    flowLog.setSpare1(wrkMast.getBarcode()); | 
 |  |  | //                    flowLog.setOpType(9L); | 
 |  |  | //                    flowLog.setOrderNo(agvLocDetl.getOrderNo()); | 
 |  |  | //                    flowLog.setThreeCode(agvLocDetl.getThreeCode()); | 
 |  |  | //                    flowLog.setMatnr(agvLocDetl.getMatnr()); | 
 |  |  | //                    flowLog.setMaktx(agvLocDetl.getMaktx()); | 
 |  |  | //                    flowLog.setOrderPrevious(orderDetl.getAnfme()); | 
 |  |  | //                    flowLog.setOrderCurrent(orderDetl.getAnfme()); | 
 |  |  | //                    flowLog.setOrderChanged(0.0); | 
 |  |  | // | 
 |  |  | //                    flowLog.setQtyPrevious(orderDetl.getQty()); | 
 |  |  | //                    flowLog.setQtyCurrent(orderDetl.getQty() - agvLocDetl.getAnfme()); | 
 |  |  | //                    flowLog.setQtyChanged(- agvLocDetl.getAnfme()); | 
 |  |  | // | 
 |  |  | //                    flowLog.setLocPrevious(0.0); | 
 |  |  | //                    flowLog.setLocCurrent(agvLocDetl.getAnfme()); | 
 |  |  | //                    flowLog.setLocChanged(agvLocDetl.getAnfme()); | 
 |  |  | // | 
 |  |  | //                    flowLog.setUserId(userId); | 
 |  |  | //                    flowLog.setAppeTime(new Date()); | 
 |  |  | //                    if (!flowLogService.insert(flowLog)) { | 
 |  |  | //                        throw new CoolException("同步半成品调拨单流水记录失败"); | 
 |  |  | //                    } | 
 |  |  |                 } | 
 |  |  |                 //出库取消 | 
 |  |  |             } else { | 
 
| New file | 
 |  |  | 
 |  |  | package com.zy.asrs.service.impl; | 
 |  |  |  | 
 |  |  | import com.zy.asrs.mapper.FlowLogMapper; | 
 |  |  | import com.zy.asrs.entity.FlowLog; | 
 |  |  | import com.zy.asrs.service.FlowLogService; | 
 |  |  | import com.baomidou.mybatisplus.service.impl.ServiceImpl; | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  |  | 
 |  |  | @Service("flowLogService") | 
 |  |  | public class FlowLogServiceImpl extends ServiceImpl<FlowLogMapper, FlowLog> implements FlowLogService { | 
 |  |  |  | 
 |  |  | } | 
 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public LocDetl selectItem(String locNo, String matnr, String batch, String csocode, String isoCode) { | 
 |  |  |         return this.baseMapper.selectItemByOrderNo(locNo, matnr, batch,csocode,isoCode); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public List<LocDetl> searchByLike(String orderNo, String matnr, String maktx, String specs, String locNo) { | 
 |  |  |         if (Cools.isEmpty(orderNo) && Cools.isEmpty(matnr) && Cools.isEmpty(maktx) && Cools.isEmpty(specs) && Cools.isEmpty(locNo)) { | 
 |  |  |             return new ArrayList<LocDetl>(); | 
 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public OrderDetl selectItem(String orderNo, String matnr, String threeCode) { | 
 |  |  |         return this.baseMapper.selectItemByOrderNo2(orderNo, matnr, threeCode); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public OrderDetl selectItemNoneOfBatch(String orderNo, String matnr) { | 
 |  |  |         return this.baseMapper.selectItemNoneOfBatch(orderNo, matnr); | 
 |  |  |     } | 
 
 |  |  | 
 |  |  |     private DocTypeService docTypeService; | 
 |  |  |     @Autowired | 
 |  |  |     private AgvWaitPakinService agvWaitPakinService; | 
 |  |  |     @Autowired | 
 |  |  |     private AgvLocDetlService agvLocDetlService; | 
 |  |  |     @Autowired | 
 |  |  |     private FlowLogService flowLogService; | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     @Transactional | 
 |  |  | 
 |  |  |             throw new CoolException("当前工作状态无法取消"); | 
 |  |  |         } | 
 |  |  |         // 订单关联 | 
 |  |  |         long flowId = snowflakeIdWorker.nextId(); | 
 |  |  |         List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo()); | 
 |  |  |         for (WrkDetl wrkDetl : wrkDetls) { | 
 |  |  |             if (!Cools.isEmpty(wrkDetl.getOrderNo())) { | 
 |  |  |                 if (!BaseController.isJSON(wrkDetl.getOrderNo())) { | 
 |  |  |  | 
 |  |  |                     if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme(),wrkDetl.getThreeCode(),wrkDetl.getDeadTime())) { | 
 |  |  |                         throw new CoolException("订单数据回滚失败"); | 
 |  |  |                     } | 
 |  |  | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |         // 取消操作人员记录 | 
 |  |  |         wrkMast.setManuType("手动取消"); | 
 
| New file | 
 |  |  | 
 |  |  | package com.zy.asrs.task; | 
 |  |  |  | 
 |  |  | import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
 |  |  | import com.zy.asrs.entity.ApiLog; | 
 |  |  | import com.zy.asrs.entity.WrkMast; | 
 |  |  | import com.zy.asrs.service.ApiLogService; | 
 |  |  | import com.zy.asrs.task.core.ReturnT; | 
 |  |  | import com.zy.asrs.task.handler.LogClearHandler; | 
 |  |  | import com.zy.system.entity.OperateLog; | 
 |  |  | import com.zy.system.service.OperateLogService; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.scheduling.annotation.Scheduled; | 
 |  |  | import org.springframework.stereotype.Component; | 
 |  |  |  | 
 |  |  | import java.time.LocalDateTime; | 
 |  |  | import java.time.temporal.ChronoUnit; | 
 |  |  | import java.util.Date; | 
 |  |  | import java.util.List; | 
 |  |  |  | 
 |  |  | @Component | 
 |  |  | public class LogClearScheduler { | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private ApiLogService apiLogService; | 
 |  |  |     @Autowired | 
 |  |  |     private OperateLogService operateLogService; | 
 |  |  |     @Autowired | 
 |  |  |     private LogClearHandler logClearHandler; | 
 |  |  | //    每天0点开始 | 
 |  |  | //    @Scheduled(cron = "0/1 * * * * ? ") | 
 |  |  |     @Scheduled(cron = "* * 0 * * ? ") | 
 |  |  |     private void apiLogExecute(){ | 
 |  |  |         LocalDateTime oneMonthAgo = LocalDateTime.now().minus(1, ChronoUnit.MONTHS); | 
 |  |  |         List<ApiLog> apiLogs = apiLogService.selectList(new EntityWrapper<ApiLog>().lt("create_time", oneMonthAgo)); | 
 |  |  |         for(ApiLog apiLog : apiLogs){ | 
 |  |  |             ReturnT<String> returnT = logClearHandler.startClearApiLog(apiLog); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Scheduled(cron = "* * 0 * * ? ") | 
 |  |  |     private void sysOperateLogExecute(){ | 
 |  |  |         LocalDateTime oneMonthAgo = LocalDateTime.now().minus(2, ChronoUnit.MONTHS); | 
 |  |  |         List<OperateLog> operateLogs = operateLogService.selectList(new EntityWrapper<OperateLog>().lt("create_time", oneMonthAgo)); | 
 |  |  |         for(OperateLog operateLog : operateLogs){ | 
 |  |  |             ReturnT<String> returnT = logClearHandler.startClearOperateLog(operateLog); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | package com.zy.asrs.task.handler; | 
 |  |  |  | 
 |  |  | import com.zy.asrs.entity.AgvWrkMast; | 
 |  |  | import com.zy.asrs.entity.ApiLog; | 
 |  |  | import com.zy.asrs.entity.WrkMastExecute; | 
 |  |  | import com.zy.asrs.service.ApiLogService; | 
 |  |  | import com.zy.asrs.task.AbstractHandler; | 
 |  |  | import com.zy.asrs.task.core.ReturnT; | 
 |  |  | import com.zy.system.entity.OperateLog; | 
 |  |  | import com.zy.system.service.OperateLogService; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  | import org.springframework.transaction.annotation.Transactional; | 
 |  |  |  | 
 |  |  | import java.util.Date; | 
 |  |  |  | 
 |  |  | @Slf4j | 
 |  |  | @Service | 
 |  |  | @Transactional | 
 |  |  | public class LogClearHandler extends AbstractHandler<String> { | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private ApiLogService apiLogService; | 
 |  |  |     @Autowired | 
 |  |  |     private OperateLogService operateLogService; | 
 |  |  |  | 
 |  |  |     public ReturnT<String> startClearApiLog(ApiLog apiLog) {//1-4 | 
 |  |  |         try{ | 
 |  |  |             if (apiLogService.deleteById(apiLog)) { | 
 |  |  |                 return SUCCESS; | 
 |  |  |             } else { | 
 |  |  |                 return FAIL; | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |             log.error("apiLog清除===》异常:"+e.getMessage()); | 
 |  |  |         } | 
 |  |  |         return SUCCESS; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public ReturnT<String> startClearOperateLog(OperateLog operateLog) {//1-4 | 
 |  |  |         try{ | 
 |  |  |             if (operateLogService.deleteById(operateLog)) { | 
 |  |  |                 return SUCCESS; | 
 |  |  |             } else { | 
 |  |  |                 return FAIL; | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |             log.error("apiLog清除===》异常:"+e.getMessage()); | 
 |  |  |         } | 
 |  |  |         return SUCCESS; | 
 |  |  |     } | 
 |  |  | } | 
 
 |  |  | 
 |  |  |         generator.url="127.0.0.1:1433;databasename=phyzasrs"; | 
 |  |  |         generator.username="sa"; | 
 |  |  |         generator.password="sa@123"; | 
 |  |  |         generator.table="agv_wrk_log"; | 
 |  |  |         generator.table="man_flow_log"; | 
 |  |  |         generator.packagePath="com.zy.asrs"; | 
 |  |  |         generator.sql = false; | 
 |  |  |         generator.build(); | 
 
| New file | 
 |  |  | 
 |  |  | <?xml version="1.0" encoding="UTF-8"?> | 
 |  |  | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 
 |  |  | <mapper namespace="com.zy.asrs.mapper.FlowLogMapper"> | 
 |  |  |  | 
 |  |  |     <!-- 通用查询映射结果 --> | 
 |  |  |     <resultMap id="BaseResultMap" type="com.zy.asrs.entity.FlowLog"> | 
 |  |  |         <result column="id" property="id" /> | 
 |  |  |         <result column="fid" property="fid" /> | 
 |  |  |         <result column="op_type" property="opType" /> | 
 |  |  |         <result column="order_no" property="orderNo" /> | 
 |  |  |         <result column="three_code" property="threeCode" /> | 
 |  |  |         <result column="loc_no" property="locNo" /> | 
 |  |  |         <result column="matnr" property="matnr" /> | 
 |  |  |         <result column="maktx" property="maktx" /> | 
 |  |  |         <result column="order_previous" property="orderPrevious" /> | 
 |  |  |         <result column="order_current" property="orderCurrent" /> | 
 |  |  |         <result column="order_changed" property="orderChanged" /> | 
 |  |  |         <result column="qty_previous" property="qtyPrevious" /> | 
 |  |  |         <result column="qty_current" property="qtyCurrent" /> | 
 |  |  |         <result column="qty_changed" property="qtyChanged" /> | 
 |  |  |         <result column="loc_previous" property="locPrevious" /> | 
 |  |  |         <result column="loc_current" property="locCurrent" /> | 
 |  |  |         <result column="loc_changed" property="locChanged" /> | 
 |  |  |         <result column="spare1" property="spare1" /> | 
 |  |  |         <result column="spare2" property="spare2" /> | 
 |  |  |         <result column="spare3" property="spare3" /> | 
 |  |  |         <result column="spare4" property="spare4" /> | 
 |  |  |         <result column="spare5" property="spare5" /> | 
 |  |  |         <result column="user_id" property="userId" /> | 
 |  |  |         <result column="appe_time" property="appeTime" /> | 
 |  |  |  | 
 |  |  |     </resultMap> | 
 |  |  |  | 
 |  |  | </mapper> | 
 
 |  |  | 
 |  |  |         <include refid="batchSeq"></include> | 
 |  |  |     </select> | 
 |  |  |  | 
 |  |  |     <select id="selectItemByOrderNo" resultMap="BaseResultMap"> | 
 |  |  |         select * from asr_loc_detl | 
 |  |  |         where 1=1 | 
 |  |  |         and loc_no = #{locNo} | 
 |  |  |         and matnr = #{matnr} | 
 |  |  |         <if test="batch!=null and batch!='' "> | 
 |  |  |             and batch = #{batch} | 
 |  |  |         </if> | 
 |  |  |         <if test="csocode!=null and csocode!='' "> | 
 |  |  |             and three_code = #{csocode} | 
 |  |  |         </if> | 
 |  |  |         <if test="isocode!=null and isocode!='' "> | 
 |  |  |             and dead_time = #{isocode} | 
 |  |  |         </if> | 
 |  |  |     </select> | 
 |  |  |  | 
 |  |  |     <delete id="deleteItem"> | 
 |  |  |         delete from asr_loc_detl | 
 |  |  |         where 1=1 | 
 
 |  |  | 
 |  |  |         </if> | 
 |  |  |     </select> | 
 |  |  |  | 
 |  |  |     <select id="selectItemByOrderNo2" resultMap="BaseResultMap"> | 
 |  |  |         select * from man_order_detl | 
 |  |  |         where 1=1 | 
 |  |  |         and order_no = #{orderNo} | 
 |  |  |         and matnr = #{matnr} | 
 |  |  |         <if test="threeCode!=null and threeCode!='' "> | 
 |  |  |             and three_code = #{threeCode} | 
 |  |  |         </if> | 
 |  |  |  | 
 |  |  |     </select> | 
 |  |  |  | 
 |  |  |     <select id="selectItemNoneOfBatch" resultMap="BaseResultMap"> | 
 |  |  |         select top 1 * from man_order_detl | 
 |  |  |         where 1=1 | 
 
| New file | 
 |  |  | 
 |  |  | var pageCurr; | 
 |  |  | layui.config({ | 
 |  |  |     base: baseUrl + "/static/layui/lay/modules/" | 
 |  |  | }).use(['table','laydate', 'form', 'admin'], function(){ | 
 |  |  |     var table = layui.table; | 
 |  |  |     var $ = layui.jquery; | 
 |  |  |     var layer = layui.layer; | 
 |  |  |     var layDate = layui.laydate; | 
 |  |  |     var form = layui.form; | 
 |  |  |     var admin = layui.admin; | 
 |  |  |  | 
 |  |  |     // 数据渲染 | 
 |  |  |     tableIns = table.render({ | 
 |  |  |         elem: '#flowLog', | 
 |  |  |         headers: {token: localStorage.getItem('token')}, | 
 |  |  |         url: baseUrl+'/flowLog/list/auth', | 
 |  |  |         page: true, | 
 |  |  |         limit: 15, | 
 |  |  |         limits: [15, 30, 50, 100, 200, 500], | 
 |  |  |         toolbar: '#toolbar', | 
 |  |  |         cellMinWidth: 50, | 
 |  |  |         height: 'full-120', | 
 |  |  |         even: true, | 
 |  |  |         cols: [[ | 
 |  |  |             {type: 'checkbox', merge: ['fid']} | 
 |  |  |             ,{field: 'id', align: 'center',title: '数据编号',hide: true} | 
 |  |  |             ,{field: 'fid', align: 'center',title: '流水号',merge: true} | 
 |  |  |             ,{field: 'spare2', align: 'center',title: '工作号'} | 
 |  |  |             ,{field: 'opType$', align: 'center',title: '操作类型'} | 
 |  |  |             ,{field: 'orderNo', align: 'center',title: '订单号'} | 
 |  |  |             ,{field: 'threeCode', align: 'center',title: '销售单号'} | 
 |  |  |             ,{field: 'locNo', align: 'center',title: '库位号'} | 
 |  |  |             ,{field: 'spare1', align: 'center',title: '货架码'} | 
 |  |  |             ,{field: 'matnr', align: 'center',title: '物料号'} | 
 |  |  |             ,{field: 'maktx', align: 'center',title: '物料名称'} | 
 |  |  |             ,{field: 'orderPrevious', align: 'center',title: '订单数量变更前'} | 
 |  |  |             ,{field: 'orderCurrent', align: 'center',title: '订单数量变更后'} | 
 |  |  |             ,{field: 'orderChanged', align: 'center',title: '订单数量变更'} | 
 |  |  |             ,{field: 'qtyPrevious', align: 'center',title: '作业数量变更前'} | 
 |  |  |             ,{field: 'qtyCurrent', align: 'center',title: '作业数量变更后'} | 
 |  |  |             ,{field: 'qtyChanged', align: 'center',title: '作业数量变更'} | 
 |  |  |             ,{field: 'locPrevious', align: 'center',title: '变更前数量'} | 
 |  |  |             ,{field: 'locCurrent', align: 'center',title: '变更后数量'} | 
 |  |  |             ,{field: 'locChanged', align: 'center',title: '变更值'} | 
 |  |  |             ,{field: 'spare1', align: 'center',title: '备用1',hide: true} | 
 |  |  |             ,{field: 'spare2', align: 'center',title: '备用2',hide: true} | 
 |  |  |             ,{field: 'spare3', align: 'center',title: '备用3',hide: true} | 
 |  |  |             ,{field: 'spare4', align: 'center',title: '备用4',hide: true} | 
 |  |  |             ,{field: 'spare5', align: 'center',title: '备用5',hide: true} | 
 |  |  |             ,{field: 'userId', align: 'center',title: '操作员'} | 
 |  |  |             ,{field: 'appeTime$', align: 'center',title: '更新时间'} | 
 |  |  |  | 
 |  |  |             ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:120,hide: true} | 
 |  |  |         ]], | 
 |  |  |         request: { | 
 |  |  |             pageName: 'curr', | 
 |  |  |             pageSize: 'limit' | 
 |  |  |         }, | 
 |  |  |         parseData: function (res) { | 
 |  |  |             return { | 
 |  |  |                 'code': res.code, | 
 |  |  |                 'msg': res.msg, | 
 |  |  |                 'count': res.data.total, | 
 |  |  |                 'data': res.data.records | 
 |  |  |             } | 
 |  |  |         }, | 
 |  |  |         response: { | 
 |  |  |             statusCode: 200 | 
 |  |  |         }, | 
 |  |  |         done: function(res, curr, count) { | 
 |  |  |             if (res.code === 403) { | 
 |  |  |                 top.location.href = baseUrl+"/"; | 
 |  |  |             } | 
 |  |  |             pageCurr=curr; | 
 |  |  |             limit(); | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 监听排序事件 | 
 |  |  |     table.on('sort(flowLog)', function (obj) { | 
 |  |  |         var searchData = {}; | 
 |  |  |         $.each($('#search-box [name]').serializeArray(), function() { | 
 |  |  |             searchData[this.name] = this.value; | 
 |  |  |         }); | 
 |  |  |         searchData['orderByField'] = obj.field; | 
 |  |  |         searchData['orderByType'] = obj.type; | 
 |  |  |         tableIns.reload({ | 
 |  |  |             where: searchData, | 
 |  |  |             page: {curr: 1} | 
 |  |  |         }); | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 监听头工具栏事件 | 
 |  |  |     table.on('toolbar(flowLog)', function (obj) { | 
 |  |  |         var checkStatus = table.checkStatus(obj.config.id).data; | 
 |  |  |         switch(obj.event) { | 
 |  |  |             case 'addData': | 
 |  |  |                 showEditModel(); | 
 |  |  |                 break; | 
 |  |  |             case 'deleteData': | 
 |  |  |                if (checkStatus.length === 0) { | 
 |  |  |                    layer.msg('请选择要删除的数据', {icon: 2}); | 
 |  |  |                    return; | 
 |  |  |                } | 
 |  |  |                del(checkStatus.map(function (d) { | 
 |  |  |                    return d.id; | 
 |  |  |                })); | 
 |  |  |                break; | 
 |  |  |             case 'exportData': | 
 |  |  |                 admin.confirm('确定导出Excel吗', {shadeClose: true}, function(){ | 
 |  |  |                     var titles=[]; | 
 |  |  |                     var fields=[]; | 
 |  |  |                     obj.config.cols[0].map(function (col) { | 
 |  |  |                         if (col.type === 'normal' && col.hide === false && col.toolbar == null) { | 
 |  |  |                             titles.push(col.title); | 
 |  |  |                             fields.push(col.field); | 
 |  |  |                         } | 
 |  |  |                     }); | 
 |  |  |                     var exportData = {}; | 
 |  |  |                     $.each($('#search-box [name]').serializeArray(), function() { | 
 |  |  |                         exportData[this.name] = this.value; | 
 |  |  |                     }); | 
 |  |  |                     var param = { | 
 |  |  |                         'flowLog': exportData, | 
 |  |  |                         'fields': fields | 
 |  |  |                     }; | 
 |  |  |                     $.ajax({ | 
 |  |  |                         url: baseUrl+"/flowLog/export/auth", | 
 |  |  |                         headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                         data: JSON.stringify(param), | 
 |  |  |                         dataType:'json', | 
 |  |  |                         contentType:'application/json;charset=UTF-8', | 
 |  |  |                         method: 'POST', | 
 |  |  |                         success: function (res) { | 
 |  |  |                             layer.closeAll(); | 
 |  |  |                             if (res.code === 200) { | 
 |  |  |                                 table.exportFile(titles,res.data,'xls'); | 
 |  |  |                             } else if (res.code === 403) { | 
 |  |  |                                 top.location.href = baseUrl+"/"; | 
 |  |  |                             } else { | 
 |  |  |                                 layer.msg(res.msg, {icon: 2}) | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     }); | 
 |  |  |                 }); | 
 |  |  |                 break; | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 监听行工具事件 | 
 |  |  |     table.on('tool(flowLog)', function(obj){ | 
 |  |  |         var data = obj.data; | 
 |  |  |         switch (obj.event) { | 
 |  |  |             case 'edit': | 
 |  |  |                 showEditModel(data); | 
 |  |  |                 break; | 
 |  |  |             case "del": | 
 |  |  |                 del([data.id]); | 
 |  |  |                 break; | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     /* 弹窗 - 新增、修改 */ | 
 |  |  |     function showEditModel(mData) { | 
 |  |  |         admin.open({ | 
 |  |  |             type: 1, | 
 |  |  |             area: '600px', | 
 |  |  |             title: (mData ? '修改' : '添加') + '订单状态', | 
 |  |  |             content: $('#editDialog').html(), | 
 |  |  |             success: function (layero, dIndex) { | 
 |  |  |                 layDateRender(mData); | 
 |  |  |                 form.val('detail', mData); | 
 |  |  |                 form.on('submit(editSubmit)', function (data) { | 
 |  |  |                     var loadIndex = layer.load(2); | 
 |  |  |                     $.ajax({ | 
 |  |  |                         url: baseUrl+"/flowLog/"+(mData?'update':'add')+"/auth", | 
 |  |  |                         headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                         data: data.field, | 
 |  |  |                         method: 'POST', | 
 |  |  |                         success: function (res) { | 
 |  |  |                             layer.close(loadIndex); | 
 |  |  |                             if (res.code === 200){ | 
 |  |  |                                 layer.close(dIndex); | 
 |  |  |                                 layer.msg(res.msg, {icon: 1}); | 
 |  |  |                                 tableReload(); | 
 |  |  |                             } else if (res.code === 403){ | 
 |  |  |                                 top.location.href = baseUrl+"/"; | 
 |  |  |                             }else { | 
 |  |  |                                 layer.msg(res.msg, {icon: 2}); | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     }) | 
 |  |  |                     return false; | 
 |  |  |                 }); | 
 |  |  |                 $(layero).children('.layui-layer-content').css('overflow', 'visible'); | 
 |  |  |                 layui.form.render('select'); | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /* 删除 */ | 
 |  |  |     function del(ids) { | 
 |  |  |         layer.confirm('确定要删除选中数据吗?', { | 
 |  |  |             skin: 'layui-layer-admin', | 
 |  |  |             shade: .1 | 
 |  |  |         }, function (i) { | 
 |  |  |             layer.close(i); | 
 |  |  |             var loadIndex = layer.load(2); | 
 |  |  |             $.ajax({ | 
 |  |  |                 url: baseUrl+"/flowLog/delete/auth", | 
 |  |  |                 headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                 data: {ids: ids}, | 
 |  |  |                 method: 'POST', | 
 |  |  |                 success: function (res) { | 
 |  |  |                     layer.close(loadIndex); | 
 |  |  |                     if (res.code === 200){ | 
 |  |  |                         layer.msg(res.msg, {icon: 1}); | 
 |  |  |                         tableReload(); | 
 |  |  |                     } else if (res.code === 403){ | 
 |  |  |                         top.location.href = baseUrl+"/"; | 
 |  |  |                     } else { | 
 |  |  |                         layer.msg(res.msg, {icon: 2}); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             }) | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 搜索 | 
 |  |  |     form.on('submit(search)', function (data) { | 
 |  |  |         pageCurr = 1; | 
 |  |  |         tableReload(false); | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 重置 | 
 |  |  |     form.on('submit(reset)', function (data) { | 
 |  |  |         pageCurr = 1; | 
 |  |  |         clearFormVal($('#search-box')); | 
 |  |  |         tableReload(false); | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 时间选择器 | 
 |  |  |     function layDateRender(data) { | 
 |  |  |         setTimeout(function () { | 
 |  |  |             layDate.render({ | 
 |  |  |                 elem: '.layui-laydate-range' | 
 |  |  |                 ,type: 'datetime' | 
 |  |  |                 ,range: true | 
 |  |  |             }); | 
 |  |  |             layDate.render({ | 
 |  |  |                 elem: '#appeTime\\$', | 
 |  |  |                 type: 'datetime', | 
 |  |  |                 value: data!==undefined?data['appeTime\\$']:null | 
 |  |  |             }); | 
 |  |  |  | 
 |  |  |         }, 300); | 
 |  |  |     } | 
 |  |  |     layDateRender(); | 
 |  |  |  | 
 |  |  | }); | 
 |  |  |  | 
 |  |  | // 关闭动作 | 
 |  |  | $(document).on('click','#data-detail-close', function () { | 
 |  |  |     parent.layer.closeAll(); | 
 |  |  | }); | 
 |  |  |  | 
 |  |  | function tableReload(child) { | 
 |  |  |     var searchData = {}; | 
 |  |  |     $.each($('#search-box [name]').serializeArray(), function() { | 
 |  |  |         searchData[this.name] = this.value; | 
 |  |  |     }); | 
 |  |  |     tableIns.reload({ | 
 |  |  |         where: searchData, | 
 |  |  |         page: {curr: pageCurr} | 
 |  |  |      }); | 
 |  |  | } | 
 
 |  |  | 
 |  |  |             layer.open({ | 
 |  |  |                 type: 1, | 
 |  |  |                 title: false, | 
 |  |  |                 area: '1460px', | 
 |  |  |                 offset: [top + 'px', (left - 900 + $a.outerWidth()) + 'px'], | 
 |  |  |                 area: '1100px', | 
 |  |  |                 offset: [top + 'px', (left - 530 + $a.outerWidth()) + 'px'], | 
 |  |  |                 shade: .01, | 
 |  |  |                 shadeClose: true, | 
 |  |  |                 fixed: false, | 
 
 |  |  | 
 |  |  |                     </div> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <div class="layui-input-inline"> | 
 |  |  |                             <input class="layui-input" type="text" name="request" placeholder="请求内容" autocomplete="off"> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <div class="layui-input-inline"> | 
 |  |  |                             <input class="layui-input" type="text" name="condition" placeholder="请输入" autocomplete="off"> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 
| New file | 
 |  |  | 
 |  |  | <!DOCTYPE html> | 
 |  |  | <html lang="en"> | 
 |  |  | <head> | 
 |  |  |     <meta charset="utf-8"> | 
 |  |  |     <title></title> | 
 |  |  |     <meta name="renderer" content="webkit"> | 
 |  |  |     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> | 
 |  |  |     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> | 
 |  |  |     <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> | 
 |  |  |     <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all"> | 
 |  |  |     <link rel="stylesheet" href="../../static/css/cool.css" media="all"> | 
 |  |  | </head> | 
 |  |  | <body> | 
 |  |  |  | 
 |  |  | <div class="layui-fluid"> | 
 |  |  |     <div class="layui-card"> | 
 |  |  |         <div class="layui-card-body"> | 
 |  |  |             <div class="layui-form toolbar" id="search-box"> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <div class="layui-input-inline"> | 
 |  |  |                             <input class="layui-input" type="text" name="fid" placeholder="流水号" autocomplete="off"> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <div class="layui-input-inline"> | 
 |  |  |                             <input class="layui-input" type="text" name="spare2" placeholder="工作号" autocomplete="off"> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <div class="layui-input-inline"> | 
 |  |  |                             <input class="layui-input" type="text" name="order_no" placeholder="订单号" autocomplete="off"> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <div class="layui-input-inline"> | 
 |  |  |                             <input class="layui-input" type="text" name="three_code" placeholder="销售单号" autocomplete="off"> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <div class="layui-input-inline"> | 
 |  |  |                             <input class="layui-input" type="text" name="loc_no" placeholder="库位号" autocomplete="off"> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <div class="layui-input-inline"> | 
 |  |  |                             <input class="layui-input" type="text" name="spare1" placeholder="货架码" autocomplete="off"> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <div class="layui-input-inline"> | 
 |  |  |                             <input class="layui-input" type="text" name="matnr" placeholder="物料号" autocomplete="off"> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="layui-inline"> | 
 |  |  |                         <div class="layui-input-inline"> | 
 |  |  |                             <input class="layui-input" type="text" name="userId" placeholder="操作员" autocomplete="off"> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  | <!--                     <div class="layui-inline" style="width: 300px">--> | 
 |  |  | <!--                        <div class="layui-input-inline">--> | 
 |  |  | <!--                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="起始时间 - 终止时间" autocomplete="off" style="width: 300px">--> | 
 |  |  | <!--                        </div>--> | 
 |  |  | <!--                    </div>--> | 
 |  |  | <!--                    <div class="layui-inline">--> | 
 |  |  | <!--                        <div class="layui-input-inline">--> | 
 |  |  | <!--                            <input class="layui-input" type="text" name="condition" placeholder="请输入" autocomplete="off">--> | 
 |  |  | <!--                        </div>--> | 
 |  |  | <!--                    </div>--> | 
 |  |  |                     <div class="layui-inline">  | 
 |  |  |                         <button class="layui-btn icon-btn" lay-filter="search" lay-submit> | 
 |  |  |                             <i class="layui-icon"></i>搜索 | 
 |  |  |                         </button> | 
 |  |  |                         <button class="layui-btn icon-btn" lay-filter="reset" lay-submit> | 
 |  |  |                             <i class="layui-icon"></i>重置 | 
 |  |  |                         </button> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |             <table class="layui-hide" id="flowLog" lay-filter="flowLog"></table> | 
 |  |  |         </div> | 
 |  |  |     </div> | 
 |  |  | </div> | 
 |  |  |  | 
 |  |  | <script type="text/html" id="toolbar"> | 
 |  |  |     <div class="layui-btn-container"> | 
 |  |  | <!--        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">新增</button>--> | 
 |  |  | <!--        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">删除</button>--> | 
 |  |  | <!--        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">导出</button>--> | 
 |  |  |     </div> | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <script type="text/html" id="operate"> | 
 |  |  |     <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">修改</a> | 
 |  |  |     <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">删除</a> | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script> | 
 |  |  | <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script> | 
 |  |  | <script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> | 
 |  |  | <script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> | 
 |  |  | <script type="text/javascript" src="../../static/js/flowLog/flowLog.js" charset="utf-8"></script> | 
 |  |  | </body> | 
 |  |  | <!-- 表单弹窗 --> | 
 |  |  | <script type="text/html" id="editDialog"> | 
 |  |  |     <form id="detail" lay-filter="detail" class="layui-form admin-form model-form"> | 
 |  |  |         <input name="id" type="hidden"> | 
 |  |  |         <div class="layui-row"> | 
 |  |  |             <div class="layui-col-md12"> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label layui-form-required">数据编号: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="id" placeholder="请输入数据编号" lay-vertype="tips" lay-verify="required"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">流水号: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="fid" placeholder="请输入流水号"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |  | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">操作类型: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="opType" placeholder="请输入操作类型"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">订单号: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="orderNo" placeholder="请输入订单号"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">销售单号: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="threeCode" placeholder="请输入销售单号"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">库位号: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="locNo" placeholder="请输入库位号"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">物料号: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="matnr" placeholder="请输入物料号"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">物料名称: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="maktx" placeholder="请输入物料名称"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">订单数量变更前: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="orderPrevious" placeholder="请输入订单数量变更前"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">订单数量变更后: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="orderCurrent" placeholder="请输入订单数量变更后"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">订单数量变更: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="orderChanged" placeholder="请输入订单数量变更"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">作业数量变更前: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="qtyPrevious" placeholder="请输入作业数量变更前"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">作业数量变更后: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="qtyCurrent" placeholder="请输入作业数量变更后"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">作业数量变更: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="qtyChanged" placeholder="请输入作业数量变更"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">变更前数量: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="locPrevious" placeholder="请输入变更前数量"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">变更后数量: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="locCurrent" placeholder="请输入变更后数量"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">变更值: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="locChanged" placeholder="请输入变更值"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">备用1: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="spare1" placeholder="请输入备用1"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">备用2: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="spare2" placeholder="请输入备用2"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">备用3: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="spare3" placeholder="请输入备用3"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">备用4: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="spare4" placeholder="请输入备用4"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">备用5: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="spare5" placeholder="请输入备用5"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">操作员: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="userId" placeholder="请输入操作员"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-form-item"> | 
 |  |  |                     <label class="layui-form-label">更新时间: </label> | 
 |  |  |                     <div class="layui-input-block"> | 
 |  |  |                         <input class="layui-input" name="appeTime" id="appeTime$" placeholder="请输入更新时间"> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |  | 
 |  |  |              </div> | 
 |  |  |         </div> | 
 |  |  |         <hr class="layui-bg-gray"> | 
 |  |  |         <div class="layui-form-item text-right"> | 
 |  |  |             <button class="layui-btn" lay-filter="editSubmit" lay-submit="">保存</button> | 
 |  |  |             <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button> | 
 |  |  |         </div> | 
 |  |  |     </form> | 
 |  |  | </script> | 
 |  |  | </html> | 
 |  |  |  |