package com.zy.asrs.wms.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.Query; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zy.asrs.common.domain.dto.DetlDto; import com.zy.asrs.common.domain.dto.WrkTraceVo; import com.zy.asrs.common.domain.param.OrderDomainParam; import com.zy.asrs.common.wms.entity.*; import com.zy.asrs.common.wms.mapper.OrderDetlMapper; import com.zy.asrs.common.wms.service.*; import com.zy.asrs.framework.annotations.ManagerAuth; import com.zy.asrs.framework.common.Cools; import com.zy.asrs.framework.common.R; import com.zy.asrs.framework.common.SnowflakeIdWorker; import com.zy.asrs.framework.domain.KeyValueVo; import com.zy.asrs.framework.common.DateUtils; import com.zy.asrs.common.web.BaseController; import com.zy.asrs.framework.exception.CoolException; import org.apache.ibatis.annotations.Param; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.web.bind.annotation.*; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.net.URLDecoder; import java.util.*; @RestController public class OrderController extends BaseController { @Autowired private OrderService orderService; @Autowired private OrderDetlService orderDetlService; @Autowired private LocDetlService locDetlService; @Autowired private WrkDetlService wrkDetlService; @Autowired private WrkMastService wrkMastService; @Autowired private WrkMastLogService wrkMastLogService; @Autowired private JdbcTemplate jdbcTemplate; @Autowired private SnowflakeIdWorker snowflakeIdWorker; @Autowired private DocTypeService docTypeService; @Autowired private LocInPrintMatService locInPrintMatService; @Autowired private MatService matService; @RequestMapping(value = "/order/list/orderNo") public R orderListorderNo(@RequestParam String orderNo) { //数量修改成为完成数量 List orderDetl1 = orderDetlService.list(new LambdaQueryWrapper().eq(OrderDetl::getOrderNo, orderNo)); List orderDetls= new ArrayList(); for (OrderDetl o: orderDetl1) { BigDecimal c1 = new BigDecimal(o.getEnableQty()).setScale(2,BigDecimal.ROUND_HALF_UP); o.setAnfme(c1.doubleValue()); if (o.getAnfme().equals(0.0)){ continue; } orderDetls.add(o); } return R.ok(orderDetls); } @RequestMapping(value = "/order/list/all") @ManagerAuth public R orderList() { return R.ok(orderService.selectAllorderNo(getHostId())); } @RequestMapping(value = "/order/comb/list/all") @ManagerAuth public R orderListComb() { return R.ok(orderService.selectAllCombOrderNo(getHostId())); } // @RequestMapping(value = "/outOrder/list/all") // @ManagerAuth // public R orderOutList() { // return R.ok(orderService.selectAllOutOrderNo(getHostId())); // } @RequestMapping(value = "/outOrder/list/all") @ManagerAuth public R orderOutListOrder(@RequestBody String orderNo) { return R.ok(orderService.selectAllOutOrderNo(orderNo,getHostId())); } @RequestMapping(value = "/order/{id}/auth") @ManagerAuth public R get(@PathVariable("id") String id) { return R.ok(orderService.getById(String.valueOf(id))); } @RequestMapping(value = "/order/page/auth") @ManagerAuth public R page(@RequestParam(defaultValue = "1") Integer curr, @RequestParam(defaultValue = "10") Integer limit, @RequestParam(required = false) String condition, @RequestParam(required = false) String timeRange, @RequestParam Map param) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("host_id", getHostId()); if (!Cools.isEmpty(condition)) { wrapper.like("id", condition); } if (!Cools.isEmpty(timeRange)) { String[] range = timeRange.split(RANGE_TIME_LINK); wrapper.ge("create_time", DateUtils.convert(range[0])); wrapper.le("create_time", DateUtils.convert(range[1])); } allLike(Order.class, param.keySet(), wrapper, condition); return R.ok(orderService.page(new Page<>(curr, limit), wrapper)); } @RequestMapping(value = "/order/head/page/auth") @ManagerAuth public R head(@RequestParam(defaultValue = "1")Integer curr, @RequestParam(defaultValue = "10")Integer limit, @RequestParam(required = false) String condition, @RequestParam(required = false)String orderByField, @RequestParam(required = false)String orderByType, @RequestParam Map param) throws UnsupportedEncodingException { if(!Cools.isEmpty(condition)){ condition = condition.trim(); } QueryWrapper wrapper = new QueryWrapper<>(); excludeTrash(param); wrapper.eq("status", 1); wrapper.eq("host_id", getHostId()); if (!Cools.isEmpty(param.get("order_no"))) { wrapper.eq("order_no", param.get("order_no")); } if (!Cools.isEmpty(param.get("create_time"))) { String[] range = param.get("create_time").toString().split(RANGE_TIME_LINK); wrapper.ge("create_time", DateUtils.convert(range[0])); wrapper.le("create_time", DateUtils.convert(range[1])); } if (!Cools.isEmpty(param.get("doc_type"))) { wrapper.eq("doc_type", param.get("doc_type")); } if (!Cools.isEmpty(param.get("docName"))) { String docName = URLDecoder.decode(param.get("docName").toString(), "UTF-8"); DocType docType = docTypeService.getOne(new LambdaQueryWrapper().eq(DocType::getDocName, docName)); wrapper.eq("doc_type", docType.getDocId()); } if (!Cools.isEmpty(param.get("settle"))) { wrapper.eq("settle", param.get("settle")); } param.remove("order_no"); allLike(Order.class, param.keySet(), wrapper, condition); wrapper.orderByDesc("create_time"); return R.ok(orderService.page(new Page<>(curr, limit), wrapper)); } @RequestMapping(value = "/order/detl/all/auth") @ManagerAuth public R head(@RequestParam Long orderId){ return R.ok().add(orderDetlService.list(new LambdaQueryWrapper().eq(OrderDetl::getOrderId, orderId).eq(OrderDetl::getHostId, getHostId()))); } @RequestMapping(value = "/order/add/auth") @ManagerAuth public R add(Order order) { order.setHostId(getHostId()); orderService.save(order); return R.ok(); } @RequestMapping(value = "/order/update/auth") @ManagerAuth public R update(Order order){ if (Cools.isEmpty(order) || null==order.getId()){ return R.error(); } orderService.updateById(order); return R.ok(); } @RequestMapping(value = "/order/delete/auth") @ManagerAuth(memo = "手动删除订单") @Transactional public R delete(@RequestParam Long orderId){ if (!orderService.removeById(orderId)) { throw new CoolException("删除单据失败"); } if (!orderDetlService.remove(new LambdaQueryWrapper().eq(OrderDetl::getOrderId, orderId))) { throw new CoolException("删除单据明细失败"); } return R.ok(); } @RequestMapping(value = "/order/dy") @ManagerAuth(memo = "手动删除订单") @Transactional public R dy(@RequestParam Long orderId){ List list = orderDetlService.list(new LambdaQueryWrapper().eq(OrderDetl::getOrderId, orderId)); for (OrderDetl orderDetl : list) { Mat mat = matService.getOne(new LambdaQueryWrapper().eq(Mat::getMatnr, orderDetl.getMatnr())); LocInPrintMat locInPrintMat = new LocInPrintMat(); locInPrintMat.setMatnr(orderDetl.getMatnr()); locInPrintMat.setMaktx(orderDetl.getMaktx()); locInPrintMat.setStatus(1); locInPrintMat.setOrderNo(orderDetl.getOrderNo()); locInPrintMat.setBatch(orderDetl.getBatch()); locInPrintMat.setCreateBy(getUserId()); locInPrintMat.setCreateTime(new Date()); locInPrintMat.setUpdateTime(new Date()); if(!Cools.isEmpty(mat)){ locInPrintMat.setDecrees(mat.getDecrees()); } locInPrintMatService.save(locInPrintMat); } return R.ok(); } @RequestMapping(value = "/orderQuery/auth") @ManagerAuth public R query(String condition) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.like(Order::getId, condition); wrapper.eq(Order::getHostId, getHostId()); Page page = orderService.page(new Page<>(0, 10), wrapper); List> result = new ArrayList<>(); for (Order order : page.getRecords()){ Map map = new HashMap<>(); map.put("id", order.getId()); map.put("value", order.getId()); result.add(map); } return R.ok(result); } @RequestMapping("/order/all/get/kv") @ManagerAuth public R getDataKV(@RequestParam(required = false) String condition) { List vos = new ArrayList<>(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Order::getHostId, getHostId()); if (!Cools.isEmpty(condition)) { wrapper.like(Order::getId, condition); } orderService.page(new Page<>(1, 30), wrapper).getRecords().forEach(item -> vos.add(new KeyValueVo(String.valueOf(item.getId()), item.getId()))); return R.ok().add(vos); } @PostMapping(value = "/order/wrk/trace/auth") @ManagerAuth public R orderWrkTrace(@RequestParam("orderId") Long orderId) { Long hostId = getHostId(); Order order = orderService.getOne(new LambdaQueryWrapper().eq(Order::getId, orderId).eq(Order::getHostId, hostId)); if (null == order) { return R.error("单据不存在"); } // 数量统计 List orderDetls = orderDetlService.list(new LambdaQueryWrapper().eq(OrderDetl::getOrderId, orderId).eq(OrderDetl::getHostId, hostId)); double totalQty = 0; double wrkQty = 0; double lackQty = 0; double endQty = 0; for (OrderDetl orderDetl : orderDetls) { totalQty = totalQty + orderDetl.getAnfme(); wrkQty = wrkQty + orderDetl.getWorkQty(); endQty = endQty + orderDetl.getQty(); double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getWorkQty()).orElse(0.0D); if (issued > 0.0) { List locDetls = locDetlService.queryStock(orderDetl.getMatnr(), orderDetl.getBatch(), hostId); for (LocDetl locDetl : locDetls) { if (issued > 0) { issued = issued - locDetl.getAnfme(); } else { break; } } } if (issued > 0.0) { lackQty = lackQty + issued; } } // 任务追溯 List wrkTraceVos = new ArrayList<>(); List wrkDetls = wrkDetlService.selectAndLogByOrderNoGroupByMatnrOfSum(order.getOrderNo()); for (WrkDetl wrkDetl : wrkDetls) { WrkMast wrkMast = wrkMastService.getOne(new LambdaQueryWrapper().eq(WrkMast::getWrkNo, wrkDetl.getWrkNo()).eq(WrkMast::getIoTime, wrkDetl.getIoTime())); if (wrkMast == null) { WrkMastLog wrkMastLog = wrkMastLogService.getOne(new LambdaQueryWrapper().eq(WrkMastLog::getWrkNo, wrkDetl.getWrkNo()).eq(WrkMastLog::getIoTime, wrkDetl.getIoTime())); if (wrkMastLog.getIoType()==103){ wrkMastLog = wrkMastLogService.getOne(new LambdaQueryWrapper().eq(WrkMastLog::getWrkNo, wrkDetl.getWrkNo()).eq(WrkMastLog::getIoTime, wrkDetl.getIoTime()).eq(WrkMastLog::getIoType,53)); } if (wrkMastLog != null) { wrkMast = new WrkMast(); BeanUtils.copyProperties(wrkMastLog, wrkMast); } else { continue; } } boolean exist = false; for (WrkTraceVo vo : wrkTraceVos) { if (vo.getWrkNo().equals(wrkMast.getWrkNo()) && vo.getIoTimeStr().equals(DateUtils.convert(wrkMast.getIoTime()))) { vo.getWrkDetls().add(wrkDetl); exist = true; } } if (!exist) { WrkTraceVo vo = new WrkTraceVo(wrkMast.getWrkNo(), DateUtils.convert(wrkMast.getIoTime()), wrkMast, wrkDetl); wrkTraceVos.add(vo); } } if (!Cools.isEmpty(wrkTraceVos) && wrkTraceVos.size() > 1) { wrkTraceVos.sort((o1, o2) -> (int) (o2.getWrkMast().getIoTime().getTime() - o1.getWrkMast().getIoTime().getTime())); } return R.ok().add(Cools .add("list", wrkTraceVos) .add("orderNo", order.getOrderNo()) .add("totalQty", totalQty) .add("wrkQty", wrkQty) .add("lackQty", lackQty) .add("endQty",endQty) ); } @RequestMapping(value = "/order/form/add/auth") @ManagerAuth(memo = "手动添加订单") @Transactional public R formAdd(@RequestBody OrderDomainParam param){ Order order = orderService.selectByNo(param.getOrderNo(), getHostId()); if (order != null) { return R.error("单据编号已存在"); } // 判断重复订单号 Integer orderCount = Optional.ofNullable(jdbcTemplate.queryForObject("select count(1) from man_order where order_no = '" + param.getOrderNo() + "'", Integer.class)).orElse(0); Integer orderLogCount = Optional.ofNullable(jdbcTemplate.queryForObject("select count(1) from man_order_log where order_no = '" + param.getOrderNo() + "'", Integer.class)).orElse(0); if (orderCount > 0 || orderLogCount > 0) { return R.error("单据编号已存在"); } Date now = new Date(); order = new Order( String.valueOf(snowflakeIdWorker.nextId()), // 编号[非空] param.getOrderNo(), // 订单编号 DateUtils.convert(now), // 单据日期 param.getDocType(), // 单据类型 null, // 项目编号 null, // null, // 调拨项目编号 null, // 初始票据号 null, // 票据号 null, // 客户编号 null, // 客户 null, // 联系方式 null, // 操作人员 null, // 合计金额 null, // 优惠率 null, // 优惠金额 null, // 销售或采购费用合计 null, // 实付金额 null, // 付款类型 null, // 业务员 null, // 结算天数 null, // 邮费支付类型 null, // 邮费 null, // 付款时间 null, // 发货时间 null, // 物流名称 null, // 物流单号 1L, // 订单状态 1, // 状态 getUserId(), // 添加人员 now, // 添加时间 getUserId(), // 修改人员 now, // 修改时间 null, // 备注 getHostId() ); if (!orderService.save(order)) { throw new CoolException("保存订单主档失败"); } List list = new ArrayList<>(); for (OrderDetl orderDetl : param.getOrderDetlList()) { DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch()); if (DetlDto.has(list, dto)) { OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(), getHostId()); item.setAnfme(item.getAnfme() + orderDetl.getAnfme()); if (!orderDetlService.updateById(item)) { throw new CoolException("保存订单明细档失败"); } } else { list.add(dto); orderDetl.setOrderId(order.getId()); orderDetl.setOrderNo(order.getOrderNo()); orderDetl.setCreateBy(getUserId()); orderDetl.setCreateTime(now); orderDetl.setUpdateBy(getUserId()); orderDetl.setUpdateTime(now); orderDetl.setStatus(1); orderDetl.setQty(0.0D); orderDetl.setWorkQty(0.0D); if (!orderDetlService.save(orderDetl)) { throw new CoolException("保存订单明细档失败"); } } } return R.ok("订单添加成功"); } @RequestMapping(value = "/order/nav/list/auth") @ManagerAuth public R navList(@RequestParam(required = false) String orderNo){ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Order::getHostId, getHostId()); if (!Cools.isEmpty(orderNo)) { wrapper.like(Order::getOrderNo, orderNo); } wrapper.le(Order::getSettle, 2).eq(Order::getStatus, 1); wrapper.orderByDesc(Order::getCreateTime); List orders = orderService.list(wrapper); // 保留出库单 if (!Cools.isEmpty(orders)) { Iterator iterator = orders.iterator(); while (iterator.hasNext()) { Order order = iterator.next(); if (order.getDocType() != null) { DocType docType = docTypeService.getById(order.getDocType()); if (docType != null) { if (docType.getPakout() == 0) { iterator.remove(); } } } } } return R.ok().add(orders); } @RequestMapping(value = "/order/form/modify/auth") @ManagerAuth(memo = "手动修改订单") @Transactional public R formModify(@RequestBody OrderDomainParam param){ Order order = orderService.getOne(new LambdaQueryWrapper() .eq(Order::getId, param.getOrderId()) .eq(Order::getHostId, getHostId())); if (order == null || order.getStatus() == 0) { return R.error("订单不存在"); } Date now = new Date(); Long userId = getUserId(); // 修改主档 if (!param.getDocType().equals(order.getDocType())) { order.setDocType(param.getDocType()); order.setUpdateBy(userId); order.setUpdateTime(now); if (!orderService.updateById(order)) { throw new CoolException("修改订单类型失败"); } } // 修改明细档 // List orderDetls = orderDetlService.selectByOrderId(order.getId()); // 1.清空明细档 if (!orderDetlService.remove(new LambdaQueryWrapper().eq(OrderDetl::getOrderId, order.getId()))) { throw new CoolException("清空订单明细失败"); } // 2.重组数据 List list = new ArrayList<>(); for (OrderDetl orderDetl : param.getOrderDetlList()) { DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch()); if (DetlDto.has(list, dto)) { OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(), getHostId()); item.setAnfme(item.getAnfme() + orderDetl.getAnfme()); if (!orderDetlService.updateById(item)) { throw new CoolException("保存订单明细档失败"); } } else { list.add(dto); orderDetl.setOrderId(order.getId()); orderDetl.setOrderNo(order.getOrderNo()); orderDetl.setCreateBy(getUserId()); orderDetl.setCreateTime(now); orderDetl.setUpdateBy(getUserId()); orderDetl.setUpdateTime(now); orderDetl.setStatus(1); orderDetl.setQty(0.0D); if (!orderDetlService.save(orderDetl)) { throw new CoolException("保存订单明细档失败"); } } } return R.ok("订单修改成功"); } @RequestMapping(value = "/order/export/auth") @ManagerAuth(memo = "订单明细导出") public synchronized R export(@RequestBody JSONObject param){ List fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class); QueryWrapper wrapper = new QueryWrapper<>(); JSONArray orderNo = param.getJSONArray("orderNo"); List orderNoList = new ArrayList<>(); for (int i = 0; i < orderNo.size(); i++) { Object o = orderNo.get(i); orderNoList.add(o.toString()); } List list = orderDetlService.list(new QueryWrapper().in("order_no", orderNoList)); return R.ok(exportSupport(list, fields)); } private void convert(Map map, QueryWrapper wrapper){ for (Map.Entry entry : map.entrySet()){ if(Cools.eq(entry.getKey(),"curr") || Cools.eq(entry.getKey(),"limit") || Cools.eq(entry.getKey(),"unreason") || Cools.eq(entry.getKey(),"orderByField") || Cools.eq(entry.getKey(),"orderByType") || Cools.eq(entry.getKey(),"row") || Cools.eq(entry.getKey(),"condition")){ continue; } if(Cools.isEmpty(entry.getValue())){ continue; } 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 { if (entry.getKey().equals("locNo")) { wrapper.eq("loc_no", String.valueOf(entry.getValue())); } else { wrapper.like(entry.getKey(), String.valueOf(entry.getValue())); } } } } }