自动化立体仓库 - WMS系统
lty
2 天以前 264a479aa1ad16818110e9f9d833bbf02e298f47
#lfderp接口开发
15个文件已删除
30个文件已添加
15个文件已修改
5505 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/ErpMatController.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/ErpOrderController.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/ErpOrderDetlController.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java 201 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/ErpMat.java 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/ErpOrder.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/ErpOrderDetl.java 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/MatSyncParam.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/OrderDto.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/TokenInfoParam.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/ErpMatMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/ErpOrderDetlMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/ErpOrderMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/ErpMatService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/ErpOrderDetlService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/ErpOrderService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OpenService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/ErpMatServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/ErpOrderDetlServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/ErpOrderServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 554 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/CheckDeepScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/ErrorStockScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/NotifyLogScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OrderMoveHistoryScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OverYearLogScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/PlcLogScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/WorkLogScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/WorkMastScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/CodeBuilder.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/ints/entity/ErpDetTb.java 217 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/ints/entity/ErpDetTbBak.java 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/ints/entity/ErpLk.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/ints/entity/ErpLkBak.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/ints/entity/LkDetTb.java 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/ints/entity/LkDetTbBak.java 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/ints/entity/Prdt.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/ints/entity/PrdtBak.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/ints/erp/ErpDbProperties.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/ints/erp/ErpSqlServer.java 363 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/ints/task/scheduler/ErpDetTbScheduler.java 243 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/ints/task/scheduler/ErpLkScheduler.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/ints/task/scheduler/ErpPrdtScheduler.java 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/ints/task/scheduler/ErpPrdtSchedulerNew.java 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/ints/task/scheduler/LkDetTbScheduler.java 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/erpMat.sql 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/erpOrder.sql 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/erpOrderDetl.sql 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/mat.sql 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/ErpMatMapper.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/ErpOrderDetlMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/ErpOrderMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/erpMat/erpMat.js 259 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/erpOrder/erpOrder.js 253 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/erpOrderDetl/erpOrderDetl.js 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/erpMat/erpMat.html 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/erpOrder/erpOrder.html 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/erpOrderDetl/erpOrderDetl.html 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/ErpMatController.java
New file
@@ -0,0 +1,125 @@
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.ErpMat;
import com.zy.asrs.service.ErpMatService;
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 ErpMatController extends BaseController {
    @Autowired
    private ErpMatService erpMatService;
    @RequestMapping(value = "/erpMat/{id}/auth")
    @ManagerAuth
    public R get(@PathVariable("id") String id) {
        return R.ok(erpMatService.selectById(String.valueOf(id)));
    }
    @RequestMapping(value = "/erpMat/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<ErpMat> wrapper = new EntityWrapper<>();
        excludeTrash(param);
        convert(param, wrapper);
        allLike(ErpMat.class, param.keySet(), wrapper, condition);
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
        return R.ok(erpMatService.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 = "/erpMat/add/auth")
    @ManagerAuth
    public R add(ErpMat erpMat) {
        erpMatService.insert(erpMat);
        return R.ok();
    }
    @RequestMapping(value = "/erpMat/update/auth")
    @ManagerAuth
    public R update(ErpMat erpMat){
        if (Cools.isEmpty(erpMat) || null==erpMat.getId()){
            return R.error();
        }
        erpMatService.updateById(erpMat);
        return R.ok();
    }
    @RequestMapping(value = "/erpMat/delete/auth")
    @ManagerAuth
    public R delete(@RequestParam(value="ids[]") Long[] ids){
         for (Long id : ids){
            erpMatService.deleteById(id);
        }
        return R.ok();
    }
    @RequestMapping(value = "/erpMat/export/auth")
    @ManagerAuth
    public R export(@RequestBody JSONObject param){
        EntityWrapper<ErpMat> wrapper = new EntityWrapper<>();
        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
        Map<String, Object> map = excludeTrash(param.getJSONObject("erpMat"));
        convert(map, wrapper);
        List<ErpMat> list = erpMatService.selectList(wrapper);
        return R.ok(exportSupport(list, fields));
    }
    @RequestMapping(value = "/erpMatQuery/auth")
    @ManagerAuth
    public R query(String condition) {
        EntityWrapper<ErpMat> wrapper = new EntityWrapper<>();
        wrapper.like("id", condition);
        Page<ErpMat> page = erpMatService.selectPage(new Page<>(0, 10), wrapper);
        List<Map<String, Object>> result = new ArrayList<>();
        for (ErpMat erpMat : page.getRecords()){
            Map<String, Object> map = new HashMap<>();
            map.put("id", erpMat.getId());
            map.put("value", erpMat.getId());
            result.add(map);
        }
        return R.ok(result);
    }
    @RequestMapping(value = "/erpMat/check/column/auth")
    @ManagerAuth
    public R query(@RequestBody JSONObject param) {
        Wrapper<ErpMat> wrapper = new EntityWrapper<ErpMat>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
        if (null != erpMatService.selectOne(wrapper)){
            return R.parse(BaseRes.REPEAT).add(getComment(ErpMat.class, String.valueOf(param.get("key"))));
        }
        return R.ok();
    }
}
src/main/java/com/zy/asrs/controller/ErpOrderController.java
New file
@@ -0,0 +1,125 @@
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.ErpOrder;
import com.zy.asrs.service.ErpOrderService;
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 ErpOrderController extends BaseController {
    @Autowired
    private ErpOrderService erpOrderService;
    @RequestMapping(value = "/erpOrder/{id}/auth")
    @ManagerAuth
    public R get(@PathVariable("id") String id) {
        return R.ok(erpOrderService.selectById(String.valueOf(id)));
    }
    @RequestMapping(value = "/erpOrder/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<ErpOrder> wrapper = new EntityWrapper<>();
        excludeTrash(param);
        convert(param, wrapper);
        allLike(ErpOrder.class, param.keySet(), wrapper, condition);
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
        return R.ok(erpOrderService.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 = "/erpOrder/add/auth")
    @ManagerAuth
    public R add(ErpOrder erpOrder) {
        erpOrderService.insert(erpOrder);
        return R.ok();
    }
    @RequestMapping(value = "/erpOrder/update/auth")
    @ManagerAuth
    public R update(ErpOrder erpOrder){
        if (Cools.isEmpty(erpOrder) || null==erpOrder.getId()){
            return R.error();
        }
        erpOrderService.updateById(erpOrder);
        return R.ok();
    }
    @RequestMapping(value = "/erpOrder/delete/auth")
    @ManagerAuth
    public R delete(@RequestParam(value="ids[]") Long[] ids){
         for (Long id : ids){
            erpOrderService.deleteById(id);
        }
        return R.ok();
    }
    @RequestMapping(value = "/erpOrder/export/auth")
    @ManagerAuth
    public R export(@RequestBody JSONObject param){
        EntityWrapper<ErpOrder> wrapper = new EntityWrapper<>();
        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
        Map<String, Object> map = excludeTrash(param.getJSONObject("erpOrder"));
        convert(map, wrapper);
        List<ErpOrder> list = erpOrderService.selectList(wrapper);
        return R.ok(exportSupport(list, fields));
    }
    @RequestMapping(value = "/erpOrderQuery/auth")
    @ManagerAuth
    public R query(String condition) {
        EntityWrapper<ErpOrder> wrapper = new EntityWrapper<>();
        wrapper.like("id", condition);
        Page<ErpOrder> page = erpOrderService.selectPage(new Page<>(0, 10), wrapper);
        List<Map<String, Object>> result = new ArrayList<>();
        for (ErpOrder erpOrder : page.getRecords()){
            Map<String, Object> map = new HashMap<>();
            map.put("id", erpOrder.getId());
            map.put("value", erpOrder.getId());
            result.add(map);
        }
        return R.ok(result);
    }
    @RequestMapping(value = "/erpOrder/check/column/auth")
    @ManagerAuth
    public R query(@RequestBody JSONObject param) {
        Wrapper<ErpOrder> wrapper = new EntityWrapper<ErpOrder>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
        if (null != erpOrderService.selectOne(wrapper)){
            return R.parse(BaseRes.REPEAT).add(getComment(ErpOrder.class, String.valueOf(param.get("key"))));
        }
        return R.ok();
    }
}
src/main/java/com/zy/asrs/controller/ErpOrderDetlController.java
New file
@@ -0,0 +1,125 @@
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.ErpOrderDetl;
import com.zy.asrs.service.ErpOrderDetlService;
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 ErpOrderDetlController extends BaseController {
    @Autowired
    private ErpOrderDetlService erpOrderDetlService;
    @RequestMapping(value = "/erpOrderDetl/{id}/auth")
    @ManagerAuth
    public R get(@PathVariable("id") String id) {
        return R.ok(erpOrderDetlService.selectById(String.valueOf(id)));
    }
    @RequestMapping(value = "/erpOrderDetl/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<ErpOrderDetl> wrapper = new EntityWrapper<>();
        excludeTrash(param);
        convert(param, wrapper);
        allLike(ErpOrderDetl.class, param.keySet(), wrapper, condition);
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
        return R.ok(erpOrderDetlService.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 = "/erpOrderDetl/add/auth")
    @ManagerAuth
    public R add(ErpOrderDetl erpOrderDetl) {
        erpOrderDetlService.insert(erpOrderDetl);
        return R.ok();
    }
    @RequestMapping(value = "/erpOrderDetl/update/auth")
    @ManagerAuth
    public R update(ErpOrderDetl erpOrderDetl){
        if (Cools.isEmpty(erpOrderDetl) || null==erpOrderDetl.getOrderId()){
            return R.error();
        }
        erpOrderDetlService.updateById(erpOrderDetl);
        return R.ok();
    }
    @RequestMapping(value = "/erpOrderDetl/delete/auth")
    @ManagerAuth
    public R delete(@RequestParam(value="ids[]") Long[] ids){
         for (Long id : ids){
            erpOrderDetlService.deleteById(id);
        }
        return R.ok();
    }
    @RequestMapping(value = "/erpOrderDetl/export/auth")
    @ManagerAuth
    public R export(@RequestBody JSONObject param){
        EntityWrapper<ErpOrderDetl> wrapper = new EntityWrapper<>();
        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
        Map<String, Object> map = excludeTrash(param.getJSONObject("erpOrderDetl"));
        convert(map, wrapper);
        List<ErpOrderDetl> list = erpOrderDetlService.selectList(wrapper);
        return R.ok(exportSupport(list, fields));
    }
    @RequestMapping(value = "/erpOrderDetlQuery/auth")
    @ManagerAuth
    public R query(String condition) {
        EntityWrapper<ErpOrderDetl> wrapper = new EntityWrapper<>();
        wrapper.like("id", condition);
        Page<ErpOrderDetl> page = erpOrderDetlService.selectPage(new Page<>(0, 10), wrapper);
        List<Map<String, Object>> result = new ArrayList<>();
        for (ErpOrderDetl erpOrderDetl : page.getRecords()){
            Map<String, Object> map = new HashMap<>();
            map.put("id", erpOrderDetl.getOrderId());
            map.put("value", erpOrderDetl.getOrderId());
            result.add(map);
        }
        return R.ok(result);
    }
    @RequestMapping(value = "/erpOrderDetl/check/column/auth")
    @ManagerAuth
    public R query(@RequestBody JSONObject param) {
        Wrapper<ErpOrderDetl> wrapper = new EntityWrapper<ErpOrderDetl>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
        if (null != erpOrderDetlService.selectOne(wrapper)){
            return R.parse(BaseRes.REPEAT).add(getComment(ErpOrderDetl.class, String.valueOf(param.get("key"))));
        }
        return R.ok();
    }
}
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -4,18 +4,26 @@
import com.core.annotations.AppAuth;
import com.core.common.*;
import com.core.exception.CoolException;
import com.zy.asrs.entity.ErpOrder;
import com.zy.asrs.entity.ErpOrderDetl;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.entity.ErpMat;
import com.zy.asrs.service.ErpOrderDetlService;
import com.zy.asrs.service.ErpOrderService;
import com.zy.asrs.service.OpenService;
import com.zy.asrs.service.ErpMatService;
import com.zy.common.model.DetlDto;
import com.zy.common.web.BaseController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/**
 * Created by vincent on 2022/4/8
@@ -32,7 +40,69 @@
    @Autowired
    private OpenService openService;
    @Autowired
    private ErpMatService erpMatService;
    @Autowired
    private ErpOrderService erpOrderService;
    @Autowired
    private ErpOrderDetlService erpOrderDetlService;
    @Value("${open-asrs.auth.app-id:wms_8f7c3d126a944e3ab5c89d21f4a7c6b2}")
    private String openAppId;
    @Value("${open-asrs.auth.app-secret:D9f3A7xP1kLm8Q2tW5zH0sY6vR4bNcE7FjK3uM9pT2aL8qX6}")
    private String openAppSecret;
    @Value("${open-asrs.auth.token-valid-minutes:30}")
    private Integer tokenValidMinutes;
    private static final Map<String, TokenInfoParam> TOKEN_CACHE = new ConcurrentHashMap<>();
    @PostMapping("/getToken")
    public synchronized R getToken(@RequestBody(required = false) Map<String, String> param) {
        log.info("{}接口被访问;请求数据:{}", "/getToken", JSON.toJSONString(param));
        if (Cools.isEmpty(param)) {
            return R.parse(BaseRes.PARAM);
        }
        String appId = param.get("appId");
        String appSecret = param.get("appSecret");
        if (Cools.isEmpty(appId)) {
            return R.error("参数[appId]不能为空");
        }
        if (Cools.isEmpty(appSecret)) {
            return R.error("参数[appSecret]不能为空");
        }
        if (Cools.isEmpty(openAppId) || Cools.isEmpty(openAppSecret)) {
            throw new CoolException("系统未配置open-asrs.auth.app-id或open-asrs.auth.app-secret");
        }
        if (!openAppId.equals(appId) || !openAppSecret.equals(appSecret)) {
            throw new CoolException("认证失败,请确认appId或appSecret无误!");
        }
        String token = UUID.randomUUID().toString().replace("-", "");
        long expireAt = System.currentTimeMillis() + tokenValidMinutes * 60L * 1000L;
        TOKEN_CACHE.put(token, new TokenInfoParam(appId, expireAt));
        Map<String, Object> result = new HashMap<>();
        result.put("token", token);
        result.put("validTime", tokenValidMinutes);
        return R.ok().add(result);
    }
    public static boolean validToken(String authorization) {
        if (Cools.isEmpty(authorization)) {
            return false;
        }
        TokenInfoParam tokenInfo = TOKEN_CACHE.get(authorization);
        if (tokenInfo == null) {
            return false;
        }
        if (System.currentTimeMillis() > tokenInfo.getExpireAt()) {
            TOKEN_CACHE.remove(authorization);
            return false;
        }
        return true;
    }
    @PostMapping("/order/matSync/default/v1")
    @AppAuth(memo = "商品信息同步接口")
    public synchronized R syncMatInfo(@RequestHeader(required = false) String appkey,
@@ -46,22 +116,93 @@
        return R.ok();
    }
    /****************************************************************************/
    /********************************* 打包上线 **********************************/
    /****************************************************************************/
    @PostMapping("/erp/mat/sync")
    public synchronized R erpMatSync(@RequestBody(required = false) List<Map<String, Object>> body,
                                     HttpServletRequest request) {
        auth(null, body, request);
        if (Cools.isEmpty(body)) {
            return R.parse(BaseRes.PARAM);
        }
        openService.syncErpMat(body);
        Map<String, Object> res = new HashMap<>();
        res.put("result", "SUCCESS");
        return R.ok().add(res);
    }
//    @PostMapping("/order/pakin/new/package/v1")
//    @AppAuth(memo = "打包上线接口")
//    public synchronized R pakinOrderPackage(@RequestHeader(required = false) String appkey,
//                                            @RequestBody(required = false) PackParam param,
//                                            HttpServletRequest request) {
//        auth(appkey, param, request);
//        if (Cools.isEmpty(param)) {
//            return R.parse(BaseRes.PARAM);
//        }
//        openService.packageUp(param);
//        return R.ok();
//    }
    @PostMapping("/erp/order/addPrd")
    public synchronized R erpOrderAddPrd(@RequestBody Object body,
                                         HttpServletRequest request) {
        List<OrderDto> orders;
        if (body instanceof List) {
            orders = JSON.parseArray(JSON.toJSONString(body), OrderDto.class);
        } else {
            OrderDto dto = JSON.parseObject(JSON.toJSONString(body), OrderDto.class);
            orders = new ArrayList<>();
            orders.add(dto);
        }
        auth(null, orders, request);
        if (Cools.isEmpty(orders)) {
            return R.parse(BaseRes.PARAM);
        }
        return R.ok().add(openService.addErpOrder(orders));
    }
    @PostMapping("/erp/order/addQc")
    public synchronized R erpOrderAddQc(@RequestBody Object body,
                                         HttpServletRequest request) {
        List<OrderDto> orders;
        if (body instanceof List) {
            orders = JSON.parseArray(JSON.toJSONString(body), OrderDto.class);
        } else {
            OrderDto dto = JSON.parseObject(JSON.toJSONString(body), OrderDto.class);
            orders = new ArrayList<>();
            orders.add(dto);
        }
        auth(null, orders, request);
        if (Cools.isEmpty(orders)) {
            return R.parse(BaseRes.PARAM);
        }
        return R.ok().add(openService.addErpOrder(orders));
    }
    @PostMapping("/erp/order/addSrm")
    public synchronized R erpOrderAddSrm(@RequestBody Object body,
                                         HttpServletRequest request) {
        List<OrderDto> orders;
        if (body instanceof List) {
            orders = JSON.parseArray(JSON.toJSONString(body), OrderDto.class);
        } else {
            OrderDto dto = JSON.parseObject(JSON.toJSONString(body), OrderDto.class);
            orders = new ArrayList<>();
            orders.add(dto);
        }
        auth(null, orders, request);
        if (Cools.isEmpty(orders)) {
            return R.parse(BaseRes.PARAM);
        }
        return R.ok().add(openService.addErpOrder(orders));
    }
    @PostMapping("/MES/inventory/details")
    public synchronized R mesInventoryDetails(@RequestBody(required = false) Map<String, Object> param,
                                              HttpServletRequest request) throws IOException {
        auth(null, param, request);
        if (param == null) {
            param = new HashMap<>();
        }
        return R.ok().add(openService.mesInventoryDetails(param));
    }
    @PostMapping("/MES/inventory/summary")
    public synchronized R mesInventorySummary(@RequestBody(required = false) Map<String, Object> param,
                                              HttpServletRequest request) throws IOException {
        auth(null, param, request);
        if (param == null) {
            param = new HashMap<>();
        }
        return R.ok().add(openService.mesInventorySummary(param));
    }
    /**
     * 添加入库单
@@ -152,18 +293,32 @@
    }
    private void auth(String appkey, Object obj, HttpServletRequest request) {
        log.info("{}接口被访问;appkey:{};请求数据:{}", "open/sensorType/list/auth/v1", appkey, JSON.toJSONString(obj));
        log.info("{}接口被访问;token:{};请求数据:{}", "open/sensorType/list/auth/v1", request.getHeader("Authorization"), JSON.toJSONString(obj));
        request.setAttribute("cache", obj);
        if (!auth) {
            return;
        }
        if (Cools.isEmpty(appkey)) {
            throw new CoolException("认证失败,请确认appkey无误!");
        String authorization = request.getHeader("Authorization");
        if (Cools.isEmpty(authorization)) {
            authorization = request.getHeader("authorization");
        }
        if (!APP_KEY_LIST.contains(appkey)) {
            throw new CoolException("认证失败,请确认appkey无误!");
        if (!Cools.isEmpty(authorization)) {
            String val = authorization.trim();
            if (val.toLowerCase().startsWith("bearer")) {
                int idx = val.indexOf(' ');
                authorization = idx > -1 ? val.substring(idx + 1).trim() : "";
            } else {
                authorization = val;
        }
    }
        if (!Cools.isEmpty(authorization)) {
            if (validToken(authorization)) {
                return;
            }
            throw new CoolException("认证失败,请确认Authorization无误!");
        }
        throw new CoolException("认证失败,请确认Authorization无误!");
    }
    public static void main(String[] args) {
        // 1
src/main/java/com/zy/asrs/entity/ErpMat.java
New file
@@ -0,0 +1,151 @@
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 io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
@Data
@TableName("asr_erp_mat")
public class ErpMat implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 自增id
     */
    @ApiModelProperty(value= "自增id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 物料编码
     */
    @ApiModelProperty(value= "物料编码")
    private String matNr;
    /**
     * 物料名称
     */
    @ApiModelProperty(value= "物料名称")
    private String makTx;
    /**
     * 物料分组编码
     */
    @ApiModelProperty(value= "物料分组编码")
    @TableField("group_id")
    private String groupId;
    /**
     * 物料分组
     */
    @ApiModelProperty(value= "物料分组")
    @TableField("group_name")
    private String groupName;
    /**
     * 规格
     */
    @ApiModelProperty(value= "规格")
    private String spec;
    /**
     * 型号
     */
    @ApiModelProperty(value= "型号")
    private String model;
    /**
     * 重量
     */
    @ApiModelProperty(value= "重量")
    private Double weight;
    /**
     * 颜色
     */
    @ApiModelProperty(value= "颜色")
    private String color;
    /**
     * 尺寸
     */
    @ApiModelProperty(value= "尺寸")
    private String size;
    /**
     * 单位
     */
    @ApiModelProperty(value= "单位")
    private String unit;
    /**
     * 描述
     */
    @ApiModelProperty(value= "描述")
    private String describe;
    /**
     * 仓库Id
     */
    @ApiModelProperty(value= "仓库Id")
    @TableField("wareHouse_id")
    private String wareHouseId;
    /**
     * 操作类型,1 新增(默认);2 修改;3 禁用;4 启用;
     */
    @ApiModelProperty(value= "操作类型,1 新增(默认);2 修改;3 禁用;4 启用;")
    @TableField("operate_type")
    private Integer operateType;
    /**
     * 1:已发送 0:待发送
     */
    @ApiModelProperty(value= "1:已发送 0:待发送")
    @TableField("send_status")
    private Integer sendStatus;
    public ErpMat() {}
    public ErpMat(String matNr,String makTx,String groupId,String groupName,String spec,String model,Double weight,String color,String size,String unit,String describe,String wareHouseId,Integer operateType,Integer sendStatus) {
        this.matNr = matNr;
        this.makTx = makTx;
        this.groupId = groupId;
        this.groupName = groupName;
        this.spec = spec;
        this.model = model;
        this.weight = weight;
        this.color = color;
        this.size = size;
        this.unit = unit;
        this.describe = describe;
        this.wareHouseId = wareHouseId;
        this.operateType = operateType;
        this.sendStatus = sendStatus;
    }
//    ErpMat erpMat = new ErpMat(
//            null,    // 物料编码[非空]
//            null,    // 物料名称[非空]
//            null,    // 物料分组编码
//            null,    // 物料分组
//            null,    // 规格
//            null,    // 型号
//            null,    // 重量
//            null,    // 颜色
//            null,    // 尺寸
//            null,    // 单位
//            null,    // 描述
//            null,    // 仓库Id
//            null,    // 操作类型,1 新增(默认);2 修改;3 禁用;4 启用;
//            null    // 1:已发送 0:待发送
//    );
}
src/main/java/com/zy/asrs/entity/ErpOrder.java
New file
@@ -0,0 +1,108 @@
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 io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
@Data
@TableName("asr_erp_order")
public class ErpOrder implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 自增id
     */
    @ApiModelProperty(value= "自增id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 订单编码
     */
    @ApiModelProperty(value= "订单编码")
    @TableField("order_no")
    private String orderNo;
    /**
     * 订单类型,1 出库单;2 入库单;3 调拨单;
     */
    @ApiModelProperty(value= "订单类型,1 出库单;2 入库单;3 调拨单;")
    @TableField("order_type")
    private Integer orderType;
    /**
     * 业务类型
     */
    @ApiModelProperty(value= "业务类型")
    @TableField("wk_type")
    private String wkType;
    /**
     * 业务时间
     */
    @ApiModelProperty(value= "业务时间")
    @TableField("business_time")
    private Long businessTime;
    /**
     * 创建时间
     */
    @ApiModelProperty(value= "创建时间")
    @TableField("create_time")
    private Long createTime;
    /**
     * 仓库id
     */
    @ApiModelProperty(value= "仓库id")
    @TableField("warehouse_id")
    private String warehouseId;
    /**
     * 操作类型,1 新增(默认);2 修改;3 取消;4 关闭;
     */
    @ApiModelProperty(value= "操作类型,1 新增(默认);2 修改;3 取消;4 关闭;")
    @TableField("operate_type")
    private Integer operateType;
    /**
     * 发送状态1:已发送 0:待发送
     */
    @ApiModelProperty(value= "发送状态1:已发送 0:待发送")
    @TableField("send_status")
    private Integer sendStatus;
    public ErpOrder() {}
    public ErpOrder(Integer id,String orderNo,Integer orderType,String wkType,Long businessTime,Long createTime,String warehouseId,Integer operateType,Integer sendStatus) {
        this.id = id;
        this.orderNo = orderNo;
        this.orderType = orderType;
        this.wkType = wkType;
        this.businessTime = businessTime;
        this.createTime = createTime;
        this.warehouseId = warehouseId;
        this.operateType = operateType;
        this.sendStatus = sendStatus;
    }
//    ErpOrder erpOrder = new ErpOrder(
//            null,    // 自增id[非空]
//            null,    // 订单编码[非空]
//            null,    // 订单类型,1 出库单;2 入库单;3 调拨单;[非空]
//            null,    // 业务类型[非空]
//            null,    // 业务时间[非空]
//            null,    // 创建时间[非空]
//            null,    // 仓库id[非空]
//            null,    // 操作类型,1 新增(默认);2 修改;3 取消;4 关闭;
//            null    // 发送状态1:已发送 0:待发送
//    );
}
src/main/java/com/zy/asrs/entity/ErpOrderDetl.java
New file
@@ -0,0 +1,117 @@
package com.zy.asrs.entity;
import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
@Data
@TableName("asr_erp_order_detl")
public class ErpOrderDetl implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 单据id
     */
    @ApiModelProperty(value= "单据id")
    @TableField("order_id")
    private Integer orderId;
    /**
     * 行内码
     */
    @ApiModelProperty(value= "行内码")
    @TableField("line_id")
    private String lineId;
    /**
     * 物料编码
     */
    @ApiModelProperty(value= "物料编码")
    private String matNr;
    /**
     * 物料名称
     */
    @ApiModelProperty(value= "物料名称")
    private String makTx;
    /**
     * 数量
     */
    @ApiModelProperty(value= "数量")
    private Long anfme;
    /**
     * 规格
     */
    @ApiModelProperty(value= "规格")
    private String spec;
    /**
     * 型号
     */
    @ApiModelProperty(value= "型号")
    private String model;
    /**
     * 单位
     */
    @ApiModelProperty(value= "单位")
    private String unit;
    /**
     * 批次号
     */
    @ApiModelProperty(value= "批次号")
    private String batch;
    /**
     * 计划跟踪号
     */
    @ApiModelProperty(value= "计划跟踪号")
    @TableField("plan_no")
    private String planNo;
    /**
     * 质检状态,1合格0不合格3让步接收9待检
     */
    @ApiModelProperty(value= "质检状态,1合格0不合格3让步接收9待检")
    @TableField("qc_status")
    private Integer qcStatus;
    public ErpOrderDetl() {}
    public ErpOrderDetl(Integer orderId,String lineId,String matNr,String makTx,Long anfme,String spec,String model,String unit,String batch,String planNo,Integer qcStatus) {
        this.orderId = orderId;
        this.lineId = lineId;
        this.matNr = matNr;
        this.makTx = makTx;
        this.anfme = anfme;
        this.spec = spec;
        this.model = model;
        this.unit = unit;
        this.batch = batch;
        this.planNo = planNo;
        this.qcStatus = qcStatus;
    }
//    ErpOrderDetl erpOrderDetl = new ErpOrderDetl(
//            null,    // 单据id[非空]
//            null,    // 行内码[非空]
//            null,    // 物料编码[非空]
//            null,    // 物料名称[非空]
//            null,    // 数量[非空]
//            null,    // 规格
//            null,    // 型号
//            null,    // 单位
//            null,    // 批次号
//            null,    // 计划跟踪号
//            null    // 质检状态,1合格0不合格3让步接收9待检
//    );
}
src/main/java/com/zy/asrs/entity/param/MatSyncParam.java
@@ -19,7 +19,7 @@
    public List<MatParam> matDetails;
    @Data
    public class MatParam{
    public static class MatParam{
        /**
         * 商品编号
         */
src/main/java/com/zy/asrs/entity/param/OrderDto.java
New file
@@ -0,0 +1,20 @@
package com.zy.asrs.entity.param;
import com.zy.asrs.entity.ErpOrder;
import com.zy.asrs.entity.ErpOrderDetl;
import lombok.Data;
import java.util.List;
@Data
public class OrderDto {
    private String orderNo;
    private Integer orderType;
    private String wkType;
    private Long businessTime;
    private Long createTime;
    private String wareHouseId;
    private Integer operateType;
    private Integer sendStatus;
    private List<ErpOrderDetl> orderItems;
}
src/main/java/com/zy/asrs/entity/param/TokenInfoParam.java
New file
@@ -0,0 +1,14 @@
package com.zy.asrs.entity.param;
import lombok.Data;
@Data
public class TokenInfoParam {
    private  String appId;
    private  long expireAt;
    public TokenInfoParam(String appId, long expireAt) {
        this.appId = appId;
        this.expireAt = expireAt;
    }
}
src/main/java/com/zy/asrs/mapper/ErpMatMapper.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.mapper;
import com.zy.asrs.entity.ErpMat;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface ErpMatMapper extends BaseMapper<ErpMat> {
}
src/main/java/com/zy/asrs/mapper/ErpOrderDetlMapper.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.mapper;
import com.zy.asrs.entity.ErpOrderDetl;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface ErpOrderDetlMapper extends BaseMapper<ErpOrderDetl> {
}
src/main/java/com/zy/asrs/mapper/ErpOrderMapper.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.mapper;
import com.zy.asrs.entity.ErpOrder;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface ErpOrderMapper extends BaseMapper<ErpOrder> {
}
src/main/java/com/zy/asrs/service/ErpMatService.java
New file
@@ -0,0 +1,8 @@
package com.zy.asrs.service;
import com.zy.asrs.entity.ErpMat;
import com.baomidou.mybatisplus.service.IService;
public interface ErpMatService extends IService<ErpMat> {
}
src/main/java/com/zy/asrs/service/ErpOrderDetlService.java
New file
@@ -0,0 +1,8 @@
package com.zy.asrs.service;
import com.zy.asrs.entity.ErpOrderDetl;
import com.baomidou.mybatisplus.service.IService;
public interface ErpOrderDetlService extends IService<ErpOrderDetl> {
}
src/main/java/com/zy/asrs/service/ErpOrderService.java
New file
@@ -0,0 +1,8 @@
package com.zy.asrs.service;
import com.zy.asrs.entity.ErpOrder;
import com.baomidou.mybatisplus.service.IService;
public interface ErpOrderService extends IService<ErpOrder> {
}
src/main/java/com/zy/asrs/service/OpenService.java
@@ -4,7 +4,9 @@
import com.zy.asrs.entity.result.OpenOrderCompeteResult;
import com.zy.asrs.entity.result.StockVo;
import java.io.IOException;
import java.util.List;
import java.util.Map;
public interface OpenService {
@@ -43,4 +45,12 @@
     * @param param
     */
    void syncMat(MatSyncParam param);
    void syncErpMat(List<Map<String, Object>> body);
    Map<String, Object> addErpOrder(List<OrderDto> orders);
    List<Map<String, Object>> mesInventoryDetails(Map<String, Object> param) throws IOException;
    List<Map<String, Object>> mesInventorySummary(Map<String, Object> param) throws IOException;
}
src/main/java/com/zy/asrs/service/impl/ErpMatServiceImpl.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.service.impl;
import com.zy.asrs.mapper.ErpMatMapper;
import com.zy.asrs.entity.ErpMat;
import com.zy.asrs.service.ErpMatService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service("erpMatService")
public class ErpMatServiceImpl extends ServiceImpl<ErpMatMapper, ErpMat> implements ErpMatService {
}
src/main/java/com/zy/asrs/service/impl/ErpOrderDetlServiceImpl.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.service.impl;
import com.zy.asrs.mapper.ErpOrderDetlMapper;
import com.zy.asrs.entity.ErpOrderDetl;
import com.zy.asrs.service.ErpOrderDetlService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service("erpOrderDetlService")
public class ErpOrderDetlServiceImpl extends ServiceImpl<ErpOrderDetlMapper, ErpOrderDetl> implements ErpOrderDetlService {
}
src/main/java/com/zy/asrs/service/impl/ErpOrderServiceImpl.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.service.impl;
import com.zy.asrs.mapper.ErpOrderMapper;
import com.zy.asrs.entity.ErpOrder;
import com.zy.asrs.service.ErpOrderService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service("erpOrderService")
public class ErpOrderServiceImpl extends ServiceImpl<ErpOrderMapper, ErpOrder> implements ErpOrderService {
}
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -11,17 +11,29 @@
import com.zy.asrs.entity.result.StockVo;
import com.zy.asrs.mapper.TagMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.service.ErpMatService;
import com.zy.asrs.service.ErpOrderService;
import com.zy.asrs.service.ErpOrderDetlService;
import com.zy.asrs.utils.MatUtils;
import com.zy.common.model.DetlDto;
import com.zy.common.utils.HttpHandler;
import com.zy.common.utils.NodeUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionTemplate;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by vincent on 2022/4/9
@@ -48,7 +60,16 @@
    private TagService tagService;
    @Autowired
    private TagMapper tagMapper;
    @Autowired
    private ErpMatService erpMatService;
    @Autowired
    private ErpOrderService erpOrderService;
    @Autowired
    private ErpOrderDetlService erpOrderDetlService;
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
    private PlatformTransactionManager transactionManager;
    @Override
    @Transactional
    public void pakinOrderCreate(OpenOrderPakinParam param) {
@@ -519,7 +540,7 @@
                } else {
                    tagId = tagService.getTop().getId();
                }
                mat.sync(param);
                mat.sync(matParam);
//            mat.setMatnr(param.getMatnr());
//            mat.setMaktx(param.getMaktx());
//            mat.setSpecs(param.getSpecs());
@@ -535,7 +556,7 @@
                    log.info("同步新物料[商品编号:{}]", mat.getMatnr());
                }
            } else {
                mat.sync(param);
                mat.sync(matParam);
                if (!matService.update(mat, new EntityWrapper<Mat>().eq("matnr",matParam.getMatnr()))) {
                    throw new CoolException("更新已存在商品信息失败,请联系管理员");
                }
@@ -544,4 +565,531 @@
    }
    @Override
    @Transactional
    public void syncErpMat(List<Map<String, Object>> body) {
        if (Cools.isEmpty(body)) {
            return;
        }
        int count = 0;
        for (Map<String, Object> m : body) {
            Object matNrObj = m.get("matNr");
            Object makTxObj = m.get("makTx");
            if (Cools.isEmpty(matNrObj) || Cools.isEmpty(makTxObj)) {
                continue;
            }
            ErpMat erpMat = new ErpMat();
            erpMat.setMatNr(String.valueOf(matNrObj));
            erpMat.setMakTx(String.valueOf(makTxObj));
            Object groupIdObj = m.get("groupId");
            if (!Cools.isEmpty(groupIdObj)) {
                erpMat.setGroupId(String.valueOf(groupIdObj));
            }
            Object groupNameObj = m.get("groupName");
            if (!Cools.isEmpty(groupNameObj)) {
                erpMat.setGroupName(String.valueOf(groupNameObj));
            }
            Object specObj = m.get("spec");
            if (!Cools.isEmpty(specObj)) {
                erpMat.setSpec(String.valueOf(specObj));
            }
            Object modelObj = m.get("model");
            if (!Cools.isEmpty(modelObj)) {
                erpMat.setModel(String.valueOf(modelObj));
            }
            Object weightObj = m.get("weight");
            if (!Cools.isEmpty(weightObj)) {
                Double w = null;
                if (weightObj instanceof Number) {
                    w = ((Number) weightObj).doubleValue();
                } else {
                    try {
                        w = Double.valueOf(String.valueOf(weightObj));
                    } catch (Exception ignored) {}
                }
                erpMat.setWeight(w);
            }
            Object colorObj = m.get("color");
            if (!Cools.isEmpty(colorObj)) {
                erpMat.setColor(String.valueOf(colorObj));
            }
            Object sizeObj = m.get("size");
            if (!Cools.isEmpty(sizeObj)) {
                erpMat.setSize(String.valueOf(sizeObj));
            }
            Object unitObj = m.get("unit");
            if (!Cools.isEmpty(unitObj)) {
                erpMat.setUnit(String.valueOf(unitObj));
            }
            Object describleObj = m.get("describle");
            if (!Cools.isEmpty(describleObj)) {
                erpMat.setDescribe(String.valueOf(describleObj));
            }
            Object wareHouseIdObj = m.get("wareHouseId");
            if (!Cools.isEmpty(wareHouseIdObj)) {
                erpMat.setWareHouseId(String.valueOf(wareHouseIdObj));
            }
            // 调用外部接口校验
            String syncError = null;
            String whId = erpMat.getWareHouseId();
            if (!Cools.isEmpty(whId)) {
                if ("WH01".equals(whId)) {
                    syncError = syncToWarehouse1(erpMat);
                } else if ("WH2".equals(whId)) {
                    syncError = syncToWarehouse2(erpMat);
                } else if ("WH3".equals(whId)) {
                    syncError = syncToWarehouse3(erpMat);
                } else {
                    callApiLogSave(null, null, "未找到对应仓库编码!!", true);
                    throw new CoolException("同步外部接口失败,仓库ID:" + whId + ",错误信息:未找到对应仓库编号"  );
                }
            }
            if (syncError != null) {
                // 如果同步失败,则不插入数据库,抛异常回滚或者跳过(当前逻辑为抛异常,因为是事务整体)
                // 若要部分成功,需要调整事务策略。这里假设要求全部成功。
                throw new CoolException("同步外部接口失败,仓库ID:" + whId + ",物料:" + erpMat.getMatNr() + ",错误信息:" + syncError);
            }
            Object operateTypeObj = m.get("operateType");
            if (!Cools.isEmpty(operateTypeObj)) {
                Integer ot = null;
                if (operateTypeObj instanceof Number) {
                    ot = ((Number) operateTypeObj).intValue();
                } else {
                    try {
                        ot = Integer.valueOf(String.valueOf(operateTypeObj));
                    } catch (Exception ignored) {}
                }
                erpMat.setOperateType(ot);
            }
            erpMat.setSendStatus(1);
            boolean ok = erpMatService.insert(erpMat);
            if (ok) {
                count++;
            }
        }
        if (count <= 0) {
            throw new CoolException("同步物料失败,无有效数据插入");
        }
    }
    // 模拟调用仓库1接口
    private String syncToWarehouse1(ErpMat mat) {
        log.info("Calling Warehouse 1 API for mat: {}", mat.getMatNr());
        return callMatSyncApi(mat, "http://localhost:8081");
    }
    // 模拟调用仓库2接口
    private String syncToWarehouse2(ErpMat mat) {
        log.info("Calling Warehouse 2 API for mat: {}", mat.getMatNr());
        return callMatSyncApi(mat, "http://localhost:8080");
    }
    // 模拟调用仓库3接口
    private String syncToWarehouse3(ErpMat mat) {
        log.info("Calling Warehouse 3 API for mat: {}", mat.getMatNr());
        return callMatSyncApi(mat, "http://localhost:8080");
    }
    private String callMatSyncApi(ErpMat mat, String baseUrl) {
        try {
            // 构造请求参数
            MatSyncParam param = new MatSyncParam();
            List<MatSyncParam.MatParam> list = new ArrayList<>();
            MatSyncParam.MatParam matParam = new MatSyncParam.MatParam();
            Date now = new Date();
            // 字段映射
            matParam.setMatnr(mat.getMatNr());
            matParam.setMaktx(mat.getMakTx());
            matParam.setSpecs(mat.getSpec());
            matParam.setModel(mat.getModel());
            matParam.setWeight(mat.getWeight());
            matParam.setColor(mat.getColor());
            matParam.setUnit(mat.getUnit());
            matParam.setMemo(mat.getDescribe());
            matParam.setGroupCode(mat.getGroupId());
            matParam.setGroupName(mat.getGroupName());
            list.add(matParam);
            param.setMatDetails(list);
            param.setCreateTime(String.valueOf(now));
            String path = "/lfdwms/open/asrs/order/matSync/default/v1";
            String json = JSON.toJSONString(param);
            Map<String, Object> headers = new HashMap<>();
            headers.put("appkey", "ea1f0459efc02a79f046f982767939ae");
            // headers.put("x-acgw-identity", "your_identity");
            String response = new HttpHandler.Builder()
                    .setHeaders(headers)
                    .setUri(baseUrl)
                    .setPath(path)
                    .setJson(json)
                    .build()
                    .doPost();
            if (Cools.isEmpty(response)) {
                return "接口无响应";
            }
            JSONObject jsonResponse = JSON.parseObject(response);
            if (jsonResponse == null) {
                return "接口响应格式错误";
            }
            // 根据实际返回结构判断成功失败
            // 假设 code == 0 或 200 为成功
            Integer code = jsonResponse.getInteger("code");
            if (code != null && (code == 0 || code == 200)) {
                return null; // 成功返回 null
            } else {
                return jsonResponse.getString("msg") != null ? jsonResponse.getString("msg") : "未知错误,code=" + code;
            }
        } catch (Exception e) {
            log.error("Call sync api error", e);
            return "接口调用异常:" + e.getMessage();
        }
    }
    @Override
    public Map<String, Object> addErpOrder(List<OrderDto> orders) {
        if (Cools.isEmpty(orders)) {
            Map<String, Object> res = new HashMap<>();
            res.put("result", "FAIL");
            res.put("successOrders", new ArrayList<>());
            res.put("failOrders", new ArrayList<>());
            res.put("successCount", 0);
            res.put("failCount", 0);
            return res;
        }
        TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
        transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
        List<String> successOrders = new ArrayList<>();
        List<Map<String, Object>> failOrders = new ArrayList<>();
        for (OrderDto dto : orders) {
            String orderNo = dto != null ? dto.getOrderNo() : null;
            try {
                transactionTemplate.execute(status -> {
                    if (dto == null) {
                        throw new CoolException("订单参数不完整");
                    }
                    ErpOrder order = new ErpOrder();
                    order.setOrderNo(dto.getOrderNo());
                    order.setOrderType(dto.getOrderType());
                    order.setWkType(dto.getWkType());
                    order.setBusinessTime(dto.getBusinessTime());
                    order.setCreateTime(dto.getCreateTime());
                    order.setWarehouseId(dto.getWareHouseId());
                    order.setOperateType(dto.getOperateType());
                    order.setSendStatus(dto.getSendStatus() != null ? dto.getSendStatus() : 0);
                    List<ErpOrderDetl> detls = dto.getOrderItems();
                    if (Cools.isEmpty(order.getOrderNo()) || order.getOrderType() == null
                            || Cools.isEmpty(order.getWkType()) || order.getBusinessTime() == null || order.getCreateTime() == null
                            || Cools.isEmpty(order.getWarehouseId())) {
                        throw new CoolException("订单参数不完整");
                    }
                    if (Cools.isEmpty(detls)) {
                        throw new CoolException("订单明细为空");
                    }
                    String syncError = null;
                    String whId = order.getWarehouseId();
                    Integer orderType = order.getOrderType();
                    if (!Cools.isEmpty(whId)) {
                        if ("WH01".equals(whId)) {
                            syncError = syncOrderToWarehouse1(order, detls, orderType);
                        } else if ("WH2".equals(whId)) {
                            syncError = syncOrderToWarehouse2(order, detls, orderType);
                        } else if ("WH3".equals(whId)) {
                            syncError = syncOrderToWarehouse3(order, detls, orderType);
                        } else {
                            throw new CoolException("未找到对应仓库编号");
                        }
                    }
                    if (syncError != null) {
                        throw new CoolException(syncError);
                    }
                    if (!erpOrderService.insert(order)) {
                        throw new CoolException("订单插入失败");
                    }
                    if (order.getId() == null) {
                        throw new CoolException("订单插入失败,未返回orderId");
                    }
                    for (ErpOrderDetl detl : detls) {
                        if (detl == null || Cools.isEmpty(detl.getLineId()) || Cools.isEmpty(detl.getMatNr())
                                || Cools.isEmpty(detl.getMakTx()) || detl.getAnfme() == null) {
                            throw new CoolException("明细参数不完整");
                        }
                        detl.setOrderId(order.getId());
                        if (!erpOrderDetlService.insert(detl)) {
                            throw new CoolException("订单明细插入失败");
                        }
                    }
                    return null;
                });
                successOrders.add(orderNo);
            } catch (Exception e) {
                Map<String, Object> fail = new HashMap<>();
                fail.put("orderNo", orderNo);
                fail.put("msg", e.getMessage());
                failOrders.add(fail);
            }
        }
        Map<String, Object> res = new HashMap<>();
        res.put("successOrders", successOrders);
        res.put("failOrders", failOrders);
        res.put("successCount", successOrders.size());
        res.put("failCount", failOrders.size());
        res.put("result", failOrders.isEmpty() ? "SUCCESS" : (successOrders.isEmpty() ? "FAIL" : "PART_SUCCESS"));
        return res;
    }
    @Override
    public List<Map<String, Object>> mesInventoryDetails(Map<String, Object> param) throws IOException {
        String wareHouseId = param != null ? String.valueOf(param.get("wareHouseId")) : null;
        if ("null".equalsIgnoreCase(wareHouseId)) wareHouseId = null;
        List<String> whIds = new ArrayList<>();
        if (Cools.isEmpty(wareHouseId)) {
            whIds.add("WH01");
            whIds.add("WH02");
            whIds.add("WH03");
        } else {
            whIds.add(wareHouseId);
        }
        List<Map<String, Object>> result = new ArrayList<>();
        for (String whId : whIds) {
            String baseUrl = getWarehouseBaseUrl(whId);
            if (Cools.isEmpty(baseUrl)) {
                throw new CoolException("未找到对应仓库编号");
            }
            Map<String, Object> payload = param == null ? new HashMap<>() : new HashMap<>(param);
            payload.put("wareHouseId", whId);
            List<Map<String, Object>> data = callMesInventoryApi(baseUrl, "/lfdwms/open/asrs/MES/inventory/details", payload);
            if (!Cools.isEmpty(data)) {
                result.addAll(data);
            }
        }
        return result;
    }
    @Override
    public List<Map<String, Object>> mesInventorySummary(Map<String, Object> param) throws IOException {
        String wareHouseId = param != null ? String.valueOf(param.get("wareHouseId")) : null;
        if ("null".equalsIgnoreCase(wareHouseId)) wareHouseId = null;
        List<String> whIds = new ArrayList<>();
        if (Cools.isEmpty(wareHouseId)) {
            whIds.add("WH01");
            whIds.add("WH02");
            whIds.add("WH03");
        } else {
            whIds.add(wareHouseId);
        }
        List<Map<String, Object>> result = new ArrayList<>();
        for (String whId : whIds) {
            String baseUrl = getWarehouseBaseUrl(whId);
            if (Cools.isEmpty(baseUrl)) {
                throw new CoolException("未找到对应仓库编号");
            }
            Map<String, Object> payload = param == null ? new HashMap<>() : new HashMap<>(param);
            payload.put("wareHouseId", whId);
            List<Map<String, Object>> data = callMesInventoryApi(baseUrl, "/lfdwms/open/asrs/MES/inventory/summary", payload);
            if (!Cools.isEmpty(data)) {
                result.addAll(data);
            }
        }
        return result;
    }
    private String getWarehouseBaseUrl(String wareHouseId) {
        if (Cools.isEmpty(wareHouseId)) {
            return null;
        }
        String wh = wareHouseId.trim();
        if ("WH01".equalsIgnoreCase(wh) || "WH1".equalsIgnoreCase(wh)) {
            return "http://localhost:8081";
        }
        if ("WH02".equalsIgnoreCase(wh) || "WH2".equalsIgnoreCase(wh)) {
            return "http://localhost:8080";
        }
        if ("WH03".equalsIgnoreCase(wh) || "WH3".equalsIgnoreCase(wh)) {
            return "http://localhost:8080";
        }
        return null;
    }
    private List<Map<String, Object>> callMesInventoryApi(String baseUrl, String path, Map<String, Object> payload) throws IOException {
        String json = JSON.toJSONString(payload == null ? new HashMap<>() : payload);
        Map<String, Object> headers = new HashMap<>();
        headers.put("appkey", "ea1f0459efc02a79f046f982767939ae");
        String response = new HttpHandler.Builder()
                .setHeaders(headers)
                .setUri(baseUrl)
                .setPath(path)
                .setJson(json)
                .build()
                .doPost();
        if (Cools.isEmpty(response)) {
            throw new CoolException("接口无响应");
        }
        JSONObject jsonResponse = JSON.parseObject(response);
        if (jsonResponse == null) {
            throw new CoolException("接口响应格式错误");
        }
        Integer code = jsonResponse.getInteger("code");
        if (code != null && (code == 0 || code == 200)) {
            Object data = jsonResponse.get("data");
            if (data == null) {
                return new ArrayList<>();
            }
            if (data instanceof List) {
                return JSON.parseObject(JSON.toJSONString(data), List.class);
            }
            List<Map<String, Object>> list = new ArrayList<>();
            Map<String, Object> one = JSON.parseObject(JSON.toJSONString(data), Map.class);
            if (one != null) {
                list.add(one);
            }
            return list;
        }
        String msg = jsonResponse.getString("msg");
        throw new CoolException(!Cools.isEmpty(msg) ? msg : "未知错误,code=" + code);
    }
    // 模拟调用仓库1接口
    private String syncOrderToWarehouse1(ErpOrder order, List<ErpOrderDetl> details, Integer orderType) {
        log.info("Calling Warehouse 1 API for order: {}", order.getOrderNo());
        return callOrderSyncApi(order, details, orderType, "http://localhost:8081");
    }
    // 模拟调用仓库2接口
    private String syncOrderToWarehouse2(ErpOrder order, List<ErpOrderDetl> details, Integer orderType) {
        log.info("Calling Warehouse 2 API for order: {}", order.getOrderNo());
        return callOrderSyncApi(order, details, orderType, "http://localhost:8080");
    }
    // 模拟调用仓库3接口
    private String syncOrderToWarehouse3(ErpOrder order, List<ErpOrderDetl> details, Integer orderType) {
        log.info("Calling Warehouse 3 API for order: {}", order.getOrderNo());
        return callOrderSyncApi(order, details, orderType, "http://localhost:8080");
    }
    private String callOrderSyncApi(ErpOrder order, List<ErpOrderDetl> details, Integer orderType, String baseUrl) {
        try {
            // 根据 orderType 判断接口路径
            // 假设 1=出库,2=入库(请根据实际业务调整,这里按用户描述逻辑实现)
            // 用户描述:若是入库单则调用order/pakin/default/v1,若是出库order/pakout/default/v1
            // 假设 orderType 2 为入库,1 或 3 为出库(需确认 3 调拨单属于哪类,暂归为出库或不处理)
            String path;
            String json;
            if (orderType == 2) {
                // 入库单
                path = "/lfdwms/open/asrs/order/pakin/default/v1";
                OpenOrderPakinParam param = new OpenOrderPakinParam();
                param.setOrderNo(order.getOrderNo());
                // 这里可能需要映射 wkType 到 orderType 字符串,或者直接用
                param.setOrderType(order.getWkType());
                param.setOrderTime(DateUtils.convert(new Date(order.getBusinessTime())));
                List<DetlDto> detlDtos = new ArrayList<>();
                if (!Cools.isEmpty(details)) {
                    for (ErpOrderDetl d : details) {
                        DetlDto dto = new DetlDto();
                        dto.setMatnr(d.getMatNr());
                        // 如果有 batch 字段则设置,OpenOrderPakinParam 的 DetlDto 可能需要确认字段
                        dto.setBatch(d.getBatch());
                        dto.setAnfme(d.getAnfme() != null ? d.getAnfme().doubleValue() : 0.0);
                        // 其他字段映射...
                        detlDtos.add(dto);
                    }
                }
                param.setOrderDetails(detlDtos);
                json = JSON.toJSONString(param);
            } else if (orderType == 1 || orderType == 3) {
                // 出库单
                path = "/lfdwms/open/asrs/order/pakout/default/v1";
                OpenOrderPakoutParam param = new OpenOrderPakoutParam();
                param.setOrderNo(order.getOrderNo());
                param.setOrderType(order.getWkType());
                param.setOrderTime(DateUtils.convert(new Date(order.getBusinessTime())));
                param.setLgort("5006"); // 必填校验要求
                List<DetlDto> detlDtos = new ArrayList<>();
                if (!Cools.isEmpty(details)) {
                    for (ErpOrderDetl d : details) {
                        DetlDto dto = new DetlDto();
                        dto.setMatnr(d.getMatNr());
                        dto.setBatch(d.getBatch());
                        dto.setAnfme(d.getAnfme() != null ? d.getAnfme().doubleValue() : 0.0);
                        detlDtos.add(dto);
                    }
                }
                param.setOrderDetails(detlDtos);
                json = JSON.toJSONString(param);
            } else {
                return "未知的订单类型:" + orderType;
            }
            Map<String, Object> headers = new HashMap<>();
            headers.put("appkey", "ea1f0459efc02a79f046f982767939ae");
            String response = new HttpHandler.Builder()
                    .setHeaders(headers)
                    .setUri(baseUrl)
                    .setPath(path)
                    .setJson(json)
                    .build()
                    .doPost();
            if (Cools.isEmpty(response)) {
                return "接口无响应";
            }
            JSONObject jsonResponse = JSON.parseObject(response);
            if (jsonResponse == null) {
                return "接口响应格式错误";
            }
            Integer code = jsonResponse.getInteger("code");
            if (code != null && (code == 0 || code == 200)) {
                return null;
            } else {
                return jsonResponse.getString("msg") != null ? jsonResponse.getString("msg") : "未知错误,code=" + code;
            }
        } catch (Exception e) {
            log.error("Call order sync api error", e);
            return "接口调用异常:" + e.getMessage();
        }
    }
    public void callApiLogSave(Mat mat, String url, String response, Boolean bool) {
        apiLogService.save(
                "ERP同步物料信息",
                url,
                null,
                null,
                "物料编号:" + (mat != null ? mat.getMatnr() : null) +
                        "、物料名称:" + (mat != null ? mat.getMaktx() : null),
                response,
                bool
        );
    }
}
src/main/java/com/zy/asrs/task/CheckDeepScheduler.java
@@ -46,7 +46,7 @@
    /**
     * 将两个深库位合并为深浅库位,物料号相同,源库位入库日期早于目标库位对应深库位入库日期,库位状态都为F
     */
    @Scheduled(cron = "0/5 * * * * ?")
//    @Scheduled(cron = "0/5 * * * * ?")
    private void execute() throws ParseException {
//        if (!confirmDeep) return;
        //if (true) return;
src/main/java/com/zy/asrs/task/ErrorStockScheduler.java
@@ -19,7 +19,7 @@
    @Autowired
    private ErrorStockHandler errorStockHandler;
    @Scheduled(cron = "0/3 * * * * ? ")
//    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){
        ReturnT<String> returnT = errorStockHandler.start();
        if (!returnT.isSuccess()) {
src/main/java/com/zy/asrs/task/NotifyLogScheduler.java
@@ -19,7 +19,7 @@
    @Autowired
    private NotifyLogHandler notifyLogHandler;
    @Scheduled(cron = "0/3 * * * * ? ")
//    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){
        ReturnT<String> returnT = notifyLogHandler.start();
        if (!returnT.isSuccess()) {
src/main/java/com/zy/asrs/task/OrderMoveHistoryScheduler.java
@@ -14,7 +14,7 @@
    /**
     * 将已完成order和orderDetl移动到log表
     */
    @Scheduled(cron = "0/30 * * * * ?")
//    @Scheduled(cron = "0/30 * * * * ?")
    public void execute(){
        orderMoveHistoryHandler.start();
    }
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
@@ -29,7 +29,7 @@
    @Autowired
    private ApiLogService apiLogService;
    @Scheduled(cron = "0 0 1 * * ? ")
//    @Scheduled(cron = "0 0 1 * * ? ")
    public void clearApiLog(){
        try {
            apiLogService.clearWeekBefore();
src/main/java/com/zy/asrs/task/OverYearLogScheduler.java
@@ -19,7 +19,7 @@
    @Autowired
    private OverYearLogHandler overYearLogHandler;
    @Scheduled(cron = "0/3 * * * * ? ")
//    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){
        ReturnT<String> returnT = overYearLogHandler.start();
        if (!returnT.isSuccess()) {
src/main/java/com/zy/asrs/task/PlcLogScheduler.java
@@ -19,7 +19,7 @@
    @Autowired
    private PlcLogHandler plcLogHandler;
    @Scheduled(cron = "0/3 * * * * ? ")
//    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){
        ReturnT<String> returnT = plcLogHandler.start();
        if (!returnT.isSuccess()) {
src/main/java/com/zy/asrs/task/WorkLogScheduler.java
@@ -23,7 +23,7 @@
    @Autowired
    private WrkMastService wrkMastService;
    @Scheduled(cron = "0/3 * * * * ? ")
//    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){
        List<WrkMast> wrkMasts = wrkMastService.selectToBeHistoryData();
        if (wrkMasts.isEmpty()) {
src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -26,7 +26,7 @@
    @Autowired
    private WorkMastHandler workMastHandler;
    @Scheduled(cron = "0/3 * * * * ? ")
//    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){
        List<WrkMast> wrkMasts = wrkMastService.selectToBeCompleteData();
        if (wrkMasts.isEmpty()) {
src/main/java/com/zy/common/CodeBuilder.java
@@ -17,10 +17,10 @@
//        generator.table="sys_host";
        // sqlserver
        generator.sqlOsType = SqlOsType.SQL_SERVER;
        generator.url="192.168.4.15:1433;databasename=hylyasrs";
        generator.url="127.0.0.1:1433;databasename=lfdasrs-ERP";
        generator.username="sa";
        generator.password="sa@123";
        generator.table="man_loc_check";
        generator.table="asr_erp_order_detl";
        generator.packagePath="com.zy.asrs";
        generator.build();
    }
src/main/java/com/zy/ints/entity/ErpDetTb.java
File was deleted
src/main/java/com/zy/ints/entity/ErpDetTbBak.java
File was deleted
src/main/java/com/zy/ints/entity/ErpLk.java
File was deleted
src/main/java/com/zy/ints/entity/ErpLkBak.java
File was deleted
src/main/java/com/zy/ints/entity/LkDetTb.java
File was deleted
src/main/java/com/zy/ints/entity/LkDetTbBak.java
File was deleted
src/main/java/com/zy/ints/entity/Prdt.java
File was deleted
src/main/java/com/zy/ints/entity/PrdtBak.java
File was deleted
src/main/java/com/zy/ints/erp/ErpDbProperties.java
File was deleted
src/main/java/com/zy/ints/erp/ErpSqlServer.java
File was deleted
src/main/java/com/zy/ints/task/scheduler/ErpDetTbScheduler.java
File was deleted
src/main/java/com/zy/ints/task/scheduler/ErpLkScheduler.java
File was deleted
src/main/java/com/zy/ints/task/scheduler/ErpPrdtScheduler.java
File was deleted
src/main/java/com/zy/ints/task/scheduler/ErpPrdtSchedulerNew.java
File was deleted
src/main/java/com/zy/ints/task/scheduler/LkDetTbScheduler.java
File was deleted
src/main/java/erpMat.sql
New file
@@ -0,0 +1,18 @@
-- save erpMat record
-- mysql
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'erpMat/erpMat.html', 'erpMat管理', null , '2', null , '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'erpMat#view', '查询', '', '3', '0', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'erpMat#btn-add', '新增', '', '3', '1', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'erpMat#btn-edit', '编辑', '', '3', '2', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'erpMat#btn-delete', '删除', '', '3', '3', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'erpMat#btn-export', '导出', '', '3', '4', '1');
-- sqlserver
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'erpMat/erpMat.html', N'erpMat管理', null, '2', null, '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'erpMat#view', N'查询', '', '3', '0', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'erpMat#btn-add', N'新增', '', '3', '1', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'erpMat#btn-edit', N'编辑', '', '3', '2', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'erpMat#btn-delete', N'删除', '', '3', '3', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'erpMat#btn-export', N'导出', '', '3', '4', '1');
src/main/java/erpOrder.sql
New file
@@ -0,0 +1,18 @@
-- save erpOrder record
-- mysql
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'erpOrder/erpOrder.html', 'erpOrder管理', null , '2', null , '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'erpOrder#view', '查询', '', '3', '0', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'erpOrder#btn-add', '新增', '', '3', '1', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'erpOrder#btn-edit', '编辑', '', '3', '2', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'erpOrder#btn-delete', '删除', '', '3', '3', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'erpOrder#btn-export', '导出', '', '3', '4', '1');
-- sqlserver
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'erpOrder/erpOrder.html', N'erpOrder管理', null, '2', null, '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'erpOrder#view', N'查询', '', '3', '0', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'erpOrder#btn-add', N'新增', '', '3', '1', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'erpOrder#btn-edit', N'编辑', '', '3', '2', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'erpOrder#btn-delete', N'删除', '', '3', '3', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'erpOrder#btn-export', N'导出', '', '3', '4', '1');
src/main/java/erpOrderDetl.sql
New file
@@ -0,0 +1,18 @@
-- save erpOrderDetl record
-- mysql
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'erpOrderDetl/erpOrderDetl.html', 'erpOrderDetl管理', null , '2', null , '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'erpOrderDetl#view', '查询', '', '3', '0', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'erpOrderDetl#btn-add', '新增', '', '3', '1', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'erpOrderDetl#btn-edit', '编辑', '', '3', '2', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'erpOrderDetl#btn-delete', '删除', '', '3', '3', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'erpOrderDetl#btn-export', '导出', '', '3', '4', '1');
-- sqlserver
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'erpOrderDetl/erpOrderDetl.html', N'erpOrderDetl管理', null, '2', null, '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'erpOrderDetl#view', N'查询', '', '3', '0', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'erpOrderDetl#btn-add', N'新增', '', '3', '1', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'erpOrderDetl#btn-edit', N'编辑', '', '3', '2', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'erpOrderDetl#btn-delete', N'删除', '', '3', '3', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'erpOrderDetl#btn-export', N'导出', '', '3', '4', '1');
src/main/java/mat.sql
New file
@@ -0,0 +1,18 @@
-- save mat record
-- mysql
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'mat/mat.html', 'mat管理', null , '2', null , '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'mat#view', '查询', '', '3', '0', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'mat#btn-add', '新增', '', '3', '1', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'mat#btn-edit', '编辑', '', '3', '2', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'mat#btn-delete', '删除', '', '3', '3', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'mat#btn-export', '导出', '', '3', '4', '1');
-- sqlserver
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'mat/mat.html', N'mat管理', null, '2', null, '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'mat#view', N'查询', '', '3', '0', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'mat#btn-add', N'新增', '', '3', '1', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'mat#btn-edit', N'编辑', '', '3', '2', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'mat#btn-delete', N'删除', '', '3', '3', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'mat#btn-export', N'导出', '', '3', '4', '1');
src/main/resources/application.yml
@@ -1,5 +1,5 @@
server:
  port: 8081
  port: 9999
  servlet:
    context-path: /@pom.build.finalName@
@@ -10,7 +10,7 @@
    enabled: false
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    url: jdbc:sqlserver://localhost:1433;databasename=lfdasrs
    url: jdbc:sqlserver://localhost:1433;databasename=lfdasrsErp
    username: sa
    password: sa@123
  mvc:
@@ -51,10 +51,10 @@
  groupCount: 4
#ERP接口
erp:
  enabled: true
  enabled: false
  enabledNew: false
  enabledErpDetTb: true
  enabledErpPrdt: true
  enabledErpDetTb: false
  enabledErpPrdt: false
  #  enabled: false
  #查看ERP中间表间隔
  refreshtime: 0/5 * * * * ?
src/main/resources/mapper/ErpMatMapper.xml
New file
@@ -0,0 +1,25 @@
<?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.ErpMatMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.ErpMat">
        <result column="id" property="id" />
        <result column="mat_nr " property="matNr" />
        <result column="mak_tx" property="makTx" />
        <result column="group_id" property="groupId" />
        <result column="group_name" property="groupName" />
        <result column="spec" property="spec" />
        <result column="model" property="model" />
        <result column="weight" property="weight" />
        <result column="color" property="color" />
        <result column="size" property="size" />
        <result column="unit" property="unit" />
        <result column="describe" property="describe" />
        <result column="wareHouse_id" property="wareHouseId" />
        <result column="operate_type" property="operateType" />
        <result column="send_status" property="sendStatus" />
    </resultMap>
</mapper>
src/main/resources/mapper/ErpOrderDetlMapper.xml
New file
@@ -0,0 +1,21 @@
<?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.ErpOrderDetlMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.ErpOrderDetl">
        <result column="order_id" property="orderId" />
        <result column="line_id" property="lineId" />
        <result column="mat_nr " property="matNr" />
        <result column="mak_tx" property="makTx" />
        <result column="anfme" property="anfme" />
        <result column="spec" property="spec" />
        <result column="model" property="model" />
        <result column="unit" property="unit" />
        <result column="batch" property="batch" />
        <result column="plan_no" property="planNo" />
        <result column="qc_status" property="qcStatus" />
    </resultMap>
</mapper>
src/main/resources/mapper/ErpOrderMapper.xml
New file
@@ -0,0 +1,19 @@
<?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.ErpOrderMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.ErpOrder">
        <id column="id" property="id" />
        <result column="order_no" property="orderNo" />
        <result column="order_type" property="orderType" />
        <result column="wk_type" property="wkType" />
        <result column="business_time" property="businessTime" />
        <result column="create_time" property="createTime" />
        <result column="warehouse_id" property="warehouseId" />
        <result column="operate_type" property="operateType" />
        <result column="send_status" property="sendStatus" />
    </resultMap>
</mapper>
src/main/webapp/static/js/erpMat/erpMat.js
New file
@@ -0,0 +1,259 @@
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: '#erpMat',
        headers: {token: localStorage.getItem('token')},
        url: baseUrl+'/erpMat/list/auth',
        page: true,
        limit: 15,
        limits: [15, 30, 50, 100, 200, 500],
        toolbar: '#toolbar',
        cellMinWidth: 50,
        height: 'full-120',
        cols: [[
            {type: 'checkbox'}
            ,{field: 'id', align: 'center',title: '自增id'}
            ,{field: 'matNr', align: 'center',title: '物料编码'}
            ,{field: 'makTx', align: 'center',title: '物料名称'}
            ,{field: 'groupId', align: 'center',title: '物料分组编码'}
            ,{field: 'groupName', align: 'center',title: '物料分组'}
            ,{field: 'spec', align: 'center',title: '规格'}
            ,{field: 'model', align: 'center',title: '型号'}
            ,{field: 'weight', align: 'center',title: '重量'}
            ,{field: 'color', align: 'center',title: '颜色'}
            ,{field: 'size', align: 'center',title: '尺寸'}
            ,{field: 'unit', align: 'center',title: '单位'}
            ,{field: 'describe', align: 'center',title: '描述'}
            ,{field: 'wareHouseId', align: 'center',title: '仓库Id'}
            ,{field: 'operateType', align: 'center',title: '操作类型,1 新增(默认);2 修改;3 禁用;4 启用;'}
            ,{field: 'sendStatus', align: 'center',title: '1:已发送 0:待发送'}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:120}
        ]],
        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(erpMat)', 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(erpMat)', 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 = {
                        'erpMat': exportData,
                        'fields': fields
                    };
                    $.ajax({
                        url: baseUrl+"/erpMat/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(erpMat)', 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+"/erpMat/"+(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+"/erpMat/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
            });
        }, 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}
     });
}
src/main/webapp/static/js/erpOrder/erpOrder.js
New file
@@ -0,0 +1,253 @@
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: '#erpOrder',
        headers: {token: localStorage.getItem('token')},
        url: baseUrl+'/erpOrder/list/auth',
        page: true,
        limit: 15,
        limits: [15, 30, 50, 100, 200, 500],
        toolbar: '#toolbar',
        cellMinWidth: 50,
        height: 'full-120',
        cols: [[
            {type: 'checkbox'}
            ,{field: 'id', align: 'center',title: '自增id'}
            ,{field: 'orderNo', align: 'center',title: '订单编码'}
            ,{field: 'orderType', align: 'center',title: '订单类型,1 出库单;2 入库单;3 调拨单;'}
            ,{field: 'wkType', align: 'center',title: '业务类型'}
            ,{field: 'businessTime', align: 'center',title: '业务时间'}
            ,{field: 'createTime', align: 'center',title: '创建时间'}
            ,{field: 'warehouseId', align: 'center',title: '仓库id'}
            ,{field: 'operateType', align: 'center',title: '操作类型,1 新增(默认);2 修改;3 取消;4 关闭;'}
            ,{field: 'sendStatus', align: 'center',title: '发送状态1:已发送 0:待发送'}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:120}
        ]],
        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(erpOrder)', 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(erpOrder)', 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 = {
                        'erpOrder': exportData,
                        'fields': fields
                    };
                    $.ajax({
                        url: baseUrl+"/erpOrder/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(erpOrder)', 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+"/erpOrder/"+(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+"/erpOrder/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
            });
        }, 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}
     });
}
src/main/webapp/static/js/erpOrderDetl/erpOrderDetl.js
New file
@@ -0,0 +1,255 @@
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: '#erpOrderDetl',
        headers: {token: localStorage.getItem('token')},
        url: baseUrl+'/erpOrderDetl/list/auth',
        page: true,
        limit: 15,
        limits: [15, 30, 50, 100, 200, 500],
        toolbar: '#toolbar',
        cellMinWidth: 50,
        height: 'full-120',
        cols: [[
            {type: 'checkbox'}
            ,{field: 'orderId', align: 'center',title: '单据id'}
            ,{field: 'lineId', align: 'center',title: '行内码'}
            ,{field: 'matNr', align: 'center',title: '物料编码'}
            ,{field: 'makTx', align: 'center',title: '物料名称'}
            ,{field: 'anfme', align: 'center',title: '数量'}
            ,{field: 'spec', align: 'center',title: '规格'}
            ,{field: 'model', align: 'center',title: '型号'}
            ,{field: 'unit', align: 'center',title: '单位'}
            ,{field: 'batch', align: 'center',title: '批次号'}
            ,{field: 'planNo', align: 'center',title: '计划跟踪号'}
            ,{field: 'qcStatus', align: 'center',title: '质检状态,1合格0不合格3让步接收9待检'}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:120}
        ]],
        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(erpOrderDetl)', 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(erpOrderDetl)', 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 = {
                        'erpOrderDetl': exportData,
                        'fields': fields
                    };
                    $.ajax({
                        url: baseUrl+"/erpOrderDetl/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(erpOrderDetl)', 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+"/erpOrderDetl/"+(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+"/erpOrderDetl/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
            });
        }, 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}
     });
}
src/main/webapp/views/erpMat/erpMat.html
New file
@@ -0,0 +1,170 @@
<!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="id" 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">&emsp;
                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
                            <i class="layui-icon">&#xe615;</i>搜索
                        </button>
                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
                            <i class="layui-icon">&#xe666;</i>重置
                        </button>
                    </div>
                </div>
            </div>
            <table class="layui-hide" id="erpMat" lay-filter="erpMat"></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/erpMat/erpMat.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="matNr" placeholder="请输入物料编码" lay-vertype="tips" lay-verify="required">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">物料名称: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="makTx" 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="groupId" placeholder="请输入物料分组编码">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">物料分组: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="groupName" placeholder="请输入物料分组">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">规格: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="spec" placeholder="请输入规格">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">型号: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="model" placeholder="请输入型号">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">重量: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="weight" placeholder="请输入重量">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">颜色: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="color" placeholder="请输入颜色">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">尺寸: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="size" placeholder="请输入尺寸">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">单位: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="unit" placeholder="请输入单位">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">描述: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="describe" placeholder="请输入描述">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">仓库Id: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="wareHouseId" placeholder="请输入仓库Id">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">操作类型,1 新增(默认);2 修改;3 禁用;4 启用;: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="operateType" placeholder="请输入操作类型,1 新增(默认);2 修改;3 禁用;4 启用;">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">1:已发送 0:待发送: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="sendStatus" placeholder="请输入1:已发送 0:待发送">
                    </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>
