| New file |
| | |
| | | package com.zy.asrs.controller; |
| | | |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.mapper.Wrapper; |
| | | import com.baomidou.mybatisplus.plugins.Page; |
| | | import com.core.common.DateUtils; |
| | | import com.zy.asrs.entity.OrderDetlChangelog; |
| | | import com.zy.asrs.service.OrderDetlChangelogService; |
| | | 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 OrderDetlChangelogController extends BaseController { |
| | | |
| | | @Autowired |
| | | private OrderDetlChangelogService orderDetlChangelogService; |
| | | |
| | | @RequestMapping(value = "/orderDetlChangelog/{id}/auth") |
| | | @ManagerAuth |
| | | public R get(@PathVariable("id") String id) { |
| | | return R.ok(orderDetlChangelogService.selectById(String.valueOf(id))); |
| | | } |
| | | |
| | | @RequestMapping(value = "/orderDetlChangelog/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<OrderDetlChangelog> wrapper = new EntityWrapper<>(); |
| | | excludeTrash(param); |
| | | convert(param, wrapper); |
| | | allLike(OrderDetlChangelog.class, param.keySet(), wrapper, condition); |
| | | if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} |
| | | return R.ok(orderDetlChangelogService.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 = "/orderDetlChangelog/add/auth") |
| | | @ManagerAuth |
| | | public R add(OrderDetlChangelog orderDetlChangelog) { |
| | | orderDetlChangelogService.insert(orderDetlChangelog); |
| | | return R.ok(); |
| | | } |
| | | |
| | | @RequestMapping(value = "/orderDetlChangelog/update/auth") |
| | | @ManagerAuth |
| | | public R update(OrderDetlChangelog orderDetlChangelog){ |
| | | if (Cools.isEmpty(orderDetlChangelog) || null==orderDetlChangelog.getId()){ |
| | | return R.error(); |
| | | } |
| | | orderDetlChangelogService.updateById(orderDetlChangelog); |
| | | return R.ok(); |
| | | } |
| | | |
| | | @RequestMapping(value = "/orderDetlChangelog/delete/auth") |
| | | @ManagerAuth |
| | | public R delete(@RequestParam(value="ids[]") Long[] ids){ |
| | | for (Long id : ids){ |
| | | orderDetlChangelogService.deleteById(id); |
| | | } |
| | | return R.ok(); |
| | | } |
| | | |
| | | @RequestMapping(value = "/orderDetlChangelog/export/auth") |
| | | @ManagerAuth |
| | | public R export(@RequestBody JSONObject param){ |
| | | EntityWrapper<OrderDetlChangelog> wrapper = new EntityWrapper<>(); |
| | | List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class); |
| | | Map<String, Object> map = excludeTrash(param.getJSONObject("orderDetlChangelog")); |
| | | convert(map, wrapper); |
| | | List<OrderDetlChangelog> list = orderDetlChangelogService.selectList(wrapper); |
| | | return R.ok(exportSupport(list, fields)); |
| | | } |
| | | |
| | | @RequestMapping(value = "/orderDetlChangelogQuery/auth") |
| | | @ManagerAuth |
| | | public R query(String condition) { |
| | | EntityWrapper<OrderDetlChangelog> wrapper = new EntityWrapper<>(); |
| | | wrapper.like("id", condition); |
| | | Page<OrderDetlChangelog> page = orderDetlChangelogService.selectPage(new Page<>(0, 10), wrapper); |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | for (OrderDetlChangelog orderDetlChangelog : page.getRecords()){ |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("id", orderDetlChangelog.getId()); |
| | | map.put("value", orderDetlChangelog.getId()); |
| | | result.add(map); |
| | | } |
| | | return R.ok(result); |
| | | } |
| | | |
| | | @RequestMapping(value = "/orderDetlChangelog/check/column/auth") |
| | | @ManagerAuth |
| | | public R query(@RequestBody JSONObject param) { |
| | | Wrapper<OrderDetlChangelog> wrapper = new EntityWrapper<OrderDetlChangelog>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val")); |
| | | if (null != orderDetlChangelogService.selectOne(wrapper)){ |
| | | return R.parse(BaseRes.REPEAT).add(getComment(OrderDetlChangelog.class, String.valueOf(param.get("key")))); |
| | | } |
| | | return R.ok(); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.entity; |
| | | |
| | | import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId; |
| | | import com.baomidou.mybatisplus.enums.IdType; |
| | | import com.baomidou.mybatisplus.annotations.TableField; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import com.baomidou.mybatisplus.annotations.TableName; |
| | | import java.io.Serializable; |
| | | |
| | | @Data |
| | | @TableName("man_order_detl_changelog") |
| | | public class OrderDetlChangelog implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | @ApiModelProperty(value= "") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Integer id; |
| | | |
| | | @ApiModelProperty(value= "") |
| | | @TableField("action_type") |
| | | private String actionType; |
| | | |
| | | @ApiModelProperty(value= "") |
| | | @TableField("order_no") |
| | | private String orderNo; |
| | | |
| | | @ApiModelProperty(value= "") |
| | | private String matnr; |
| | | |
| | | @ApiModelProperty(value= "") |
| | | private String data; |
| | | |
| | | @ApiModelProperty(value= "") |
| | | @TableField("change_time") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date changeTime; |
| | | |
| | | @ApiModelProperty(value= "") |
| | | private Boolean processed; |
| | | |
| | | public OrderDetlChangelog() {} |
| | | |
| | | public OrderDetlChangelog(String actionType,String orderNo,String matnr,String data,Date changeTime,Boolean processed) { |
| | | this.actionType = actionType; |
| | | this.orderNo = orderNo; |
| | | this.matnr = matnr; |
| | | this.data = data; |
| | | this.changeTime = changeTime; |
| | | this.processed = processed; |
| | | } |
| | | |
| | | // OrderDetlChangelog orderDetlChangelog = new OrderDetlChangelog( |
| | | // null, // |
| | | // null, // |
| | | // null, // |
| | | // null, // |
| | | // null, // |
| | | // null // |
| | | // ); |
| | | |
| | | public String getChangeTime$(){ |
| | | if (Cools.isEmpty(this.changeTime)){ |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.changeTime); |
| | | } |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.mapper; |
| | | |
| | | import com.zy.asrs.entity.LocDetlChangelog; |
| | | import com.zy.asrs.entity.OrderDetlChangelog; |
| | | import com.baomidou.mybatisplus.mapper.BaseMapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | | @Repository |
| | | public interface OrderDetlChangelogMapper extends BaseMapper<OrderDetlChangelog> { |
| | | /** |
| | | * 查询未同步的日志 |
| | | */ |
| | | List<OrderDetlChangelog> selectUnprocessedLogs(); |
| | | |
| | | /** |
| | | * 标记日志已处理 |
| | | */ |
| | | int markProcessed(Integer id); |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.service; |
| | | |
| | | import com.zy.asrs.entity.OrderDetlChangelog; |
| | | import com.baomidou.mybatisplus.service.IService; |
| | | |
| | | public interface OrderDetlChangelogService extends IService<OrderDetlChangelog> { |
| | | |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.service.impl; |
| | | |
| | | import com.zy.asrs.mapper.OrderDetlChangelogMapper; |
| | | import com.zy.asrs.entity.OrderDetlChangelog; |
| | | import com.zy.asrs.service.OrderDetlChangelogService; |
| | | import com.baomidou.mybatisplus.service.impl.ServiceImpl; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | @Service("orderDetlChangelogService") |
| | | public class OrderDetlChangelogServiceImpl extends ServiceImpl<OrderDetlChangelogMapper, OrderDetlChangelog> implements OrderDetlChangelogService { |
| | | |
| | | } |
| | |
| | | generator.url="127.0.0.1:1433;databasename=tzglasrs"; |
| | | generator.username="sa"; |
| | | generator.password="sa@123"; |
| | | generator.table="asr_loc_detl_changelog"; |
| | | generator.table="man_order_detl_changelog"; |
| | | generator.packagePath="com.zy.asrs"; |
| | | generator.build(); |
| | | } |
| New file |
| | |
| | | package com.zy.third.erp.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotations.TableField; |
| | | import com.baomidou.mybatisplus.annotations.TableId; |
| | | import com.baomidou.mybatisplus.annotations.TableName; |
| | | import com.baomidou.mybatisplus.enums.IdType; |
| | | import com.core.common.Cools; |
| | | import com.core.common.SpringUtils; |
| | | import com.zy.asrs.entity.Order; |
| | | import com.zy.asrs.service.OrderService; |
| | | import com.zy.common.utils.Synchro; |
| | | import com.zy.system.entity.User; |
| | | import com.zy.system.service.UserService; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.io.Serializable; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | |
| | | @Data |
| | | @TableName("man_order_detl_erp") |
| | | public class ErpOrderDetl implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ID |
| | | */ |
| | | @ApiModelProperty(value = "ID") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | /** |
| | | * 订单内码 |
| | | */ |
| | | @ApiModelProperty(value = "订单内码") |
| | | @TableField("order_id") |
| | | private Long orderId; |
| | | |
| | | /** |
| | | * 单据编号 |
| | | */ |
| | | @ApiModelProperty(value = "单据编号") |
| | | @TableField("order_no") |
| | | private String orderNo; |
| | | |
| | | |
| | | /** |
| | | * 数量 |
| | | */ |
| | | @ApiModelProperty(value = "数量") |
| | | private Double anfme; |
| | | |
| | | /** |
| | | * 作业数量 |
| | | * <p> |
| | | * 入库 : 组托完成,组托档、工作档、入库完成数量 |
| | | * 出库 : 工作档、出库完成数量 |
| | | */ |
| | | @ApiModelProperty(value = "作业数量") |
| | | @TableField("work_qty") |
| | | private Double workQty; |
| | | |
| | | /** |
| | | * 完成数量 |
| | | * <p> |
| | | * 入库 : qty 👆 |
| | | * 出库 : qty 👆 |
| | | */ |
| | | @ApiModelProperty(value = "完成数量") |
| | | private Double qty; |
| | | |
| | | /** |
| | | * 商品编码 |
| | | */ |
| | | @ApiModelProperty(value = "商品编码") |
| | | private String matnr; |
| | | |
| | | /** |
| | | * 商品名称 |
| | | */ |
| | | @ApiModelProperty(value = "商品名称") |
| | | private String maktx; |
| | | |
| | | /** |
| | | * 批号 |
| | | */ |
| | | @ApiModelProperty(value = "批号") |
| | | private String batch; |
| | | |
| | | /** |
| | | * 规格 |
| | | */ |
| | | @ApiModelProperty(value = "规格") |
| | | private String specs; |
| | | |
| | | /** |
| | | * 型号 |
| | | */ |
| | | @ApiModelProperty(value = "型号") |
| | | private String model; |
| | | |
| | | /** |
| | | * 颜色 |
| | | */ |
| | | @ApiModelProperty(value = "颜色") |
| | | private String color; |
| | | |
| | | /** |
| | | * 品牌 |
| | | */ |
| | | @ApiModelProperty(value = "品牌") |
| | | private String brand; |
| | | |
| | | /** |
| | | * 单位 |
| | | */ |
| | | @ApiModelProperty(value = "单位") |
| | | private String unit; |
| | | |
| | | /** |
| | | * 单价 |
| | | */ |
| | | @ApiModelProperty(value = "单价") |
| | | private Double price; |
| | | |
| | | /** |
| | | * sku |
| | | */ |
| | | @ApiModelProperty(value = "sku") |
| | | private String sku; |
| | | |
| | | /** |
| | | * 单位量 |
| | | */ |
| | | @ApiModelProperty(value = "单位量") |
| | | private Double units; |
| | | |
| | | /** |
| | | * 条码 |
| | | */ |
| | | @ApiModelProperty(value = "条码") |
| | | private String barcode; |
| | | |
| | | /** |
| | | * 产地 |
| | | */ |
| | | @ApiModelProperty(value = "产地") |
| | | private String origin; |
| | | |
| | | /** |
| | | * 厂家 |
| | | */ |
| | | @ApiModelProperty(value = "厂家") |
| | | private String manu; |
| | | |
| | | /** |
| | | * 生产日期 |
| | | */ |
| | | @ApiModelProperty(value = "生产日期") |
| | | @TableField("manu_date") |
| | | private String manuDate; |
| | | |
| | | /** |
| | | * 品项数 |
| | | */ |
| | | @ApiModelProperty(value = "品项数") |
| | | @TableField("item_num") |
| | | private String itemNum; |
| | | |
| | | /** |
| | | * 安全库存量 |
| | | */ |
| | | @ApiModelProperty(value = "安全库存量") |
| | | @TableField("safe_qty") |
| | | private Double safeQty; |
| | | |
| | | /** |
| | | * 重量 |
| | | */ |
| | | @ApiModelProperty(value = "重量") |
| | | private Double weight; |
| | | |
| | | /** |
| | | * 长度 |
| | | */ |
| | | @ApiModelProperty(value = "长度") |
| | | private Double length; |
| | | |
| | | /** |
| | | * 体积 |
| | | */ |
| | | @ApiModelProperty(value = "体积") |
| | | private Double volume; |
| | | |
| | | /** |
| | | * 三方编码 |
| | | */ |
| | | @ApiModelProperty(value = "三方编码") |
| | | @TableField("three_code") |
| | | private String threeCode; |
| | | |
| | | /** |
| | | * 供应商 |
| | | */ |
| | | @ApiModelProperty(value = "供应商") |
| | | private String supp; |
| | | |
| | | /** |
| | | * 供应商编码 |
| | | */ |
| | | @ApiModelProperty(value = "供应商编码") |
| | | @TableField("supp_code") |
| | | private String suppCode; |
| | | |
| | | /** |
| | | * 是否批次 1: 是 0: 否 |
| | | */ |
| | | @ApiModelProperty(value = "是否批次 1: 是 0: 否 ") |
| | | @TableField("be_batch") |
| | | private Integer beBatch; |
| | | |
| | | /** |
| | | * 保质期 |
| | | */ |
| | | @ApiModelProperty(value = "保质期") |
| | | @TableField("dead_time") |
| | | private String deadTime; |
| | | |
| | | /** |
| | | * 预警天数 |
| | | */ |
| | | @ApiModelProperty(value = "预警天数") |
| | | @TableField("dead_warn") |
| | | private Integer deadWarn; |
| | | |
| | | /** |
| | | * 制购 1: 制造 2: 采购 3: 外协 、、宜科: 是否确认 1: 确认 2: 未确认 |
| | | */ |
| | | @ApiModelProperty(value = "制购 1: 制造 2: 采购 3: 外协 ") |
| | | private Integer source; |
| | | |
| | | /** |
| | | * 要求检验 1: 是 0: 否 |
| | | */ |
| | | @ApiModelProperty(value = "要求检验 1: 是 0: 否 ") |
| | | private Integer inspect; |
| | | |
| | | /** |
| | | * 危险品 1: 是 0: 否 |
| | | */ |
| | | @ApiModelProperty(value = "危险品 1: 是 0: 否 ") |
| | | private Integer danger; |
| | | |
| | | /** |
| | | * 状态 1: 正常 0: 禁用 |
| | | */ |
| | | @ApiModelProperty(value = "状态 1: 正常 0: 禁用 ") |
| | | private Integer status; |
| | | |
| | | /** |
| | | * 添加人员 |
| | | */ |
| | | @ApiModelProperty(value = "添加人员") |
| | | @TableField("create_by") |
| | | private Long createBy; |
| | | |
| | | /** |
| | | * 添加时间 |
| | | */ |
| | | @ApiModelProperty(value = "添加时间") |
| | | @TableField("create_time") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date createTime; |
| | | |
| | | /** |
| | | * 修改人员 |
| | | */ |
| | | @ApiModelProperty(value = "修改人员") |
| | | @TableField("update_by") |
| | | private Long updateBy; |
| | | |
| | | /** |
| | | * 修改时间 |
| | | */ |
| | | @ApiModelProperty(value = "修改时间") |
| | | @TableField("update_time") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date updateTime; |
| | | |
| | | /** |
| | | * 备注 |
| | | */ |
| | | @ApiModelProperty(value = "备注") |
| | | private String memo; |
| | | |
| | | @TableField("i_no") |
| | | private Integer iNo; |
| | | |
| | | /** |
| | | * 外部主键 |
| | | */ |
| | | @TableField("auto_id") |
| | | private Integer autoId; |
| | | |
| | | @TableField("out_order_no") |
| | | private String outOrderNo; |
| | | /** |
| | | * 炉号\客户图号 |
| | | */ |
| | | @TableField("lu_hao") |
| | | private String luHao; |
| | | |
| | | @TableField("ware_id") |
| | | private String wareId; |
| | | |
| | | @TableField("ware_name") |
| | | private String wareName; |
| | | |
| | | @TableField("packing") |
| | | private String packing; |
| | | /** |
| | | * 工单号 |
| | | */ |
| | | @TableField("pg_no") |
| | | private String sPgNO; |
| | | |
| | | @TableField("temp1") |
| | | private String temp1; |
| | | |
| | | @TableField("temp2") |
| | | private String temp2; |
| | | |
| | | @TableField("temp3") |
| | | private String temp3; |
| | | |
| | | @TableField("pro_type") |
| | | private String proType; |
| | | |
| | | @TableField("det_id") |
| | | private Integer detId; |
| | | |
| | | |
| | | public ErpOrderDetl() { |
| | | } |
| | | |
| | | public ErpOrderDetl(Long orderId, String orderNo, Double anfme, Double qty, String matnr, String maktx, String batch, String specs, String model, String color, String brand, String unit, Double price, String sku, Double units, String barcode, String origin, String manu, String manuDate, String itemNum, Double safeQty, Double weight, Double length, Double volume, String threeCode, String supp, String suppCode, Integer beBatch, String deadTime, Integer deadWarn, Integer source, Integer inspect, Integer danger, Integer status, Long createBy, Date createTime, Long updateBy, Date updateTime, String memo, Integer detId) { |
| | | this.orderId = orderId; |
| | | this.orderNo = orderNo; |
| | | this.anfme = anfme; |
| | | this.qty = qty; |
| | | this.matnr = matnr; |
| | | this.maktx = maktx; |
| | | this.batch = batch; |
| | | this.specs = specs; |
| | | this.model = model; |
| | | this.color = color; |
| | | this.brand = brand; |
| | | this.unit = unit; |
| | | this.price = price; |
| | | this.sku = sku; |
| | | this.units = units; |
| | | this.barcode = barcode; |
| | | this.origin = origin; |
| | | this.manu = manu; |
| | | this.manuDate = manuDate; |
| | | this.itemNum = itemNum; |
| | | this.safeQty = safeQty; |
| | | this.weight = weight; |
| | | this.length = length; |
| | | this.volume = volume; |
| | | this.threeCode = threeCode; |
| | | this.supp = supp; |
| | | this.suppCode = suppCode; |
| | | this.beBatch = beBatch; |
| | | this.deadTime = deadTime; |
| | | this.deadWarn = deadWarn; |
| | | this.source = source; |
| | | this.inspect = inspect; |
| | | this.danger = danger; |
| | | this.status = status; |
| | | this.createBy = createBy; |
| | | this.createTime = createTime; |
| | | this.updateBy = updateBy; |
| | | this.updateTime = updateTime; |
| | | this.memo = memo; |
| | | this.detId = detId; |
| | | } |
| | | |
| | | public String getOrderId$() { |
| | | OrderService service = SpringUtils.getBean(OrderService.class); |
| | | Order order = service.selectById(this.orderId); |
| | | if (!Cools.isEmpty(order)) { |
| | | return String.valueOf(order.getId()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getBeBatch$() { |
| | | if (null == this.beBatch) { |
| | | return null; |
| | | } |
| | | switch (this.beBatch) { |
| | | case 1: |
| | | return "是"; |
| | | case 0: |
| | | return "否"; |
| | | default: |
| | | return String.valueOf(this.beBatch); |
| | | } |
| | | } |
| | | |
| | | public String getSource$() { |
| | | if (null == this.source) { |
| | | return null; |
| | | } |
| | | switch (this.source) { |
| | | case 1: |
| | | return "制造"; |
| | | case 2: |
| | | return "采购"; |
| | | case 3: |
| | | return "外协"; |
| | | default: |
| | | return String.valueOf(this.source); |
| | | } |
| | | } |
| | | |
| | | public String getInspect$() { |
| | | if (null == this.inspect) { |
| | | return null; |
| | | } |
| | | switch (this.inspect) { |
| | | case 1: |
| | | return "是"; |
| | | case 0: |
| | | return "否"; |
| | | default: |
| | | return String.valueOf(this.inspect); |
| | | } |
| | | } |
| | | |
| | | public String getDanger$() { |
| | | if (null == this.danger) { |
| | | return null; |
| | | } |
| | | switch (this.danger) { |
| | | case 1: |
| | | return "是"; |
| | | case 0: |
| | | return "否"; |
| | | default: |
| | | return String.valueOf(this.danger); |
| | | } |
| | | } |
| | | |
| | | public String getStatus$() { |
| | | if (null == this.status) { |
| | | return null; |
| | | } |
| | | switch (this.status) { |
| | | case 1: |
| | | return "正常"; |
| | | case 0: |
| | | return "禁用"; |
| | | default: |
| | | return String.valueOf(this.status); |
| | | } |
| | | } |
| | | |
| | | public String getCreateBy$() { |
| | | UserService service = SpringUtils.getBean(UserService.class); |
| | | User user = service.selectById(this.createBy); |
| | | if (!Cools.isEmpty(user)) { |
| | | return String.valueOf(user.getUsername()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getCreateTime$() { |
| | | if (Cools.isEmpty(this.createTime)) { |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime); |
| | | } |
| | | |
| | | public String getUpdateBy$() { |
| | | UserService service = SpringUtils.getBean(UserService.class); |
| | | User user = service.selectById(this.updateBy); |
| | | if (!Cools.isEmpty(user)) { |
| | | return String.valueOf(user.getUsername()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getUpdateTime$() { |
| | | if (Cools.isEmpty(this.updateTime)) { |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime); |
| | | } |
| | | |
| | | public Double getEnableQty() { |
| | | if (null != this.anfme && this.workQty != null) { |
| | | return this.anfme - this.workQty; |
| | | } |
| | | // if (null != this.anfme && this.qty != null) { |
| | | // return this.anfme - this.qty; |
| | | // } |
| | | return null; |
| | | } |
| | | |
| | | public String getQty$() { |
| | | if (getAnfme().equals(getQty())) { |
| | | return "已完成"; |
| | | } |
| | | return "未完成"; |
| | | } |
| | | |
| | | public void sync(Object source) { |
| | | Synchro.Copy(source, this); |
| | | } |
| | | |
| | | } |
| | |
| | | log.info("同步新物料[商品编号:{}]", mat.getMatnr()); |
| | | } |
| | | } else { |
| | | Tag priTag = null; |
| | | if (!Cools.isEmpty(itemTB.getItemKind())) { |
| | | priTag = tagService.selectByName(itemTB.getItemKind(), 2); |
| | | if (priTag == null) { |
| | | Tag top = tagService.getTop(); |
| | | NodeUtils nodeUtils = new NodeUtils(); |
| | | nodeUtils.executePath(top.getId()); |
| | | priTag = new Tag( |
| | | null, // 编号 |
| | | itemTB.getItemKind(), // 名称 |
| | | top.getId(), // 父级 |
| | | top.getName(), // 父级名称 |
| | | nodeUtils.path.toString(), // 关联路径 |
| | | nodeUtils.pathName.toString(), // 关联路径名 |
| | | 0, // 类型 |
| | | null, // 负责人 |
| | | null, // 图片 |
| | | null, // 简要描述 |
| | | null, // 数量 |
| | | 2, // 等级 |
| | | null, // 排序 |
| | | 1, // 状态 |
| | | now, // 添加时间 |
| | | null, // 添加人员 |
| | | now, // 修改时间 |
| | | null, // 修改人员 |
| | | null // 备注 |
| | | ); |
| | | if (tagMapper.insert(priTag) == 0) { |
| | | throw new CoolException("服务器内部错误,请联系管理员"); |
| | | } |
| | | } |
| | | } |
| | | if (!Cools.isEmpty(itemTB.getItemKind())) { |
| | | priTag = tagService.selectByName(itemTB.getItemKind(), 2); |
| | | } |
| | | |
| | | mat = sync(mat, itemTB); |
| | | if (priTag!=null){ |
| | | mat.setTagId(priTag.getId()); |
| | | } |
| | | if (!matService.update(mat, new EntityWrapper<Mat>().eq("matnr", itemTB.getItemId()))) { |
| | | throw new CoolException("更新已存在商品信息失败,请联系管理员"); |
| | | } |
| | |
| | | package com.zy.third.erp.task; |
| | | |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.LocDetl; |
| | | import com.zy.asrs.entity.LocDetlChangelog; |
| | | import com.zy.asrs.mapper.LocDetlChangelogMapper; |
| | |
| | | @Scheduled(cron = "${erp.refreshtime}") |
| | | public void LocDetlScheduler() { |
| | | if (!erpEnabled) return; |
| | | |
| | | boolean result = false; |
| | | List<LocDetlChangelog> logs = locDetlChangelogMapper.selectUnprocessedLogs(); |
| | | |
| | | for (LocDetlChangelog changelog : logs) { |
| | |
| | | switch (action) { |
| | | case "INSERT": |
| | | String insertSql = buildInsertSql("asr_loc_detl", content); |
| | | erpSqlServer.update(insertSql); |
| | | if(erpSqlServer.update(insertSql) > 0){ |
| | | log.info("同步ERP新增成功: locNo={}", item.getLocNo()); |
| | | result = true; |
| | | }else{ |
| | | log.info("同步ERP新增失败: locNo={}", item.getLocNo()); |
| | | } |
| | | break; |
| | | |
| | | case "UPDATE": |
| | |
| | | // 解析 JSON |
| | | Map<String, Object> dataMap = JSON.parseObject(changelog.getData(), Map.class); |
| | | Map<String, Object> afterMap = (Map<String, Object>) dataMap.get("after"); |
| | | |
| | | // 拼接 UPDATE SQL |
| | | StringBuilder setSql = new StringBuilder(); |
| | | afterMap.forEach((k, v) -> { |
| | |
| | | } |
| | | }); |
| | | setSql.deleteCharAt(setSql.length() - 1); // 去掉最后逗号 |
| | | |
| | | String updateSql = "UPDATE asr_loc_detl SET " + setSql + " WHERE loc_no='" + escapeSql((String)afterMap.get("loc_no")) + "' AND zpallet='" + escapeSql((String)afterMap.get("zpallet")) + "'"; |
| | | erpSqlServer.update(updateSql); |
| | | |
| | | String updateSql = |
| | | "UPDATE asr_loc_detl SET " + setSql + |
| | | " WHERE loc_no='" + escapeSql((String)afterMap.get("loc_no")) + |
| | | "' AND zpallet='" + escapeSql((String)afterMap.get("zpallet")) + |
| | | "' AND matnr='" + escapeSql((String)afterMap.get("matnr")) + "'"; |
| | | if(erpSqlServer.update(updateSql) > 0){ |
| | | log.info("同步ERP更新成功: locNo={}, zpallet={}", afterMap.get("loc_no"), afterMap.get("zpallet")); |
| | | result = true; |
| | | }else{ |
| | | log.info("同步ERP更新失败: locNo={}, zpallet={}", afterMap.get("loc_no"), afterMap.get("zpallet")); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("更新ERP失败: locNo=" + changelog.getLocNo(), e); |
| | | } |
| | | |
| | | case "DELETE": |
| | | String deleteSql = "DELETE FROM asr_loc_detl WHERE loc_no='" + escapeSql(item.getLocNo()) + "'"; |
| | | erpSqlServer.update(deleteSql); |
| | | log.info("同步ERP删除成功: locNo={}", item.getLocNo()); |
| | | break; |
| | | |
| | | case "DELETE": |
| | | String deleteSql = "DELETE FROM asr_loc_detl WHERE " + |
| | | "loc_no='" + escapeSql(item.getLocNo()) + "' AND " + |
| | | "zpallet='" + escapeSql(item.getZpallet()) + "' AND " + |
| | | "matnr='" + escapeSql(item.getMatnr()) + "' AND " + |
| | | "anfme=" + item.getAnfme(); |
| | | if(erpSqlServer.update(deleteSql) > 0){ |
| | | log.info("同步ERP删除成功: locNo={}", item.getLocNo()); |
| | | result = true; |
| | | }else{ |
| | | log.info("同步ERP删除失败: locNo={}", item.getLocNo()); |
| | | } |
| | | break; |
| | | default: |
| | | log.error("未知操作类型:" + action); |
| | | } |
| | | |
| | | if(result){ |
| | | locDetlChangelogMapper.markProcessed(changelog.getId()); |
| | | |
| | | }else { |
| | | throw new CoolException("同步失败"); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("同步ERP失败,日志ID:" + changelog.getId(), e); |
| | | } |
| New file |
| | |
| | | package com.zy.third.erp.task; |
| | | |
| | | public class ERPManOrderDetlScheduler { |
| | | } |
| New file |
| | |
| | | package com.zy.third.erp.task; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.LocDetl; |
| | | import com.zy.asrs.entity.LocDetlChangelog; |
| | | import com.zy.asrs.entity.OrderDetl; |
| | | import com.zy.asrs.entity.OrderDetlChangelog; |
| | | import com.zy.asrs.mapper.LocDetlChangelogMapper; |
| | | import com.zy.asrs.mapper.OrderDetlChangelogMapper; |
| | | import com.zy.asrs.service.OrderDetlService; |
| | | import com.zy.common.service.erp.ErpSqlServer; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | @Slf4j |
| | | @Component |
| | | public class ERPOrderDetlScheduler { |
| | | @Autowired |
| | | private ErpSqlServer erpSqlServer; |
| | | @Autowired |
| | | private OrderDetlService orderDetlService; |
| | | @Autowired |
| | | private OrderDetlChangelogMapper OrderDetlChangelogMapper; |
| | | @Value("${erp.enabled}") |
| | | private Boolean erpEnabled; |
| | | @Transactional(rollbackFor = Throwable.class) |
| | | @Scheduled(cron = "0 */30 * * * ?") |
| | | public void ERPOrderDetlScheduler() { |
| | | if (!erpEnabled) return; |
| | | boolean result = false; |
| | | List<OrderDetlChangelog> logs = OrderDetlChangelogMapper.selectUnprocessedLogs(); |
| | | List<OrderDetl> orderDetlList = orderDetlService.selectList(new EntityWrapper<>()); // 获取主表所有数据 |
| | | |
| | | for (OrderDetl item : orderDetlList) { |
| | | try { |
| | | // 根据唯一标识 (order_no, matnr, out_order_no) 检查副表是否已有数据 |
| | | boolean exists = checkIfExistsInErp(item); |
| | | if (!exists) { |
| | | // 如果副表中没有记录,插入新数据 |
| | | insertIntoErp(item); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("处理ERP同步失败,OrderDetl ID:" + item.getOrderNo(), e); |
| | | } |
| | | } |
| | | for (OrderDetlChangelog changelog : logs) { |
| | | try { |
| | | String action = changelog.getActionType(); |
| | | OrderDetl item = parseJsonToItem(changelog.getData()); |
| | | Map<String, Object> content = locDetlToMap(item); |
| | | |
| | | switch (action) { |
| | | case "UPDATE": |
| | | try { |
| | | // 解析 JSON |
| | | Map<String, Object> dataMap = JSON.parseObject(changelog.getData(), Map.class); |
| | | Map<String, Object> afterMap = (Map<String, Object>) dataMap.get("after"); |
| | | // 拼接 UPDATE SQL |
| | | StringBuilder setSql = new StringBuilder(); |
| | | afterMap.forEach((k, v) -> { |
| | | if (v == null) { |
| | | setSql.append("[").append(k).append("]=NULL,"); |
| | | } else if (v instanceof Number) { |
| | | setSql.append("[").append(k).append("]=").append(v).append(","); |
| | | } else { |
| | | setSql.append("[").append(k).append("]='").append(((String)v).replace("'", "''")).append("',"); |
| | | } |
| | | }); |
| | | setSql.deleteCharAt(setSql.length() - 1); // 去掉最后逗号 |
| | | String updateSql = |
| | | "UPDATE man_order_detl_erp SET " + setSql + |
| | | " WHERE order_no='" + escapeSql((String)afterMap.get("order_no")) + |
| | | "' AND out_order_no='" + escapeSql((String)afterMap.get("out_order_no")) + |
| | | "' AND matnr='" + escapeSql((String)afterMap.get("matnr")) + "'"; |
| | | if(erpSqlServer.update(updateSql) > 0){ |
| | | log.info("同步ERP更新成功: orderNo={}, matnr={}", afterMap.get("order_no"), afterMap.get("matnr")); |
| | | result = true; |
| | | }else{ |
| | | log.info("同步ERP更新失败: orderNo={}, matnr={}", afterMap.get("order_no"), afterMap.get("matnr")); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("更新ERP失败: locNo=" + changelog.getOrderNo(), e); |
| | | } |
| | | break; |
| | | case "DELETE": |
| | | String deleteSql = "DELETE FROM man_order_detl_erp WHERE " + |
| | | "order_no='" + escapeSql(item.getOrderNo()) + "' AND " + |
| | | "out_order_no='" + escapeSql(item.getOutOrderNo()) + "' AND " + |
| | | "matnr='" + escapeSql(item.getMatnr()) + "' AND " + |
| | | "anfme=" + item.getAnfme(); |
| | | if(erpSqlServer.update(deleteSql) > 0){ |
| | | log.info("同步ERP删除成功: orderNo={},matnr={}", item.getOrderNo(),item.getMatnr()); |
| | | result = true; |
| | | }else{ |
| | | log.info("同步ERP删除失败: orderNo={},matnr={}", item.getOrderNo(),item.getMatnr()); |
| | | } |
| | | break; |
| | | default: |
| | | log.error("未知操作类型:" + action); |
| | | } |
| | | if(result){ |
| | | OrderDetlChangelogMapper.markProcessed(changelog.getId()); |
| | | }else { |
| | | throw new CoolException("同步失败"); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("同步ERP失败,日志ID:" + changelog.getId(), e); |
| | | } |
| | | } |
| | | } |
| | | /** |
| | | * 检查副表 man_order_detl_erp 是否已经存在此记录 |
| | | */ |
| | | private boolean checkIfExistsInErp(OrderDetl item) { |
| | | String checkSql = "SELECT * FROM man_order_detl_erp WHERE order_no = '" + escapeSql(item.getOrderNo()) + "' AND " + |
| | | "out_order_no = '" + escapeSql(item.getOutOrderNo()) + "' AND " + |
| | | "matnr = '" + escapeSql(item.getMatnr()) + "'"; |
| | | List<Map<String, Object>> result = erpSqlServer.select(checkSql); // 使用 ErpSqlServer 查询副表是否已有记录 |
| | | if (result != null && !result.isEmpty()) { |
| | | return result.size() > 0; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * 插入数据到副表 man_order_detl_erp |
| | | */ |
| | | private void insertIntoErp(OrderDetl item) { |
| | | Map<String, Object> content = locDetlToMap(item); // 将主表实体转换为Map |
| | | String insertSql = buildInsertSql("man_order_detl_erp", content); |
| | | if (erpSqlServer.update(insertSql) > 0) { |
| | | log.info("同步ERP插入成功: orderNo={}, matnr={}", item.getOrderNo(), item.getMatnr()); |
| | | } else { |
| | | log.info("同步ERP插入失败: orderNo={}, matnr={}", item.getOrderNo(), item.getMatnr()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 拼接 INSERT SQL |
| | | */ |
| | | private String buildInsertSql(String tableName, Map<String, Object> content) { |
| | | StringBuilder columns = new StringBuilder(); |
| | | StringBuilder values = new StringBuilder(); |
| | | content.forEach((k, v) -> { |
| | | columns.append("[").append(k).append("],"); |
| | | values.append(toSqlValue(v)).append(","); |
| | | }); |
| | | columns.deleteCharAt(columns.length() - 1); // 去掉最后逗号 |
| | | values.deleteCharAt(values.length() - 1); // 去掉最后逗号 |
| | | |
| | | return "INSERT INTO " + tableName + " (" + columns + ") VALUES (" + values + ")"; |
| | | } |
| | | /** 拼接 UPDATE SQL */ |
| | | private String buildUpdateSql(String tableName, Map<String, Object> content, String whereClause) { |
| | | StringBuilder setSql = new StringBuilder(); |
| | | content.forEach((k, v) -> { |
| | | setSql.append(k).append("=").append(toSqlValue(v)).append(","); |
| | | }); |
| | | setSql.deleteCharAt(setSql.length() - 1); |
| | | return "UPDATE " + tableName + " SET " + setSql + " WHERE " + whereClause; |
| | | } |
| | | /** JSON 转实体 */ |
| | | private OrderDetl parseJsonToItem(String dataJson) { |
| | | return JSON.parseObject(dataJson, OrderDetl.class); |
| | | } |
| | | /** 转换为 SQL 可用的值 */ |
| | | private String toSqlValue(Object value) { |
| | | if (value == null) return "NULL"; |
| | | if (value instanceof String) return "'" + escapeSql((String) value) + "'"; |
| | | if (value instanceof Date) return "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date) value) + "'"; |
| | | return value.toString(); |
| | | } |
| | | |
| | | /** SQL 注入简单转义 */ |
| | | private String escapeSql(String str) { |
| | | if (str == null) return ""; |
| | | return str.replace("'", "''"); |
| | | } |
| | | /** 实体转 Map */ |
| | | private Map<String, Object> locDetlToMap(OrderDetl item) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("order_no", item.getOrderNo()); |
| | | map.put("out_order_no", item.getOutOrderNo()); |
| | | map.put("matnr", item.getMatnr()); |
| | | map.put("anfme",item.getAnfme()); |
| | | map.put("qty",item.getQty()); |
| | | map.put("maktx", item.getMaktx()); |
| | | map.put("batch", item.getBatch()); |
| | | map.put("specs", item.getSpecs()); |
| | | map.put("model", item.getModel()); |
| | | map.put("color", item.getColor()); |
| | | map.put("brand", item.getBrand()); |
| | | map.put("unit", item.getUnit()); |
| | | map.put("price", item.getPrice()); |
| | | map.put("sku", item.getSku()); |
| | | map.put("units", item.getUnits()); |
| | | map.put("barcode", item.getBarcode()); |
| | | map.put("origin", item.getOrigin()); |
| | | map.put("manu", item.getManu()); |
| | | map.put("manu_date", item.getManuDate()); |
| | | map.put("item_num", item.getItemNum()); |
| | | map.put("safe_qty", item.getSafeQty()); |
| | | map.put("weight", item.getWeight()); |
| | | map.put("length", item.getLength()); |
| | | map.put("volume", item.getVolume()); |
| | | map.put("three_code", item.getThreeCode()); |
| | | map.put("supp", item.getSupp()); |
| | | map.put("supp_code", item.getSuppCode()); |
| | | map.put("be_batch", item.getBeBatch()); |
| | | map.put("dead_time", item.getDeadTime()); |
| | | map.put("dead_warn", item.getDeadWarn()); |
| | | map.put("source", item.getSource()); |
| | | map.put("inspect", item.getInspect()); |
| | | map.put("danger", item.getDanger()); |
| | | map.put("status", item.getStatus()); |
| | | map.put("create_by", item.getCreateBy()); |
| | | map.put("create_time", item.getCreateTime()); |
| | | map.put("update_by", item.getUpdateBy()); |
| | | map.put("update_time", item.getUpdateTime()); |
| | | map.put("memo", item.getMemo()); |
| | | map.put("work_qty", item.getWorkQty()); |
| | | map.put("auto_id", item.getAutoId()); |
| | | map.put("lu_hao", item.getLuHao()); |
| | | map.put("temp1", item.getTemp1()); |
| | | map.put("temp2", item.getTemp2()); |
| | | map.put("temp3", item.getTemp3()); |
| | | map.put("ware_id", item.getWareId()); |
| | | map.put("ware_name", item.getWareName()); |
| | | map.put("packing", item.getPacking()); |
| | | map.put("i_no", item.getINo()); |
| | | map.put("pro_type", item.getProType()); |
| | | return map; |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | -- save orderDetlChangelog record |
| | | -- mysql |
| | | insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'orderDetlChangelog/orderDetlChangelog.html', 'orderDetlChangelog管理', null , '2', null , '1'); |
| | | |
| | | insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'orderDetlChangelog#view', '查询', '', '3', '0', '1'); |
| | | insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'orderDetlChangelog#btn-add', '新增', '', '3', '1', '1'); |
| | | insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'orderDetlChangelog#btn-edit', '编辑', '', '3', '2', '1'); |
| | | insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'orderDetlChangelog#btn-delete', '删除', '', '3', '3', '1'); |
| | | insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'orderDetlChangelog#btn-export', '导出', '', '3', '4', '1'); |
| | | |
| | | -- sqlserver |
| | | insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'orderDetlChangelog/orderDetlChangelog.html', N'orderDetlChangelog管理', null, '2', null, '1'); |
| | | |
| | | insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'orderDetlChangelog#view', N'查询', '', '3', '0', '1'); |
| | | insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'orderDetlChangelog#btn-add', N'新增', '', '3', '1', '1'); |
| | | insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'orderDetlChangelog#btn-edit', N'编辑', '', '3', '2', '1'); |
| | | insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'orderDetlChangelog#btn-delete', N'删除', '', '3', '3', '1'); |
| | | insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'orderDetlChangelog#btn-export', N'导出', '', '3', '4', '1'); |
| New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="com.zy.asrs.mapper.OrderDetlChangelogMapper"> |
| | | |
| | | <!-- 通用查询映射结果 --> |
| | | <resultMap id="BaseResultMap" type="com.zy.asrs.entity.OrderDetlChangelog"> |
| | | <result column="id" property="id" /> |
| | | <result column="action_type" property="actionType" /> |
| | | <result column="order_no" property="orderNo" /> |
| | | <result column="matnr" property="matnr" /> |
| | | <result column="data" property="data" /> |
| | | <result column="change_time" property="changeTime" /> |
| | | <result column="processed" property="processed" /> |
| | | |
| | | </resultMap> |
| | | <select id="selectUnprocessedLogs" resultMap="BaseResultMap"> |
| | | SELECT * |
| | | FROM man_order_detl_changelog |
| | | WHERE processed = 0 |
| | | ORDER BY id |
| | | </select> |
| | | |
| | | <update id="markProcessed"> |
| | | UPDATE man_order_detl_changelog |
| | | SET processed = 1 |
| | | WHERE id = #{id} |
| | | </update> |
| | | </mapper> |
| New file |
| | |
| | | var pageCurr; |
| | | layui.config({ |
| | | base: baseUrl + "/static/layui/lay/modules/" |
| | | }).use(['table','laydate', 'form', 'admin'], function(){ |
| | | var table = layui.table; |
| | | var $ = layui.jquery; |
| | | var layer = layui.layer; |
| | | var layDate = layui.laydate; |
| | | var form = layui.form; |
| | | var admin = layui.admin; |
| | | |
| | | // 数据渲染 |
| | | tableIns = table.render({ |
| | | elem: '#orderDetlChangelog', |
| | | headers: {token: localStorage.getItem('token')}, |
| | | url: baseUrl+'/orderDetlChangelog/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: ''} |
| | | ,{field: 'actionType', align: 'center',title: ''} |
| | | ,{field: 'orderNo', align: 'center',title: ''} |
| | | ,{field: 'matnr', align: 'center',title: ''} |
| | | ,{field: 'data', align: 'center',title: ''} |
| | | ,{field: 'changeTime$', align: 'center',title: ''} |
| | | ,{field: 'processed', align: 'center',title: ''} |
| | | |
| | | ,{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(orderDetlChangelog)', 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(orderDetlChangelog)', 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 = { |
| | | 'orderDetlChangelog': exportData, |
| | | 'fields': fields |
| | | }; |
| | | $.ajax({ |
| | | url: baseUrl+"/orderDetlChangelog/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(orderDetlChangelog)', 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+"/orderDetlChangelog/"+(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+"/orderDetlChangelog/delete/auth", |
| | | headers: {'token': localStorage.getItem('token')}, |
| | | data: {ids: ids}, |
| | | method: 'POST', |
| | | success: function (res) { |
| | | layer.close(loadIndex); |
| | | if (res.code === 200){ |
| | | layer.msg(res.msg, {icon: 1}); |
| | | tableReload(); |
| | | } else if (res.code === 403){ |
| | | top.location.href = baseUrl+"/"; |
| | | } else { |
| | | layer.msg(res.msg, {icon: 2}); |
| | | } |
| | | } |
| | | }) |
| | | }); |
| | | } |
| | | |
| | | // 搜索 |
| | | form.on('submit(search)', function (data) { |
| | | pageCurr = 1; |
| | | tableReload(false); |
| | | }); |
| | | |
| | | // 重置 |
| | | form.on('submit(reset)', function (data) { |
| | | pageCurr = 1; |
| | | clearFormVal($('#search-box')); |
| | | tableReload(false); |
| | | }); |
| | | |
| | | // 时间选择器 |
| | | function layDateRender(data) { |
| | | setTimeout(function () { |
| | | layDate.render({ |
| | | elem: '.layui-laydate-range' |
| | | ,type: 'datetime' |
| | | ,range: true |
| | | }); |
| | | layDate.render({ |
| | | elem: '#changeTime\\$', |
| | | type: 'datetime', |
| | | value: data!==undefined?data['changeTime\\$']:null |
| | | }); |
| | | |
| | | }, 300); |
| | | } |
| | | layDateRender(); |
| | | |
| | | }); |
| | | |
| | | // 关闭动作 |
| | | $(document).on('click','#data-detail-close', function () { |
| | | parent.layer.closeAll(); |
| | | }); |
| | | |
| | | function tableReload(child) { |
| | | var searchData = {}; |
| | | $.each($('#search-box [name]').serializeArray(), function() { |
| | | searchData[this.name] = this.value; |
| | | }); |
| | | tableIns.reload({ |
| | | where: searchData, |
| | | page: {curr: pageCurr} |
| | | }); |
| | | } |
| New file |
| | |
| | | <!DOCTYPE html> |
| | | <html lang="en"> |
| | | <head> |
| | | <meta charset="utf-8"> |
| | | <title></title> |
| | | <meta name="renderer" content="webkit"> |
| | | <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> |
| | | <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> |
| | | <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> |
| | | <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all"> |
| | | <link rel="stylesheet" href="../../static/css/cool.css" media="all"> |
| | | </head> |
| | | <body> |
| | | |
| | | <div class="layui-fluid"> |
| | | <div class="layui-card"> |
| | | <div class="layui-card-body"> |
| | | <div class="layui-form toolbar" id="search-box"> |
| | | <div class="layui-form-item"> |
| | | <div class="layui-inline"> |
| | | <div class="layui-input-inline"> |
| | | <input class="layui-input" type="text" name="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">  |
| | | <button class="layui-btn icon-btn" lay-filter="search" lay-submit> |
| | | <i class="layui-icon"></i>搜索 |
| | | </button> |
| | | <button class="layui-btn icon-btn" lay-filter="reset" lay-submit> |
| | | <i class="layui-icon"></i>重置 |
| | | </button> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <table class="layui-hide" id="orderDetlChangelog" lay-filter="orderDetlChangelog"></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/orderDetlChangelog/orderDetlChangelog.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">: </label> |
| | | <div class="layui-input-block"> |
| | | <input class="layui-input" name="actionType" placeholder="请输入"> |
| | | </div> |
| | | </div> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">: </label> |
| | | <div class="layui-input-block"> |
| | | <input class="layui-input" name="orderNo" placeholder="请输入"> |
| | | </div> |
| | | </div> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">: </label> |
| | | <div class="layui-input-block"> |
| | | <input class="layui-input" name="matnr" placeholder="请输入"> |
| | | </div> |
| | | </div> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">: </label> |
| | | <div class="layui-input-block"> |
| | | <input class="layui-input" name="data" placeholder="请输入"> |
| | | </div> |
| | | </div> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">: </label> |
| | | <div class="layui-input-block"> |
| | | <input class="layui-input" name="changeTime" id="changeTime$" placeholder="请输入"> |
| | | </div> |
| | | </div> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">: </label> |
| | | <div class="layui-input-block"> |
| | | <input class="layui-input" name="processed" placeholder="请输入"> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | <hr class="layui-bg-gray"> |
| | | <div class="layui-form-item text-right"> |
| | | <button class="layui-btn" lay-filter="editSubmit" lay-submit="">保存</button> |
| | | <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button> |
| | | </div> |
| | | </form> |
| | | </script> |
| | | </html> |
| | | |