src/main/webapp/views/erpOrder/erpOrder.html
New file
@@ -0,0 +1,140 @@
<!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="id" 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">&emsp;
                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
                            <i class="layui-icon">&#xe615;</i>搜索
                        </button>
                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
                            <i class="layui-icon">&#xe666;</i>重置
                        </button>
                    </div>
                </div>
            </div>
            <table class="layui-hide" id="erpOrder" lay-filter="erpOrder"></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/erpOrder/erpOrder.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">自增id: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="id" placeholder="请输入自增id" lay-vertype="tips" lay-verify="required">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">订单编码: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="orderNo" placeholder="请输入订单编码" lay-vertype="tips" lay-verify="required">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">订单类型,1 出库单;2 入库单;3 调拨单;: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="orderType" placeholder="请输入订单类型,1 出库单;2 入库单;3 调拨单;" lay-vertype="tips" lay-verify="required">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">业务类型: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="wkType" placeholder="请输入业务类型" lay-vertype="tips" lay-verify="required">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">业务时间: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="businessTime" placeholder="请输入业务时间" lay-vertype="tips" lay-verify="required">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">创建时间: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="createTime" placeholder="请输入创建时间" lay-vertype="tips" lay-verify="required">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">仓库id: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="warehouseId" placeholder="请输入仓库id" lay-vertype="tips" lay-verify="required">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">操作类型,1 新增(默认);2 修改;3 取消;4 关闭;: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="operateType" placeholder="请输入操作类型,1 新增(默认);2 修改;3 取消;4 关闭;">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">发送状态1:已发送 0:待发送: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="sendStatus" placeholder="请输入发送状态1:已发送 0:待发送">
                    </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>
src/main/webapp/views/erpOrderDetl/erpOrderDetl.html
New file
@@ -0,0 +1,152 @@
<!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="id" 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">&emsp;
                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
                            <i class="layui-icon">&#xe615;</i>搜索
                        </button>
                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
                            <i class="layui-icon">&#xe666;</i>重置
                        </button>
                    </div>
                </div>
            </div>
            <table class="layui-hide" id="erpOrderDetl" lay-filter="erpOrderDetl"></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/erpOrderDetl/erpOrderDetl.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">单据id: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="orderId" placeholder="请输入单据id" lay-vertype="tips" lay-verify="required">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">行内码: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="lineId" placeholder="请输入行内码" lay-vertype="tips" lay-verify="required">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">物料编码: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="matNr" placeholder="请输入物料编码" lay-vertype="tips" lay-verify="required">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">物料名称: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="makTx" placeholder="请输入物料名称" lay-vertype="tips" lay-verify="required">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">数量: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="anfme" 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="spec" placeholder="请输入规格">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">型号: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="model" placeholder="请输入型号">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">单位: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="unit" placeholder="请输入单位">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">批次号: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="batch" placeholder="请输入批次号">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">计划跟踪号: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="planNo" placeholder="请输入计划跟踪号">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">质检状态,1合格0不合格3让步接收9待检: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="qcStatus" placeholder="请输入质检状态,1合格0不合格3让步接收9待检">
                    </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>