From a4d797eb5af29200c9706b4c35c9bf23777c8c17 Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期五, 01 八月 2025 12:55:23 +0800
Subject: [PATCH] 1
---
src/main/java/com/zy/asrs/service/impl/ReviewDetlServiceImpl.java | 24
src/main/java/com/zy/asrs/service/impl/ReviewServiceImpl.java | 19
src/main/java/com/zy/asrs/service/ReviewService.java | 12
src/main/java/com/zy/asrs/controller/ReviewController.java | 116 ++
src/main/java/com/zy/asrs/task/OrderMoveHistoryScheduler.java | 8
src/main/webapp/views/review/review.html | 389 ++++++++
src/main/java/com/zy/asrs/importexcle/ImportReviewListener.java | 162 +++
src/main/java/com/zy/asrs/mapper/ReviewMapper.java | 18
src/main/webapp/static/js/review/review.js | 839 +++++++++++++++++++
src/main/java/com/zy/asrs/entity/Review.java | 344 +++++++
src/main/resources/mapper/ReviewMapper.xml | 14
src/main/java/com/zy/asrs/importexcle/ImportReviewDto.java | 28
src/main/java/com/zy/asrs/task/handler/OrderMoveHistoryHandler.java | 55 +
src/main/resources/mapper/ReviewDetlMapper.xml | 12
src/main/java/com/zy/asrs/entity/ReviewDetl.java | 386 ++++++++
src/main/java/com/zy/asrs/mapper/ReviewDetlMapper.java | 19
src/main/java/com/zy/asrs/service/ReviewDetlService.java | 14
src/main/java/com/zy/asrs/controller/ReviewDetlController.java | 132 +++
18 files changed, 2,584 insertions(+), 7 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/ReviewController.java b/src/main/java/com/zy/asrs/controller/ReviewController.java
new file mode 100644
index 0000000..5d44631
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/ReviewController.java
@@ -0,0 +1,116 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.excel.EasyExcel;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.core.common.SnowflakeIdWorker;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.Review;
+import com.zy.asrs.importexcle.ImportReviewDto;
+import com.zy.asrs.importexcle.ImportReviewListener;
+import com.zy.asrs.mapper.ReviewDetlMapper;
+import com.zy.asrs.service.ReviewDetlService;
+import com.zy.asrs.service.ReviewService;
+import com.zy.common.web.BaseController;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.util.Date;
+import java.util.Map;
+
+@RestController
+public class ReviewController extends BaseController {
+
+ @Autowired
+ private ReviewService reviewService;
+ @Autowired
+ private ReviewDetlService reviewDetlService;
+ @Autowired
+ private SnowflakeIdWorker snowflakeIdWorker;
+
+ @Resource
+ private ReviewDetlMapper reviewDetlMapper;
+
+ @PostMapping("/importReview")
+ @ManagerAuth(memo = "鍗曟嵁瀵煎叆")
+ @ApiOperation(value = "鍗曟嵁瀵煎叆", produces = MediaType.APPLICATION_JSON_VALUE)
+ public R importOrderData(@RequestParam("file") MultipartFile multipartFile) {
+ try {
+ importOrder(multipartFile);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return R.error(e.getMessage());
+ }
+ return R.ok("瀵煎叆鎴愬姛");
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ public void importOrder(MultipartFile multipartFile) throws IOException {
+ // 鑰冩牳鏁版嵁鐨勫垽閲嶄娇鐢╫rder_id,check_type鐨勭粍鍚堝敮涓�绱㈠紩瑙e喅
+ EasyExcel.read(multipartFile.getInputStream(), ImportReviewDto.class,
+ new ImportReviewListener(snowflakeIdWorker, getUserId())).sheet().doReadSync();
+ }
+
+
+ @RequestMapping(value = "/review/head/page/auth")
+ @ManagerAuth
+ public R head(@RequestParam(defaultValue = "1") Integer curr,
+ @RequestParam(defaultValue = "10") Integer limit,
+ @RequestParam(required = false) String orderByField,
+ @RequestParam(required = false) String orderByType,
+ @RequestParam Map<String, Object> param) {
+ EntityWrapper<Review> wrapper = new EntityWrapper<>();
+ excludeTrash(param);
+ convert(param, wrapper);
+ if (!Cools.isEmpty(orderByField)) {
+ wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));
+ } else {
+ wrapper.orderBy("settle").orderBy("create_time", false);
+ }
+ wrapper.eq("status", 1);
+ return R.ok(reviewService.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 = "/review/update/auth")
+ @ManagerAuth
+ public R update(Review review) {
+ if (Cools.isEmpty(review) || null == review.getId()) {
+ return R.error();
+ }
+ Review review2 = reviewService.selectById(review.getId());
+ review2.setSettle(review.getSettle());
+ review.setUpdateBy(getUserId());
+ review.setUpdateTime(new Date());
+ if (!reviewService.updateById(review)) {
+ throw new CoolException("淇敼澶辫触");
+ }
+ return R.ok();
+ }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/ReviewDetlController.java b/src/main/java/com/zy/asrs/controller/ReviewDetlController.java
new file mode 100644
index 0000000..5e0080d
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/ReviewDetlController.java
@@ -0,0 +1,132 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.zy.asrs.entity.ReviewDetl;
+import com.zy.asrs.service.ReviewDetlService;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+public class ReviewDetlController extends BaseController {
+
+ @Autowired
+ private ReviewDetlService reviewDetlService;
+
+ @RequestMapping(value = "/reviewDetl/{id}/auth")
+ @ManagerAuth
+ public R get(@PathVariable("id") String id) {
+ return R.ok(reviewDetlService.selectById(String.valueOf(id)));
+ }
+
+ @RequestMapping(value = "/reviewDetl/list/auth")
+ @ManagerAuth
+ public R list(@RequestParam(defaultValue = "1") Integer curr,
+ @RequestParam(defaultValue = "10") Integer limit,
+ @RequestParam(required = false) String orderByField,
+ @RequestParam(required = false) String orderByType,
+ @RequestParam Map<String, Object> param) {
+ EntityWrapper<ReviewDetl> wrapper = new EntityWrapper<>();
+ excludeTrash(param);
+ convert(param, wrapper);
+ if (!Cools.isEmpty(orderByField)) {
+ wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));
+ } else {
+ wrapper.orderBy("create_time", false);
+ }
+ wrapper.eq("status", 1);
+ Page<ReviewDetl> reviewDetlPage = reviewDetlService.selectPage(new Page<>(curr, limit), wrapper);
+ return R.ok(reviewDetlPage);
+ }
+
+
+ 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 = "/reviewDetl/add/auth")
+ @ManagerAuth
+ public R add(ReviewDetl reviewDetl) {
+ reviewDetlService.insert(reviewDetl);
+ return R.ok();
+ }
+
+ @RequestMapping(value = "/reviewDetl/update/auth")
+ @ManagerAuth
+ public R update(ReviewDetl reviewDetl) {
+ if (Cools.isEmpty(reviewDetl) || null == reviewDetl.getId()) {
+ return R.error();
+ }
+ reviewDetlService.updateById(reviewDetl);
+ return R.ok();
+ }
+
+ @RequestMapping(value = "/reviewDetl/delete/auth")
+ @ManagerAuth
+ public R delete(@RequestParam(value = "ids[]") Long[] ids) {
+ for (Long id : ids) {
+ reviewDetlService.deleteById(id);
+ }
+ return R.ok();
+ }
+
+ @RequestMapping(value = "/reviewDetl/export/auth")
+ @ManagerAuth
+ public R export(@RequestBody JSONObject param) {
+ EntityWrapper<ReviewDetl> wrapper = new EntityWrapper<>();
+ List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+ Map<String, Object> map = excludeTrash(param.getJSONObject("reviewDetl"));
+ convert(map, wrapper);
+ List<ReviewDetl> list = reviewDetlService.selectList(wrapper);
+ return R.ok(exportSupport(list, fields));
+ }
+
+ @RequestMapping(value = "/reviewDetlQuery/auth")
+ @ManagerAuth
+ public R query(String condition) {
+ EntityWrapper<ReviewDetl> wrapper = new EntityWrapper<>();
+ wrapper.like("id", condition);
+ Page<ReviewDetl> page = reviewDetlService.selectPage(new Page<>(0, 10), wrapper);
+ List<Map<String, Object>> result = new ArrayList<>();
+ for (ReviewDetl reviewDetl : page.getRecords()) {
+ Map<String, Object> map = new HashMap<>();
+ map.put("id", reviewDetl.getId());
+ map.put("value", reviewDetl.getId());
+ result.add(map);
+ }
+ return R.ok(result);
+ }
+
+ @RequestMapping(value = "/reviewDetl/check/column/auth")
+ @ManagerAuth
+ public R query(@RequestBody JSONObject param) {
+ Wrapper<ReviewDetl> wrapper = new EntityWrapper<ReviewDetl>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+ if (null != reviewDetlService.selectOne(wrapper)) {
+ return R.parse(BaseRes.REPEAT).add(getComment(ReviewDetl.class, String.valueOf(param.get("key"))));
+ }
+ return R.ok();
+ }
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/Review.java b/src/main/java/com/zy/asrs/entity/Review.java
new file mode 100644
index 0000000..e1a0d61
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/Review.java
@@ -0,0 +1,344 @@
+package com.zy.asrs.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.service.DocTypeService;
+import com.zy.asrs.service.OrderSettleService;
+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_review")
+public class Review implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ID
+ */
+ @ApiModelProperty(value = "ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 缂栧彿
+ */
+ @ApiModelProperty(value = "缂栧彿")
+ private String uuid;
+
+ /**
+ * 璁㈠崟缂栧彿
+ */
+ @ApiModelProperty(value = "璁㈠崟缂栧彿")
+ @TableField("order_no")
+ private String orderNo;
+
+ /**
+ * 鍗曟嵁鏃ユ湡
+ */
+ @ApiModelProperty(value = "鍗曟嵁鏃ユ湡")
+ @TableField("order_time")
+ private String orderTime;
+
+ /**
+ * 鍗曟嵁绫诲瀷
+ */
+ @ApiModelProperty(value = "鍗曟嵁绫诲瀷")
+ @TableField("doc_type")
+ private Long docType;
+
+ /**
+ * 椤圭洰缂栧彿
+ */
+ @ApiModelProperty(value = "椤圭洰缂栧彿")
+ @TableField("item_id")
+ private Long itemId;
+
+ @ApiModelProperty(value = "")
+ @TableField("item_name")
+ private String itemName;
+
+ /**
+ * 璋冩嫧椤圭洰缂栧彿
+ */
+ @ApiModelProperty(value = "璋冩嫧椤圭洰缂栧彿")
+ @TableField("allot_item_id")
+ private Long allotItemId;
+
+ /**
+ * 鍒濆绁ㄦ嵁鍙�
+ */
+ @ApiModelProperty(value = "鍒濆绁ㄦ嵁鍙�")
+ @TableField("def_number")
+ private String defNumber;
+
+ /**
+ * 绁ㄦ嵁鍙�
+ */
+ @ApiModelProperty(value = "绁ㄦ嵁鍙�")
+ private String number;
+
+ /**
+ * 瀹㈡埛缂栧彿
+ */
+ @ApiModelProperty(value = "瀹㈡埛缂栧彿")
+ private Long cstmr;
+
+ /**
+ * 瀹㈡埛
+ */
+ @ApiModelProperty(value = "瀹㈡埛")
+ @TableField("cstmr_name")
+ private String cstmrName;
+
+ /**
+ * 鑱旂郴鏂瑰紡
+ */
+ @ApiModelProperty(value = "鑱旂郴鏂瑰紡")
+ private String tel;
+
+ /**
+ * 鎿嶄綔浜哄憳
+ */
+ @ApiModelProperty(value = "鎿嶄綔浜哄憳")
+ @TableField("oper_memb")
+ private String operMemb;
+
+ /**
+ * 鍚堣閲戦
+ */
+ @ApiModelProperty(value = "鍚堣閲戦")
+ @TableField("total_fee")
+ private Double totalFee;
+
+ /**
+ * 浼樻儬鐜�
+ */
+ @ApiModelProperty(value = "浼樻儬鐜�")
+ private Double discount;
+
+ /**
+ * 浼樻儬閲戦
+ */
+ @ApiModelProperty(value = "浼樻儬閲戦")
+ @TableField("discount_fee")
+ private Double discountFee;
+
+ /**
+ * 閿�鍞垨閲囪喘璐圭敤鍚堣
+ */
+ @ApiModelProperty(value = "閿�鍞垨閲囪喘璐圭敤鍚堣")
+ @TableField("other_fee")
+ private Double otherFee;
+
+ /**
+ * 瀹炰粯閲戦
+ */
+ @ApiModelProperty(value = "瀹炰粯閲戦")
+ @TableField("act_fee")
+ private Double actFee;
+
+ /**
+ * 浠樻绫诲瀷 1: 鐜伴噾 2: 璁拌处
+ */
+ @ApiModelProperty(value = "浠樻绫诲瀷 1: 鐜伴噾 2: 璁拌处 ")
+ @TableField("pay_type")
+ private Integer payType;
+
+ /**
+ * 涓氬姟鍛�
+ */
+ @ApiModelProperty(value = "涓氬姟鍛�")
+ private String salesman;
+
+ /**
+ * 缁撶畻澶╂暟
+ */
+ @ApiModelProperty(value = "缁撶畻澶╂暟")
+ @TableField("account_day")
+ private Integer accountDay;
+
+ /**
+ * 閭垂鏀粯绫诲瀷 1: 鍦ㄧ嚎鏀粯 2: 璐у埌浠樻
+ */
+ @ApiModelProperty(value = "閭垂鏀粯绫诲瀷 1: 鍦ㄧ嚎鏀粯 2: 璐у埌浠樻 ")
+ @TableField("post_fee_type")
+ private Integer postFeeType;
+
+ /**
+ * 閭垂
+ */
+ @ApiModelProperty(value = "閭垂")
+ @TableField("post_fee")
+ private Double postFee;
+
+ /**
+ * 浠樻鏃堕棿
+ */
+ @ApiModelProperty(value = "浠樻鏃堕棿")
+ @TableField("pay_time")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date payTime;
+
+ /**
+ * 鍙戣揣鏃堕棿
+ */
+ @ApiModelProperty(value = "鍙戣揣鏃堕棿")
+ @TableField("send_time")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date sendTime;
+
+ /**
+ * 鐗╂祦鍚嶇О
+ */
+ @ApiModelProperty(value = "鐗╂祦鍚嶇О")
+ @TableField("ship_name")
+ private String shipName;
+
+ /**
+ * 鐗╂祦鍗曞彿
+ */
+ @ApiModelProperty(value = "鐗╂祦鍗曞彿")
+ @TableField("ship_code")
+ private String shipCode;
+
+ /**
+ * 璁㈠崟鐘舵��
+ */
+ @ApiModelProperty(value = "璁㈠崟鐘舵��")
+ private Long settle;
+
+ /**
+ * 鐘舵�� 1: 姝e父 0: 绂佺敤
+ */
+ @ApiModelProperty(value = "鐘舵�� 1: 姝e父 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;
+
+
+ public String getPayTime$() {
+ if (Cools.isEmpty(this.payTime)) {
+ return "";
+ }
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.payTime);
+ }
+
+ public String getSendTime$() {
+ if (Cools.isEmpty(this.sendTime)) {
+ return "";
+ }
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.sendTime);
+ }
+
+ public String getSettle$() {
+ OrderSettleService service = SpringUtils.getBean(OrderSettleService.class);
+ OrderSettle orderSettle = service.selectById(this.settle);
+ if (!Cools.isEmpty(orderSettle)) {
+ return String.valueOf(orderSettle.getSettleName());
+ }
+ return null;
+ }
+
+ public String getStatus$() {
+ if (null == this.status) {
+ return null;
+ }
+ switch (this.status) {
+ case 1:
+ return "姝e父";
+ 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 String getTkType() {
+ DocTypeService service = SpringUtils.getBean(DocTypeService.class);
+ DocType docType = service.selectById(this.docType);
+ if (!Cools.isEmpty(docType)) {
+ return docType.getPakout().toString();
+ }
+ return "0";
+ }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/ReviewDetl.java b/src/main/java/com/zy/asrs/entity/ReviewDetl.java
new file mode 100644
index 0000000..5f667aa
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/ReviewDetl.java
@@ -0,0 +1,386 @@
+package com.zy.asrs.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.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.core.common.SpringUtils;
+import com.zy.asrs.service.BasBoxTypeService;
+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_review_detl")
+public class ReviewDetl 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;
+
+ /**
+ * 浣滀笟鏁伴噺
+ *
+ * 鍏ュ簱 : 缁勬墭瀹屾垚锛岀粍鎵樻。銆佸伐浣滄。銆佸叆搴撳畬鎴愭暟閲�
+ * 鍑哄簱 : 宸ヤ綔妗c�佸嚭搴撳畬鎴愭暟閲�
+ */
+ @ApiModelProperty(value= "浣滀笟鏁伴噺")
+ @TableField("work_qty")
+ private Double workQty;
+
+ /**
+ * 瀹屾垚鏁伴噺
+ *
+ * 鍏ュ簱 : 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: 姝e父 0: 绂佺敤
+ */
+ @ApiModelProperty(value= "鐘舵�� 1: 姝e父 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;
+
+ @ApiModelProperty(value = "閫�搴撴爣璁�")
+ @TableField("tk_type")
+ private Integer tkType;
+
+ /**
+ * 鍗蜂俊鎭疘D
+ */
+ @ApiModelProperty(value= "鍗蜂俊鎭疘D")
+ @TableField("roll_up")
+ private Long rollUp;
+
+
+ public String getStatus$(){
+ if (null == this.status){ return null; }
+ switch (this.status){
+ case 1:
+ return "姝e父";
+ 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 String getQty$(){
+ if (getAnfme().equals(getQty())){
+ return "宸插畬鎴�";
+ }
+ return "鏈畬鎴�";
+ }
+
+ 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 void sync(Object source) {
+ Synchro.Copy(source, this);
+ }
+
+ public String getBrand$(){
+ BasBoxTypeService basBoxTypeService = SpringUtils.getBean(BasBoxTypeService.class);
+ BasBoxType basBoxType = basBoxTypeService.selectOne(new EntityWrapper<BasBoxType>().eq("box_type", this.brand));
+ if (!Cools.isEmpty(basBoxType)){
+ return String.valueOf(basBoxType.getBoxSpecs());
+ }
+ return this.brand;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/zy/asrs/importexcle/ImportReviewDto.java b/src/main/java/com/zy/asrs/importexcle/ImportReviewDto.java
new file mode 100644
index 0000000..61d986e
--- /dev/null
+++ b/src/main/java/com/zy/asrs/importexcle/ImportReviewDto.java
@@ -0,0 +1,28 @@
+package com.zy.asrs.importexcle;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+/**
+ * @author pang.jiabao
+ * @description 瀵煎叆璁㈠崟dto
+ * @createDate 2024/9/2 9:55
+ */
+@Data
+public class ImportReviewDto {
+
+ @ExcelProperty(value = "鍖呰缁勫彿/婧愬簱浣�",index = 0)
+ private String column1;
+
+ @ExcelProperty(value = "鍑哄簱鍗曞彿/鍗曟嵁绫诲瀷/瀹㈡埛鍚嶇О/澶囨敞/鐩爣搴撲綅",index = 1)
+ private String column2;
+
+ @ExcelProperty(value = "鐩爣宸烽亾/瀹㈡埛鍚嶇О",index = 2)
+ private String column3;
+
+ @ExcelProperty(value = "澶囨敞",index = 3)
+ private String column4;
+
+
+
+}
diff --git a/src/main/java/com/zy/asrs/importexcle/ImportReviewListener.java b/src/main/java/com/zy/asrs/importexcle/ImportReviewListener.java
new file mode 100644
index 0000000..43991df
--- /dev/null
+++ b/src/main/java/com/zy/asrs/importexcle/ImportReviewListener.java
@@ -0,0 +1,162 @@
+package com.zy.asrs.importexcle;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.alibaba.fastjson.JSON;
+import com.core.common.Cools;
+import com.core.common.SnowflakeIdWorker;
+import com.zy.asrs.entity.OrderDetl;
+import com.zy.asrs.service.ReviewDetlService;
+import com.zy.asrs.service.ReviewService;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.*;
+
+/**
+ * @author pang.jiabao
+ * @description 瀵煎叆璁㈠崟鐩戝惉鍣�
+ * @createDate 2024/9/2 9:56
+ */
+@Slf4j
+public class ImportReviewListener extends AnalysisEventListener<ImportReviewDto> {
+ /**
+ * 姣忛殧1000鏉″瓨鍌ㄦ暟鎹簱锛屽疄闄呬娇鐢ㄤ腑鍙互3000鏉★紝鐒跺悗娓呯悊list 锛屾柟渚垮唴瀛樺洖鏀�
+ */
+ private static final int BATCH_COUNT = 400;
+
+ private int count = 0;
+
+ private String orderNo;
+
+ private long orderId;
+
+ private long docTypeId;
+
+ List<ImportReviewDto> list = new ArrayList<>();
+ /**
+ * 鍋囪杩欎釜鏄竴涓狣AO锛屽綋鐒舵湁涓氬姟閫昏緫杩欎釜涔熷彲浠ユ槸涓�涓猻ervice銆傚綋鐒跺鏋滀笉鐢ㄥ瓨鍌ㄨ繖涓璞℃病鐢ㄣ��
+ */
+ private ReviewService reviewService;
+ private ReviewDetlService reviewDetlService;
+ private final SnowflakeIdWorker snowflakeIdWorker;
+ private final Long userId;
+
+ /**
+ * 濡傛灉浣跨敤浜唖pring,璇蜂娇鐢ㄨ繖涓瀯閫犳柟娉曘�傛瘡娆″垱寤篖istener鐨勬椂鍊欓渶瑕佹妸spring绠$悊鐨勭被浼犺繘鏉�
+ */
+ public ImportReviewListener(SnowflakeIdWorker snowflakeIdWorker, Long userId) {
+ this.snowflakeIdWorker = snowflakeIdWorker;
+ this.userId = userId;
+ }
+
+ private Set<String> uniquePackNos = new HashSet<>(); // 鐢ㄤ簬鍘婚噸鍖呰缁勫彿
+
+ @SneakyThrows
+ @Override
+ public void invoke(ImportReviewDto data, AnalysisContext context) {
+ log.info("瑙f瀽鍒扮 {} 鏉℃暟鎹�:{}", ++count, JSON.toJSONString(data));
+
+ // 鑾峰彇鍖呰缁勫彿锛坈olumn1锛�
+ String packNo = data.getColumn1();
+ if (Cools.isEmpty(packNo)) {
+ log.warn("鍖呰缁勫彿涓虹┖锛岃烦杩囪琛岋紒");
+ return;
+ }
+
+ // 濡傛灉宸茬粡澶勭悊杩囪鍖呰缁勫彿锛屽垯璺宠繃
+ if (uniquePackNos.contains(packNo)) {
+ log.info("閲嶅鐨勫寘瑁呯粍鍙凤細{}锛岃烦杩�", packNo);
+ return;
+ }
+
+ // 棣栨鍑虹幇锛岃褰曞苟澶勭悊
+ uniquePackNos.add(packNo);
+ list.add(data);
+
+ if (context.getCurrentRowNum() == 3) {
+
+ return;
+ }
+
+ if (list.size() >= BATCH_COUNT) {
+ saveData();
+ list.clear();
+ }
+ }
+
+
+ /**
+ * 鎵�鏈夋暟鎹В鏋愬畬鎴愪簡 閮戒細鏉ヨ皟鐢�
+ */
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext context) {
+ // 杩欓噷涔熻淇濆瓨鏁版嵁锛岀‘淇濇渶鍚庨仐鐣欑殑鏁版嵁涔熷瓨鍌ㄥ埌鏁版嵁搴�
+ if (list.size() > 0) {
+ saveData();
+ }
+ log.info("鎵�鏈夋暟鎹В鏋愬畬鎴愶紒");
+ }
+
+
+ private static final int MAX_BATCH_SIZE = 50; // 寤鸿 100~200锛屾牴鎹瓧娈垫暟鎺у埗
+
+ /**
+ * 鍒嗘壒瀛樺偍鏁版嵁搴擄紝閬垮厤SQL Server鍙傛暟涓婇檺锛�2100锛夐敊璇�
+ */
+ private void saveData() {
+ log.info("{}鏉℃暟鎹紝寮�濮嬪瓨鍌ㄦ暟鎹簱锛�", list.size());
+ log.info("鍗曟嵁鍙凤細{}锛屾暟鎹細{},", orderNo, JSON.toJSONString(list));
+
+ List<OrderDetl> orderDetlList = new ArrayList<>();
+ for (ImportReviewDto importOrderDto : list) {
+ OrderDetl orderDetl = new OrderDetl();
+
+ if (docTypeId == 24) {
+ orderDetl.setSpecs(String.format("%07d", Integer.parseInt(importOrderDto.getColumn1()))); // 婧愬簱浣�
+ if (importOrderDto.getColumn2() != null) {
+ orderDetl.setModel(String.format("%07d", Integer.parseInt(importOrderDto.getColumn2()))); // 鐩爣搴撲綅
+ }
+ if (importOrderDto.getColumn3() != null) {
+ orderDetl.setBeBatch(Integer.parseInt(importOrderDto.getColumn3())); // 宸烽亾
+ }
+ } else {
+ orderDetl.setBrand(importOrderDto.getColumn1());
+ orderDetl.setSupp(importOrderDto.getColumn3());
+ orderDetl.setMemo(importOrderDto.getColumn4());
+ }
+
+ orderDetl.setBatch("");
+ orderDetl.setOrderId(orderId);
+ orderDetl.setOrderNo(orderNo);
+ orderDetl.setCreateBy(9527L);
+ orderDetl.setCreateTime(new Date());
+ orderDetl.setUpdateBy(9527L);
+ orderDetl.setUpdateTime(new Date());
+ orderDetl.setStatus(1);
+ orderDetl.setQty(0.0D);
+ orderDetl.setAnfme(1.0);
+
+ orderDetlList.add(orderDetl);
+ }
+
+ // 鉁� 鍏抽敭鐐癸細鍒嗘壒鎻愪氦
+ for (int i = 0; i < orderDetlList.size(); i += MAX_BATCH_SIZE) {
+ int end = Math.min(i + MAX_BATCH_SIZE, orderDetlList.size());
+ List<OrderDetl> batch = orderDetlList.subList(i, end);
+ //reviewDetlService.batchDetls(batch);
+ }
+
+ log.info("瀛樺偍鏁版嵁搴撴垚鍔燂紒");
+ }
+
+
+ /**
+ * 瑙f瀽鍑虹幇閿欒浼氳繘鍏ヨ鏂规硶 鍏蜂綋鐪嬫簮浠g爜鎴栨枃妗�
+ */
+ @Override
+ public void onException(Exception exception, AnalysisContext context) throws Exception {
+ log.error("澶勭悊寮傚父锛�" + exception.getMessage());
+ throw exception;
+ }
+}
diff --git a/src/main/java/com/zy/asrs/mapper/ReviewDetlMapper.java b/src/main/java/com/zy/asrs/mapper/ReviewDetlMapper.java
new file mode 100644
index 0000000..ad04a4f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/ReviewDetlMapper.java
@@ -0,0 +1,19 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.OrderDetl;
+import com.zy.asrs.entity.Review;
+import com.zy.asrs.entity.ReviewDetl;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+@Repository
+public interface ReviewDetlMapper extends BaseMapper<ReviewDetl> {
+
+ int addToLogTable(ReviewDetl order);
+}
diff --git a/src/main/java/com/zy/asrs/mapper/ReviewMapper.java b/src/main/java/com/zy/asrs/mapper/ReviewMapper.java
new file mode 100644
index 0000000..e7ab983
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/ReviewMapper.java
@@ -0,0 +1,18 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.Order;
+import com.zy.asrs.entity.OrderStatisticsDto;
+import com.zy.asrs.entity.Review;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface ReviewMapper extends BaseMapper<Review> {
+
+ int addToLogTable(Review order);
+}
diff --git a/src/main/java/com/zy/asrs/service/ReviewDetlService.java b/src/main/java/com/zy/asrs/service/ReviewDetlService.java
new file mode 100644
index 0000000..041ba21
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/ReviewDetlService.java
@@ -0,0 +1,14 @@
+package com.zy.asrs.service;
+
+import com.baomidou.mybatisplus.plugins.Page;
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.OrderDetl;
+import com.zy.asrs.entity.ReviewDetl;
+
+import java.util.List;
+
+public interface ReviewDetlService extends IService<ReviewDetl> {
+
+ boolean addToLogTable(ReviewDetl orderDetl);
+
+}
diff --git a/src/main/java/com/zy/asrs/service/ReviewService.java b/src/main/java/com/zy/asrs/service/ReviewService.java
new file mode 100644
index 0000000..a0173a2
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/ReviewService.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.*;
+
+import java.util.List;
+
+public interface ReviewService extends IService<Review> {
+
+
+ boolean addToLogTable(Review order);
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/ReviewDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/ReviewDetlServiceImpl.java
new file mode 100644
index 0000000..52efedd
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/ReviewDetlServiceImpl.java
@@ -0,0 +1,24 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.core.common.Cools;
+import com.zy.asrs.entity.OrderDetl;
+import com.zy.asrs.entity.ReviewDetl;
+import com.zy.asrs.mapper.OrderDetlMapper;
+import com.zy.asrs.mapper.ReviewDetlMapper;
+import com.zy.asrs.service.OrderDetlService;
+import com.zy.asrs.service.ReviewDetlService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service("reviewDetlService")
+public class ReviewDetlServiceImpl extends ServiceImpl<ReviewDetlMapper, ReviewDetl> implements ReviewDetlService {
+
+ @Override
+ public boolean addToLogTable(ReviewDetl orderDetl) {
+ return this.baseMapper.addToLogTable(orderDetl) > 0;
+ }
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/ReviewServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/ReviewServiceImpl.java
new file mode 100644
index 0000000..07fdc4e
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/ReviewServiceImpl.java
@@ -0,0 +1,19 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.zy.asrs.entity.Order;
+import com.zy.asrs.entity.Review;
+import com.zy.asrs.mapper.ReviewMapper;
+import com.zy.asrs.service.ReviewService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service("reviewService")
+public class ReviewServiceImpl extends ServiceImpl<ReviewMapper, Review> implements ReviewService {
+
+ @Override
+ public boolean addToLogTable(Review order) {
+ return this.baseMapper.addToLogTable(order) > 0;
+ }
+}
diff --git a/src/main/java/com/zy/asrs/task/OrderMoveHistoryScheduler.java b/src/main/java/com/zy/asrs/task/OrderMoveHistoryScheduler.java
index 2f1081a..d86c93c 100644
--- a/src/main/java/com/zy/asrs/task/OrderMoveHistoryScheduler.java
+++ b/src/main/java/com/zy/asrs/task/OrderMoveHistoryScheduler.java
@@ -18,4 +18,12 @@
public void execute(){
orderMoveHistoryHandler.start();
}
+
+ /**
+ * 灏嗗凡瀹屾垚order鍜宱rderDetl绉诲姩鍒發og琛�
+ */
+ @Scheduled(cron = "0/30 * * * * ?")
+ public void execute2(){
+ orderMoveHistoryHandler.start2();
+ }
}
diff --git a/src/main/java/com/zy/asrs/task/handler/OrderMoveHistoryHandler.java b/src/main/java/com/zy/asrs/task/handler/OrderMoveHistoryHandler.java
index 76ec280..b18c58f 100644
--- a/src/main/java/com/zy/asrs/task/handler/OrderMoveHistoryHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/OrderMoveHistoryHandler.java
@@ -4,8 +4,12 @@
import com.core.common.Cools;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetl;
+import com.zy.asrs.entity.Review;
+import com.zy.asrs.entity.ReviewDetl;
import com.zy.asrs.service.OrderDetlService;
import com.zy.asrs.service.OrderService;
+import com.zy.asrs.service.ReviewDetlService;
+import com.zy.asrs.service.ReviewService;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import lombok.extern.slf4j.Slf4j;
@@ -23,19 +27,36 @@
@Autowired
private OrderDetlService orderDetlService;
- public ReturnT<String> start(){
+ @Autowired
+ private ReviewService reviewService;
+ @Autowired
+ private ReviewDetlService reviewDetlService;
+
+ public ReturnT<String> start() {
List<Order> settleEqual6 = orderService.selectList(new EntityWrapper<Order>()
.eq("settle", 6));
for (Order order : settleEqual6) {
List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>()
.eq("order_no", order.getOrderNo()));
- moveBoth(order,orderDetls);
- log.info("宸插畬鎴愬崟鎹Щ鍔ㄨ嚦鍘嗗彶琛ㄦ垚鍔� =====>" +order);
+ moveBoth(order, orderDetls);
+ log.info("宸插畬鎴愬崟鎹Щ鍔ㄨ嚦鍘嗗彶琛ㄦ垚鍔� =====>" + order);
}
return SUCCESS;
}
- private void moveBoth(Order order, List<OrderDetl> orderDetls){
+ public ReturnT<String> start2() {
+ List<Review> settleEqual6 = reviewService.selectList(new EntityWrapper<Review>()
+ .eq("settle", 6));
+ for (Review order : settleEqual6) {
+ List<ReviewDetl> orderDetls = reviewDetlService.selectList(new EntityWrapper<ReviewDetl>()
+ .eq("order_no", order.getOrderNo()));
+ moveBoth2(order, orderDetls);
+ log.info("宸插畬鎴愬鍚堝崟鎹Щ鍔ㄨ嚦鍘嗗彶琛ㄦ垚鍔� =====>" + order);
+ }
+ return SUCCESS;
+ }
+
+ private void moveBoth(Order order, List<OrderDetl> orderDetls) {
Date now = new Date();
if (!Cools.isEmpty(orderDetls)) {
for (OrderDetl orderDetl : orderDetls) {
@@ -43,16 +64,36 @@
orderDetl.setUpdateTime(now);
orderDetlService.addToLogTable(orderDetl);
orderDetlService.delete(new EntityWrapper<OrderDetl>()
- .eq("id",orderDetl.getId()));
+ .eq("id", orderDetl.getId()));
}
}
- if (!Cools.isEmpty(order)){
+ if (!Cools.isEmpty(order)) {
order.setUpdateBy(0L);
order.setUpdateTime(now);
orderService.addToLogTable(order);
orderService.delete(new EntityWrapper<Order>()
- .eq("id",order.getId()));
+ .eq("id", order.getId()));
}
}
+
+ private void moveBoth2(Review order, List<ReviewDetl> orderDetls) {
+ Date now = new Date();
+ if (!Cools.isEmpty(orderDetls)) {
+ for (ReviewDetl orderDetl : orderDetls) {
+ orderDetl.setUpdateBy(0L);
+ orderDetl.setUpdateTime(now);
+ reviewDetlService.addToLogTable(orderDetl);
+ reviewDetlService.delete(new EntityWrapper<ReviewDetl>()
+ .eq("id", orderDetl.getId()));
+ }
+ }
+ if (!Cools.isEmpty(order)) {
+ order.setUpdateBy(0L);
+ order.setUpdateTime(now);
+ reviewService.addToLogTable(order);
+ reviewService.delete(new EntityWrapper<Review>()
+ .eq("id", order.getId()));
+ }
+ }
}
diff --git a/src/main/resources/mapper/ReviewDetlMapper.xml b/src/main/resources/mapper/ReviewDetlMapper.xml
new file mode 100644
index 0000000..1b3ea32
--- /dev/null
+++ b/src/main/resources/mapper/ReviewDetlMapper.xml
@@ -0,0 +1,12 @@
+<?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.ReviewDetlMapper">
+
+
+ <insert id="addToLogTable">
+ INSERT INTO man_review_detl_log SELECT * FROM man_review_detl WHERE id = #{id}
+ </insert>
+
+
+
+</mapper>
diff --git a/src/main/resources/mapper/ReviewMapper.xml b/src/main/resources/mapper/ReviewMapper.xml
new file mode 100644
index 0000000..634cc7e
--- /dev/null
+++ b/src/main/resources/mapper/ReviewMapper.xml
@@ -0,0 +1,14 @@
+<?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.ReviewMapper">
+
+
+ <insert id="addToLogTable">
+ INSERT INTO man_review_log
+ SELECT *
+ FROM man_review
+ WHERE id = #{id}
+ </insert>
+
+
+</mapper>
diff --git a/src/main/webapp/static/js/review/review.js b/src/main/webapp/static/js/review/review.js
new file mode 100644
index 0000000..caea5f8
--- /dev/null
+++ b/src/main/webapp/static/js/review/review.js
@@ -0,0 +1,839 @@
+var insTbCount = 0;
+var tableCache2 = [];
+layui.config({
+ base: baseUrl + "/static/layui/lay/modules/"
+}).extend({
+ notice: 'notice/notice',
+}).use(['layer', 'form', 'table','upload','element', 'util', 'admin', 'xmSelect', 'laydate', 'tableMerge', 'notice'], function () {
+ var $ = layui.jquery;
+ var layer = layui.layer;
+ var form = layui.form;
+ var table = layui.table;
+ var util = layui.util;
+ var upload = layui.upload;
+ var admin = layui.admin;
+ var xmSelect = layui.xmSelect;
+ var layDate = layui.laydate;
+ var laytpl = layui.laytpl;
+ var tableMerge = layui.tableMerge;
+ var notice = layui.notice;
+ var element = layui.element;
+
+
+
+ // 娓叉煋琛ㄦ牸
+ var insTb = table.render({
+ elem: '#order',
+ url: baseUrl+'/review/head/page/auth',
+ headers: {token: localStorage.getItem('token')},
+ page: true,
+ cellMinWidth: 100,
+ cols: [[
+ {type: 'numbers'},
+ {field: 'orderNo', title: '鍗曟嵁缂栧彿'},
+ {field: 'cstmrName', align: 'center',title: '瀹㈡埛鍚嶇О'},
+ {align: 'center', title: '鏄庣粏', toolbar: '#tbLook', minWidth: 160, width: 160},
+ {field: 'createTime$', title: '鍒涘缓鏃堕棿', minWidth: 200, width: 200},
+ {field: 'settle$', align: 'center', title: '鐘舵��', templet: '#settleTpl', minWidth: 160, width: 160},
+ //{field: 'memo', align: 'center',title: '澶囨敞'},
+ {align: 'center', title: '鎿嶄綔', toolbar: '#operate', width: 240}
+ ]],
+ 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) {
+ limit();
+ if (res.code === 403) {
+ top.location.href = baseUrl+"/";
+ }
+ insTbCount = count;
+ }
+ });
+
+ // 鎼滅储
+ form.on('submit(tbSearch)', function (data) {
+ insTb.reload({where: data.field, page: {curr: 1}});
+ });
+
+ //澶氭枃浠跺垪琛�
+ var uploadListIns = upload.render({
+ elem: '#data-btn-file2'
+ ,elemList: $('#data-btn-file3') //鍒楄〃鍏冪礌瀵硅薄
+ ,url: baseUrl+'/review/insert/labelUp/file/auth'
+ ,accept: 'file'
+ ,multiple: true
+ ,number: 10
+ ,auto: false
+ ,bindAction: '#testListAction'
+ ,choose: function(obj){
+ // 璧嬪��
+ this.data.orderId=$('.layui-layer-title').text()
+ var that = this;
+ var files = this.files = obj.pushFile(); //灏嗘瘡娆¢�夋嫨鐨勬枃浠惰拷鍔犲埌鏂囦欢闃熷垪
+ //璇诲彇鏈湴鏂囦欢
+ obj.preview(function(index, file, result){
+ var tr = $(['<tr id="upload-'+ index +'">'
+ ,'<td>'+ file.name +'</td>'
+ ,'<td>'+ (file.size/1014).toFixed(1) +'kb</td>'
+ ,'<td><div class="layui-progress" lay-filter="progress-demo-'+ index +'"><div class="layui-progress-bar" lay-percent=""></div></div></td>'
+ ,'<td>'
+ ,'<button class="layui-btn layui-btn-xs demo-reload layui-hide">閲嶄紶</button>'
+ // ,'<button class="layui-btn layui-btn-xs layui-btn-danger demo-delete">鍒犻櫎</button>'
+ ,'</td>'
+ ,'</tr>'].join(''));
+
+ //鍗曚釜閲嶄紶
+ tr.find('.demo-reload').on('click', function(){
+ obj.upload(index, file);
+ });
+
+ //鍒犻櫎
+ tr.find('.demo-delete').on('click', function(){
+ delete files[index]; //鍒犻櫎瀵瑰簲鐨勬枃浠�
+ tr.remove();
+ uploadListIns.config.elem.next()[0].value = ''; //娓呯┖ input file 鍊硷紝浠ュ厤鍒犻櫎鍚庡嚭鐜板悓鍚嶆枃浠朵笉鍙��
+ });
+
+ that.elemList.append(tr);
+ element.render('progress'); //娓叉煋鏂板姞鐨勮繘搴︽潯缁勪欢
+ });
+ }
+ ,done: function(res, index, upload){ //鎴愬姛鐨勫洖璋�
+ var that = this;
+ //if(res.code == 0){ //涓婁紶鎴愬姛
+ var tr = that.elemList.find('tr#upload-'+ index)
+ ,tds = tr.children();
+ tds.eq(3).html(''); //娓呯┖鎿嶄綔
+ delete this.files[index]; //鍒犻櫎鏂囦欢闃熷垪宸茬粡涓婁紶鎴愬姛鐨勬枃浠�
+ return;
+ //}
+ this.error(index, upload);
+ }
+ ,allDone: function(obj){ //澶氭枃浠朵笂浼犲畬姣曞悗鐨勭姸鎬佸洖璋�
+ console.log(obj)
+ }
+ ,error: function(index, upload){ //閿欒鍥炶皟
+ var that = this;
+ var tr = that.elemList.find('tr#upload-'+ index)
+ ,tds = tr.children();
+ tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //鏄剧ず閲嶄紶
+ }
+ ,progress: function(n, elem, e, index){ //娉ㄦ剰锛歩ndex 鍙傛暟涓� layui 2.6.6 鏂板
+ element.progress('progress-demo-'+ index, n + '%'); //鎵ц杩涘害鏉°�俷 鍗充负杩斿洖鐨勮繘搴︾櫨鍒嗘瘮
+ }
+ });
+
+ // 娣诲姞
+ $("#orderAddBtn").click(function () {
+ showEditModel();
+ });
+
+ // 宸ュ叿鏉$偣鍑讳簨浠�
+ table.on('tool(order)', function (obj) {
+ var data = obj.data;
+ var layEvent = obj.event;
+ if (layEvent === 'edit') {
+ showEditModel(data);
+ } else if (layEvent === 'wrkTrace') {
+ showWrkTrace(data.id);
+ } else if (layEvent === 'del') {
+ doDel(data.id);
+ } else if (layEvent === 'labelUp') {
+ //涓婁紶鏍囩
+ // 鎵撳紑寮圭獥
+ // 鏋勫缓甯﹀弬鏁扮殑鍐呭
+ layer.open({
+ area: '1020px',
+ type: 1,
+ title: '涓婁紶鏂囦欢-'+data.id,
+ content: $('#myModal')
+ });
+ // 鑾峰彇璺緞涓嬬殑鏂囦欢鍒楄〃锛屼娇鐢� jQuery 鐨� ajax 鏂规硶
+ $.ajax({
+ url: baseUrl+'/review/view/labelUp/file/auth',
+ data:{
+ orderId:data.id
+ },
+ success: function(response) {
+ if (response.code==200){
+ var targetTable = document.getElementById("data-btn-file3");
+ targetTable.innerHTML = '';
+ // 灏嗚幏鍙栧埌鐨勬枃浠跺垪琛ㄦ坊鍔犲埌鏂囦欢闃熷垪涓繘琛屾樉绀�
+ response.data.forEach(function(file,index) {
+ // 鍒涘缓tr鍏冪礌
+ var tr = document.createElement("tr");
+ tr.id = "upload-"+index;
+ tr.innerHTML = '<td>' + file.name + '</td>'
+ + '<td>' + (file.size / 1024).toFixed(1) + 'kb</td>'
+ + '<td><div class="layui-progress" lay-filter="progress-demo-' + index + '"><div class="layui-progress-bar" lay-percent=""></div></div></td>'
+ + '<td>'
+ + '<button class="layui-btn layui-btn-xs demo-reload layui-hide">閲嶄紶</button>'
+ // + '<button class="layui-btn layui-btn-xs layui-btn-danger demo-delete">鍒犻櫎</button>'
+ + '</td>';
+
+ // 灏唗r鍏冪礌娣诲姞鍒扮洰鏍噒able涓�
+ targetTable.appendChild(tr);
+ });
+ }else {
+ console.log('Failed to get file list error.');
+ }
+ },
+ error: function() {
+ console.log('Failed to get file list.');
+ }
+ });
+ } else if (layEvent === 'refundLoc') {
+ //閫�搴�
+ pakoutPreview([data.id]);
+ } else if (layEvent === 'complete') {
+ doModify(data.id, data.orderNo, 4);
+ } else if (layEvent === 'look') {
+ var $a = $(obj.tr).find('a[lay-event="look"]');
+ var offset = $a.offset();
+ var top = offset.top;
+ var left = offset.left;
+ layer.open({
+ type: 1,
+ title: false,
+ area: '1020px',
+ offset: [top + 'px', (left - 530 + $a.outerWidth()) + 'px'],
+ shade: .01,
+ shadeClose: true,
+ fixed: false,
+ content: '<table id="lookSSXMTable" lay-filter="lookSSXMTable"></table>',
+ success: function (layero) {
+ table.render({
+ elem: '#lookSSXMTable',
+ headers: {token: localStorage.getItem('token')},
+ url: baseUrl+'/reviewDetl/list/auth',
+ where: {
+ order_id: data.id
+ },
+ page: true,
+ cellMinWidth: 100,
+ cols: [[
+ {type: 'numbers'},
+ {field: 'matnr', title: '鐗╄川缂栫爜'},
+ {field: 'maktx', title: '浜у搧鍚嶇О'},
+ {field: 'specs', title: '瑙勬牸鍨嬪彿'},
+ {field: 'batch', title: '鎵规鍙�'},
+ {field: 'color', title: '鍗峰彿'},
+ {field: 'qty', title: '鍑哄簱鏁伴噺'},
+ {field: 'deadTime', title: '鍑哄簱鏃ユ湡'},
+ {field: 'source', title: '澶嶆牳鐘舵��'},
+ {field: 'memo', title: '澶嶆牳澶囨敞'}
+ ]],
+ 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 () {
+ $(layero).find('.layui-table-view').css('margin', '0');
+ },
+ size: ''
+ });
+ }
+ });
+ }
+ });
+
+ // 鏄剧ず琛ㄥ崟寮圭獥
+ function showEditModel(expTpe) {
+ admin.open({
+ type: 1,
+ title: (expTpe ? '淇敼' : '娣诲姞') + '鍗曟嵁',
+ content: $('#editDialog').html(),
+ area: '1300px',
+ success: function (layero, dIndex) {
+ $(layero).children('.layui-layer-content').css('overflow', 'visible');
+ var isExpAdd = !expTpe;
+ // 鍥炴樉鏁版嵁
+ form.val('editForm', expTpe);
+ if (expTpe) {
+ $('#orderNo').attr("disabled", "disabled");
+ }
+ // 琛ㄥ崟鎻愪氦浜嬩欢
+ form.on('submit(orderEditSubmit)', function (data) {
+ // 缁勮鏁版嵁
+ if (xxDataList.length <= 0) {
+ layer.tips('璇锋坊鍔犲崟鎹槑缁�', '#matAddBtnComment', {tips: [1, '#ff4c4c']});
+ return false;
+ }
+ let nList = admin.util.deepClone(xxDataList);
+ for (let xi = 0; xi < nList.length; xi++) {
+ if (nList[xi].anfme <= 0){
+ layer.msg('鏄庣粏淇敼鏁伴噺涓嶅悎娉�', {icon: 2});
+ return false;
+ }
+ if (nList[xi].anfme < nList[xi].workQty){
+ layer.msg('鏁伴噺涓嶈兘灏忎簬宸蹭綔涓氭暟閲�', {icon: 2});
+ return false;
+ }
+ }
+ layer.load(2);
+ $.ajax({
+ url: baseUrl+"/review/form/" + (isExpAdd?"add":"modify") + "/auth",
+ headers: {'token': localStorage.getItem('token')},
+ data: JSON.stringify({
+ orderId: Number(data.field.id),
+ docType: Number(data.field.docType),
+ orderNo: data.field.orderNo,
+ orderDetlList: nList
+ }),
+ contentType:'application/json;charset=UTF-8',
+ method: 'POST',
+ success: function (res) {
+ layer.closeAll('loading');
+ if (res.code === 200){
+ layer.close(dIndex);
+ $(".layui-laypage-btn")[0].click();
+ layer.msg(res.msg, {icon: 1});
+ } else if (res.code === 403){
+ top.location.href = baseUrl+"/";
+ }else {
+ layer.msg(res.msg, {icon: 2});
+ }
+ }
+ })
+ return false;
+ });
+ // 鏄庣粏琛ㄦ牸
+ var xxDataList = [];
+ var tbOptions = {
+ elem: '#formSSXMTable',
+ headers: {token: localStorage.getItem('token')},
+ data: xxDataList,
+ page: true,
+ height: '350px;',
+ cellMinWidth: 100,
+ cols: [[
+ {type: 'numbers', title: '#'},
+ {field: 'matnr', title: '瑙勬牸', width: 160},
+ {field: 'maktx', title: '鍟嗗搧鍚嶇О', width: 200},
+ {field: 'batch', title: '绠卞彿', edit: true},
+ {field: 'specs', title: '鎺ュご'},
+ {field: 'anfme', title: '鏁伴噺(淇敼)', style: 'color: blue;font-weight: bold', edit: true, minWidth: 110, width: 110},
+ {field: 'workQty', title: '浣滀笟鏁伴噺', minWidth: 100, width: 100},
+ // {field: 'unit', title: '鍗曚綅', width: 80},
+ {field: 'memo', title: '澶囨敞' , edit: true},
+ {align: 'center', title: '鎿嶄綔', toolbar: '#formSSXMTableBar', minWidth: 80, width: 80, fixed: 'right'}
+ ]],
+ done: function (res) {
+ $(layero).find('.layui-table-view').css('margin', '0');
+ },
+ size: ''
+ };
+ if (!isExpAdd) {
+ $.ajax({
+ url: baseUrl+"/review/detl/all/auth?orderId=" + expTpe.id,
+ headers: {'token': localStorage.getItem('token')},
+ method: 'GET',
+ async: false,
+ success: function (res) {
+ if (res.code === 200){
+ xxDataList = res.data;
+ tbOptions.data = xxDataList;
+ } else if (res.code === 403){
+ top.location.href = baseUrl+"/";
+ }else {
+ layer.msg(res.msg, {icon: 2})
+ }
+ }
+ })
+ }
+ var insTbSSXM = table.render(tbOptions);
+ // 宸ュ叿鏉$偣鍑讳簨浠�
+ table.on('tool(formSSXMTable)', function (obj) {
+ var data = obj.data;
+ var layEvent = obj.event;
+ if (layEvent === 'edit') {
+ showEditModel2(data);
+ } else if (layEvent === 'del') {
+ if(data.workQty > 0){
+ layer.msg("宸插瓨鍦ㄤ綔涓氭暟閲忥紝涓嶈兘鍒犻櫎", {icon: 2});
+ return;
+ }
+ layer.confirm('纭畾瑕佸垹闄ゅ悧锛�', {
+ shade: .1,
+ skin: 'layui-layer-admin'
+ }, function (i) {
+ layer.close(i);
+ for (var j = 0; j < xxDataList.length; j++) {
+ if (xxDataList[j].matnr === data.matnr && xxDataList[j].batch === data.batch) {
+ xxDataList.splice(j, 1);
+ break;
+ }
+ }
+ insTbSSXM.reload({data: xxDataList, page: {curr: 1}});
+ });
+ }
+ });
+ // 鏄庣粏鏁版嵁淇敼
+ table.on('edit(formSSXMTable)', function (obj) {
+ let index = obj.tr.attr("data-index");
+ let data = xxDataList[index];
+ if (obj.field === 'anfme'){
+ let vle = Number(obj.value);
+ if (isNaN(vle)) {
+ layer.msg("璇疯緭鍏ユ暟瀛�", {icon: 2});
+ return false;
+ } else {
+ if (vle <= 0) {
+ layer.msg("鏁伴噺蹇呴』澶т簬闆�", {icon: 2});
+ // data[obj.field] = 0;
+ // insTbSSXM.reload({data: xxDataList});
+ return false;
+ }
+ if(obj.value < data.workQty){
+ layer.msg("杈撳叆鏁伴噺涓嶈兘灏忎簬浣滀笟涓暟閲�", {icon: 2});
+ // data[obj.field] = 0;
+ // insTbSSXM.reload({data: xxDataList});
+ return false;
+ }
+ }
+ }
+ data[obj.field] = obj.value;
+ insTbSSXM.reload({data: xxDataList});
+ });
+
+ $('#matAddBtnComment').click(function () {
+ showEditModel2();
+ });
+
+ // 鏄剧ず娣诲姞鏄庣粏琛ㄥ崟寮圭獥
+ function showEditModel2(exp) {
+ admin.open({
+ type: 1,
+ offset: '150px',
+ area: '680px',
+ title: (exp ? '淇敼' : '娣诲姞') + '鏄庣粏',
+ content: $('#matEditDialog').html(),
+ success: function (layero, dIndex) {
+ // 鍥炴樉鏁版嵁
+ form.val('matEditForm', exp);
+ // 琛ㄥ崟鎻愪氦浜嬩欢
+ form.on('submit(matEditSubmit)', function (data) {
+ let selectList = matXmSelect.getValue();
+ for (let i = 0; i<selectList.length; i++) {
+ let item = selectList[i];
+ // 鏌ヨ鐗╂枡璇︽儏
+ $.ajax({
+ url: baseUrl+"/mat/covert/"+item.value+"/auth",
+ headers: {'token': localStorage.getItem('token')},
+ method: 'GET',
+ async: false,
+ success: function (res) {
+ if (res.code === 200){
+ xxDataList.push(res.data);
+ insTbSSXM.reload({data: xxDataList, page: {curr: 1}});
+ } else if (res.code === 403){
+ top.location.href = baseUrl+"/";
+ }else {
+ layer.msg(res.msg, {icon: 2})
+ }
+ }
+ })
+ }
+ layer.close(dIndex);
+ return false;
+ });
+ // 娓叉煋鐗╂枡閫夋嫨
+ var matXmSelect = xmSelect.render({
+ el: '#mat',
+ style: {
+ width: '340px',
+ },
+ autoRow: true,
+ toolbar: { show: true },
+ filterable: true,
+ remoteSearch: true,
+ remoteMethod: function(val, cb, show){
+ $.ajax({
+ url: baseUrl+"/mat/all/get/kv",
+ headers: {'token': localStorage.getItem('token')},
+ data: {
+ condition: val
+ },
+ method: 'POST',
+ success: function (res) {
+ if (res.code === 200){
+ cb(res.data)
+ } else {
+ cb([]);
+ layer.msg(res.msg, {icon: 2});
+ }
+ }
+ });
+ }
+ })
+ // 寮圭獥涓嶅嚭鐜版粴鍔ㄦ潯
+ $(layero).children('.layui-layer-content').css('overflow', 'visible');
+ layui.form.render('select');
+ }
+ });
+ }
+
+ }
+ });
+ }
+
+ // 鍒犻櫎鍗曟嵁
+ function doDel(orderId) {
+ layer.confirm('纭畾瑕佸垹闄ゅ悧锛�', {
+ shade: .1,
+ skin: 'layui-layer-admin'
+ }, function (i) {
+ layer.close(i);
+ layer.load(2);
+ $.ajax({
+ url: baseUrl+"/review/delete/auth",
+ headers: {'token': localStorage.getItem('token')},
+ data: {
+ orderId: orderId
+ },
+ method: 'POST',
+ success: function (res) {
+ layer.closeAll('loading');
+ if (res.code === 200){
+ if (insTbCount === 0) {
+ insTb.reload({page: {curr: 1}});
+ } else {
+ $(".layui-laypage-btn")[0].click();
+ }
+ layer.msg(res.msg, {icon: 1});
+ } else if (res.code === 403){
+ top.location.href = baseUrl+"/";
+ }else {
+ layer.msg(res.msg, {icon: 2});
+ }
+ }
+ })
+ });
+ }
+
+ // 淇敼璁㈠崟鐘舵��
+ function doModify(orderId, orderNo, settle) {
+ layer.confirm('纭畾瑕佹墜鍔ㄥ畬缁撳悧锛�', {
+ shade: .1,
+ skin: 'layui-layer-admin'
+ }, function (i) {
+ layer.close(i);
+ layer.load(2);
+ console.log(orderId);
+ console.log(settle);
+ $.ajax({
+ url: baseUrl+"/review/update/auth",
+ headers: {'token': localStorage.getItem('token')},
+ data: {
+ id: orderId,
+ orderNo: orderNo,
+ settle: settle
+ },
+ method: 'POST',
+ success: function (res) {
+ layer.closeAll('loading');
+ if (res.code === 200){
+ if (insTbCount === 0) {
+ insTb.reload({page: {curr: 1}});
+ } else {
+ $(".layui-laypage-btn")[0].click();
+ }
+ layer.msg(res.msg, {icon: 1});
+ } else if (res.code === 403){
+ top.location.href = baseUrl+"/";
+ }else {
+ layer.msg(res.msg, {icon: 2});
+ }
+ }
+ })
+ });
+ }
+
+ // 浠诲姟杩芥函
+ function showWrkTrace(orderId) {
+ let loadIndex = layer.msg('璇锋眰涓�...', {icon: 16, shade: 0.01, time: false});
+ $.ajax({
+ url: baseUrl+"/review/wrk/trace/auth",
+ headers: {'token': localStorage.getItem('token')},
+ data: {
+ orderId: orderId
+ },
+ method: 'POST',
+ success: function (res) {
+ layer.close(loadIndex);
+ if (res.code === 200){
+ laytpl(wrkTraceDialog.innerHTML).render(res.data, function (html) {
+ admin.open({
+ type: 1,
+ title: '浠诲姟杩芥函',
+ area: ['800px', '450px'],
+ shadeClose: true,
+ content: html,
+ success: function (layero, dIndex) {
+ $(layero).children('.layui-layer-content').css('overflow', 'visible');
+ /** 缁熻鍥捐〃 */
+ var traceCharts = echarts.init(document.getElementById('wrkTraceCharts'));
+ var traceOptions = {
+ title: {
+ text: '鎬婚噺/浣滀笟/瀹屾垚', x: 'center', y: '38%',
+ textStyle: {fontSize: 18, color: '#262626', fontWeight: 'normal'},
+ subtextStyle: {fontSize: 36, color: '#10B4E8'},
+ itemGap: 20
+ },
+ color: ['#10B4E8', '#E0E0E0', '#FF0000'],
+ tooltip: {trigger: 'item'},
+ series: [{name: '绠卞瓙鏁伴噺', type: 'pie', radius: ['75%', '80%'], label: {normal: {show: false}}}]
+ };
+ traceCharts.setOption(traceOptions);
+ // 璧嬪��
+ traceCharts.setOption({
+ title: {
+ subtext: res.data.totalQty+"/"+res.data.wrkQty+"/"+res.data.endQty
+ },
+ series: [
+ {
+ data: [
+ {name: '宸蹭綔涓�', value: res.data.wrkQty},
+ {name: '鏈綔涓�', value: res.data.totalQty-res.data.wrkQty-res.data.lackQty},
+ {name: '搴撳瓨涓嶈冻', value: res.data.lackQty},
+ ]
+ }
+ ]
+ });
+ }
+ });
+ });
+ } else if (res.code === 403){
+ top.location.href = baseUrl+"/";
+ }else {
+ layer.msg(res.msg, {icon: 2});
+ }
+ }
+ })
+ }
+
+ layDate.render({
+ elem: '.layui-laydate-range'
+ ,type: 'datetime'
+ ,range: true
+ });
+
+ function pakoutPreview(ids) {
+ let loadIndex = layer.load(2);
+ $.ajax({
+ url: baseUrl + "/out/refund/loc/preview/auth",
+ headers: {'token': localStorage.getItem('token')},
+ contentType: 'application/json;charset=UTF-8',
+ data: JSON.stringify(ids),
+ method: 'POST',
+ success: function (res) {
+ layer.close(loadIndex);
+ var tableCache;
+ if (res.code === 200){
+ layer.open({
+ type: 1
+ ,title: false
+ ,closeBtn: false
+ ,offset: '50px'
+ ,area: ['1500px', '700px']
+ ,shade: 0.5
+ ,shadeClose: false
+ ,btn: ['鐢熸垚閫�搴撳崟', '绋嶅悗澶勭悊']
+ ,btnAlign: 'c'
+ ,moveType: 1 //鎷栨嫿妯″紡锛�0鎴栬��1
+ ,content: $('#pakoutPreviewBox').html()
+ ,success: function(layero, index){
+ stoPreTabIdx = table.render({
+ elem: '#stoPreTab',
+ data: res.data,
+ height: 520,
+ page: false,
+ limit: Number.MAX_VALUE,
+ cellMinWidth: 100,
+ cols: [[
+ {type: 'checkbox'},
+ // {type: 'checkbox', merge: ['orderNo']},
+ {field: 'orderNo', title: '鍗曟嵁缂栧彿', align: 'center'},
+ // {field: 'orderNo', title: '鍗曟嵁缂栧彿', merge: true, align: 'center'},
+ {field: 'title', title: '鍟嗗搧', align: 'center', width: 350},
+ // {field: 'title', title: '鍟嗗搧', merge: true, align: 'center', width: 350},
+ {field: 'batch', title: '绠卞彿', align: 'center'},
+ {field: 'model', title: '鍗峰彿', align: 'center', hide: false},
+ {field: 'specs', title: '鎺ュご', align: 'center'},
+ // {field: 'brand', title: '鏈ㄧ绫诲瀷', align: 'center'},
+ {field: 'brand$', title: '鏈ㄧ绫诲瀷', align: 'center'},
+ {field: 'zpallet', title: '鎵樼洏鐮�', align: 'center'},
+ {field: 'anfme', title: '鏁伴噺', align: 'center', width: 90, style: 'font-weight: bold'},
+ {field: 'count', title: '鏁伴噺', align: 'center', width: 90, style: 'font-weight: bold'},
+ {field: 'locNo', title: '璐т綅', align: 'center', width: 100, templet: '#locNoTpl'},
+ {field: 'tkType$', title: 'TK鏍囪', align: 'center', width: 100},
+ // {field: 'staNos', align: 'center', title: '鍑哄簱绔�', merge: ['locNo'], templet: '#tbBasicTbStaNos'},
+ // {type: 'checkbox', merge: ['locNo']},
+ ]],
+ done: function (res) {
+ tableMerge.render(this);
+ $('.layui-table-body.layui-table-main').css("overflow", "auto");
+ tableCache = tableData = table.cache.stoPreTab;
+ }
+ });
+ // 淇敼鍑哄簱绔�
+ form.on('select(tbBasicTbStaNos)', function (obj) {
+ let index = obj.othis.parents('tr').attr("data-index");
+ let data = tableCache[index];
+ for (let i = 0; i<tableCache.length; i++) {
+ if (tableCache[i].locNo === data.locNo) {
+ tableCache[i]['staNo'] = Number(obj.elem.value);
+ }
+ }
+ obj.othis.children().find("input").css("color", "blue");
+ return false;
+ });
+ // 鎵归噺淇敼鍑哄簱绔�
+ form.on('submit(batchModifySta)', function () {
+ let stoPreTabData = layui.table.checkStatus('stoPreTab').data;
+ if (stoPreTabData.length < 1) {
+ layer.msg("璇疯嚦灏戦�夋嫨涓�鏉′互涓婂悎骞舵暟鎹�", {icon: 7});
+ return false;
+ }
+ modifySta(stoPreTabData);
+ });
+ // 鎵归噺淇敼鍑哄簱绔� - 绔欑偣閫夋嫨
+ function modifySta(stoPreTabData) {
+ // 鍑哄簱绔欏彇浜ら泦
+ let staBatchSelectVal = [];
+ for(let i = 0; i<stoPreTabData.length; i++) {
+ let staNos = stoPreTabData[i].staNos;
+ if (staNos !== null) {
+ if (staBatchSelectVal.length === 0) {
+ staBatchSelectVal = staNos;
+ } else {
+ staBatchSelectVal = staBatchSelectVal.filter(val =>
+ {
+ return new Set(staNos).has(val)
+ }
+ )
+ }
+ }
+ }
+ if (staBatchSelectVal.length === 0) {
+ layer.msg("鍑哄簱绔欐病鏈変氦闆嗭紝鏃犳硶鎵归噺淇敼", {icon: 2});
+ return;
+ }
+ admin.open({
+ type: 1,
+ area: '300px',
+ offset: 'auto',
+ title: '璇烽�夋嫨绔欑偣',
+ content: $('#staBatchSelectDialog').html(),
+ success: function (layero, ddIndex) {
+ // 娓叉煋涓嬫媺妗�
+ let template = Handlebars.compile($('#batchStaSelectTpl').html());
+ $('#batchSelectStaBox').html(template({list: staBatchSelectVal}));
+ // 纭
+ form.on('submit(staBatchSelectConfirm)', function (obj) {
+ let loadIdx = layer.load(2);
+ let batchSta = Number(obj.field.batchSta);
+ let arr = [];
+ for (let j = 0; j<stoPreTabData.length; j++) {
+ for (let i = 0; i<tableCache.length; i++) {
+ if (tableCache[i].orderNo === stoPreTabData[j].orderNo
+ && tableCache[i].matnr === stoPreTabData[j].matnr
+ && tableCache[i].locNo === stoPreTabData[j].locNo) {
+ tableCache[i]['staNo'] = batchSta;
+ arr.push(i);
+ }
+ }
+ }
+ stoPreTabIdx.reload({data: tableCache});
+ arr.forEach(item => {
+ $('div[lay-id=stoPreTab] tr[data-index="' + item + '"] .order-sta-select').val(batchSta);
+ });
+ layui.form.render('select');
+ arr.forEach(item => {
+ $('div[lay-id=stoPreTab] tr[data-index="' + item + '"] .layui-select-title').find("input").css("color", "blue");
+ });
+ layer.close(loadIdx); layer.close(ddIndex);
+ return false;
+ });
+ // 寮圭獥涓嶅嚭鐜版粴鍔ㄦ潯
+ $(layero).children('.layui-layer-content').css('overflow', 'visible');
+ layui.form.render('select');
+ },
+ })
+ }
+
+ }
+ ,yes: function(index, layero){
+ //鎸夐挳銆愰��搴撱�戠殑鍥炶皟
+ pakout(tableCache2, index);
+ tableCache2 = []
+ }
+ ,btn2: function(index, layero){
+ //鎸夐挳銆愮◢鍚庡鐞嗐�戠殑鍥炶皟
+ layer.close(index)
+ tableCache2 = []
+ //return false 寮�鍚浠g爜鍙姝㈢偣鍑昏鎸夐挳鍏抽棴
+ }
+ });
+ } else if (res.code === 403){
+ top.location.href = baseUrl+"/";
+ } else {
+ layer.msg(res.msg, {icon: 2})
+ }
+ }
+ })
+
+ // 澶嶉�夋浜嬩欢
+ table.on('checkbox(stoPreTab)', function(obj){
+ tableCache2.push(obj.data)
+ });
+ }
+
+ function pakout(tableCache, layerIndex) {
+ // let loadIndex = layer.load(2);
+ notice.msg('姝e湪鐢熸垚鍑哄簱浠诲姟......', {icon: 4});
+ $.ajax({
+ url: baseUrl + "/out/refund/loc/auth",
+ headers: {'token': localStorage.getItem('token')},
+ contentType: 'application/json;charset=UTF-8',
+ data: JSON.stringify(tableCache),
+ method: 'POST',
+ success: function (res) {
+ notice.destroy();
+ if (res.code === 200) {
+ layer.close(layerIndex);
+ layer.msg(res.msg, {icon: 1});
+ insTb.reload({where: null});
+ insTb2.reload({where: null, page: {curr: 1}});
+ } else if (res.code === 403) {
+ top.location.href = baseUrl + "/";
+ } else {
+ layer.msg(res.msg, {icon: 2})
+ }
+ }
+ });
+ }
+});
diff --git a/src/main/webapp/views/review/review.html b/src/main/webapp/views/review/review.html
new file mode 100644
index 0000000..4ae1fcd
--- /dev/null
+++ b/src/main/webapp/views/review/review.html
@@ -0,0 +1,389 @@
+<!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">
+ <link rel="stylesheet" href="../../static/css/originTable.css" media="all">
+ <!-- <link rel="stylesheet" href="../../static/css/common.css" media="all">-->
+ <!--[if lt IE 9]>
+ <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
+ <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+ <![endif]-->
+ <style>
+ .wrk-trace {
+ color: green;
+ cursor: pointer;
+ margin-left: 6px;
+ font-size: 18px;
+ }
+
+ .layui-timeline:first-child .layui-timeline-item {
+ margin-top: 30px;
+ }
+ .btn-add {
+ display: none;
+ }
+ .btn-edit {
+ display: none;
+ }
+ .btn-complete {
+ display: none;
+ }
+ .btn-delete {
+ display: none;
+ }
+ </style>
+</head>
+<body>
+
+<!-- 姝f枃寮�濮� -->
+<div class="layui-fluid">
+ <div class="layui-card">
+ <div class="layui-card-body">
+ <!-- 琛ㄦ牸椤堕儴宸ュ叿鏍� -->
+ <div class="layui-form toolbar">
+ <div class="layui-form-item">
+ <div class="layui-inline">
+ <div class="layui-input-inline mr0">
+ <input name="order_no" class="layui-input" type="text" placeholder="杈撳叆鍗曟嵁缂栧彿"/>
+ </div>
+ </div>
+ <div class="layui-inline">
+ <div class="layui-input-inline mr0">
+ <input name="cstmr_name" class="layui-input" type="text" placeholder="璇疯緭鍏ュ鎴峰悕绉�"/>
+ </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">
+ <select name="doc_type" id="docType-query">
+ </select>
+ </div>
+ </div>
+ <div class="layui-inline">
+ <div class="layui-input-inline">
+ <select name="settle">
+ <option value="">閫夋嫨鐘舵��</option>
+ <option value="1">寰呭鐞�</option>
+ <option value="2">浣滀笟涓�</option>
+ <option value="4">宸插畬鎴�</option>
+ <option value="6">涓婃姤瀹屾垚</option>
+ </select>
+ </div>
+ </div>
+ <div class="layui-inline">
+ <button class="layui-btn icon-btn" lay-filter="tbSearch" lay-submit>
+ <i class="layui-icon"></i>鎼滅储
+ </button>
+<!-- <button id="orderAddBtn" class="layui-btn icon-btn btn-add"><i class="layui-icon"></i>娣诲姞-->
+<!-- </button>-->
+ <input type="file" id="fileInput" accept=".xlsx, .xls">
+ <button onclick="exportExc()">瀵煎叆璁㈠崟</button>
+ </div>
+ </div>
+ </div>
+ <table id="order" lay-filter="order"></table>
+ </div>
+ </div>
+ <div class="layui-card">
+ <div class="layui-card-body">
+<!-- 鍏ュ簱閫氱煡鍗曪細鐢盓RP鎻愪緵鍗曟嵁缂栧彿銆佺被鍨嬨�佸崟鎹椂闂村強鐗╂枡鏄庣粏锛岀敓鎴愬叆搴撲綔涓氬崟锛屼负缁存姢绯荤粺楂樺彲鐢紝鐢ㄦ埛鍙嚜琛屾坊鍔犲叆搴撻�氱煡鍗曟暟鎹紝瀹屾垚鐙珛鐨勫叆搴撲綔涓氥��-->
+<!-- <span class="text-danger">鎵嬪姩娣诲姞鏃讹紝璇锋鏌ュ崟鎹紪鍙锋槸鍚﹀湪ERP绯荤粺涓凡瀛樺湪锛岄伩鍏嶅彂鐢熸暟鎹敊璇棶棰樸��</span>-->
+ <span class="text-danger">鍑哄簱鏃讹紝璇锋鏌ュ崟鎹紪鍙锋槸鍚﹀湪绯荤粺涓凡瀛樺湪锛岄伩鍏嶅彂鐢熸暟鎹敊璇棶棰樸��</span>
+ </div>
+ </div>
+</div>
+<script>
+ function exportExc() {
+ var fileInput = document.getElementById('fileInput');
+ var file = fileInput.files[0];
+ if (file === undefined) {
+ alert('璇峰厛閫夋嫨鏂囦欢')
+ return
+ }
+ var formData = new FormData();
+ formData.append('file', file);
+
+ fetch(baseUrl+'/importOrder', {
+ method: 'POST',
+ headers: {'token': localStorage.getItem('token')},
+ body: formData
+ }).then(response => {
+ response.text().then(data => {
+ var res = JSON.parse(data)
+ alert(res.msg)
+ })
+ }).catch(error => {
+ alert('瀵煎叆寮傚父');
+ });
+ }
+</script>
+<div id="myModal" style="display: none">
+ <div style="padding: 10px">
+ <div class="layui-upload">
+ <button type="button" class="layui-btn layui-btn-normal" id="data-btn-file2">閫夋嫨鏂囦欢</button><input id="data-btn-upload" class="layui-upload-file" type="file" accept="" name="file" multiple="">
+ <div class="layui-upload-list" style="max-width: 1000px;height:400px;overflow: scroll">
+ <table class="layui-table">
+ <colgroup>
+ <col>
+ <col width="150">
+ <col width="260">
+ <col width="150">
+ </colgroup>
+ <thead>
+ <tr><th>鏂囦欢鍚�</th>
+ <th>澶у皬</th>
+ <th>涓婁紶杩涘害</th>
+ <th>鎿嶄綔</th>
+ </tr></thead>
+ <tbody id="data-btn-file3"></tbody>
+ </table>
+ </div>
+ <button type="button" class="layui-btn" id="testListAction">寮�濮嬩笂浼�</button>
+ </div>
+ </div>
+</div>
+<!-- 琛ㄦ牸鎿嶄綔鍒� -->
+<script type="text/html" id="operate">
+ {{# if (d.settle == 0 || d.settle == 1) { }}
+<!-- <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>
+ <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-edit" lay-event="complete">瀹岀粨</a>
+<!-- <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="labelUp">涓婁紶鏍囩</a>-->
+ {{# } }}
+ {{# if (d.settle == 2) { }}
+<!-- <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="labelUp">涓婁紶鏍囩</a>-->
+ <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-edit" lay-event="complete">瀹岀粨</a>
+ {{# } }}
+ {{# if (d.settle == 4 && d.tkType=='1') { }}
+<!-- <a class="layui-btn layui-btn-danger layui-btn-xs btn-delete" lay-event="refundLoc">閫�搴�</a>-->
+ {{# } }}
+</script>
+<!-- 琛ㄦ牸鎿嶄綔鍒� -->
+<script type="text/html" id="tbLook">
+ <span class="layui-text">
+ <a href="javascript:;" lay-event="look">
+ <i class="layui-icon" style="font-size: 12px;"></i> 鏌ョ湅鍗曟嵁鏄庣粏
+ </a>
+ </span>
+</script>
+<script type="text/html" id="orderNoTpl">
+ {{d.orderNo}}
+ {{# if(d.settle > 1 && d.settle !== 3){ }}
+
+ {{# } }}
+ <i class="layui-icon layui-icon-about wrk-trace" lay-tips="鏌ョ湅浠诲姟杩芥函" lay-direction="2" lay-offset="-10px,0px" lay-event="wrkTrace"></i>
+</script>
+
+<!--<script type="text/html" id="settleTpl">-->
+<!-- <span name="settle" class="layui-badge layui-badge-gray">{{d.settle$}}</span>-->
+<!--</script>-->
+<script type="text/html" id="settleTpl">
+ <span name="settle"
+ {{# if( d.settle === 1){ }}
+ class="layui-badge layui-badge-red"
+ {{# }else if(d.settle === 2){ }}
+ class="layui-badge layui-badge-green"
+ {{# }else if(d.settle === 3){ }}
+ class="layui-badge layui-badge-gray"
+ {{# }else if(d.settle === 4){ }}
+ class="layui-badge layui-badge-blue"
+ {{# }else if(d.settle === 5){ }}
+ class="layui-badge layui-badge-gray"
+ {{# }else if(d.settle === 6){ }}
+ class="layui-badge layui-badge-gray"
+ {{# } }}
+ >{{d.settle$}}</span>
+</script>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+ <form id="editForm" lay-filter="editForm" class="layui-form model-form">
+ <input name="id" type="hidden"/>
+ <div class="layui-form-item">
+ <label class="layui-form-label">鍗曟嵁绫诲瀷锛�</label>
+ <div class="layui-input-block cool-auto-complete">
+ <input class="layui-input" name="docType" placeholder="璇疯緭鍏ュ崟鎹被鍨�" style="display: none">
+ <input id="docType$" name="docType$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ュ崟鎹被鍨�" onfocus=this.blur() lay-verType="tips" lay-verify="required">
+ <div class="cool-auto-complete-window">
+ <input class="cool-auto-complete-window-input" data-key="docTypeQueryBydocType" onkeyup="autoLoad(this.getAttribute('data-key'))">
+ <select class="cool-auto-complete-window-select" data-key="docTypeQueryBydocTypeSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+ </select>
+ </div>
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">鍗曟嵁缂栧彿锛�</label>
+ <div class="layui-input-block">
+ <input id="orderNo" name="orderNo" placeholder="杈撳叆鍗曟嵁缂栧彿" type="text" class="layui-input" maxlength="20" lay-verType="tips" />
+<!-- lay-verify="required"-->
+ </div>
+ </div>
+ <div class="layui-form-item" style="position: relative;">
+ <label class="layui-form-label">鍗曟嵁鏄庣粏锛�</label>
+ <div class="layui-input-block">
+ <table id="formSSXMTable" lay-filter="formSSXMTable"></table>
+ </div>
+ <button class="layui-btn layui-btn-sm icon-btn" id="matAddBtnComment"
+ style="position: absolute; left: 20px;top: 60px;padding: 0 5px;" type="button">
+ <i class="layui-icon"></i>娣诲姞鏄庣粏
+ </button>
+ </div>
+ <div class="layui-form-item text-right">
+ <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+ <button class="layui-btn" lay-filter="orderEditSubmit" lay-submit>淇濆瓨</button>
+ </div>
+ </form>
+</script>
+<!-- 琛ㄦ牸鎿嶄綔鍒� -->
+<script type="text/html" id="formSSXMTableBar">
+ <!-- <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="edit">淇敼</a>-->
+ <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">鍒犻櫎</a>
+</script>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="matEditDialog">
+ <form id="matEditForm" lay-filter="matEditForm" class="layui-form model-form">
+ <input name="experimentId" type="hidden"/>
+ <div class="layui-form-item" style="float: left">
+ <label class="layui-form-label">鐗╂枡 - 澶氶��</label>
+ <div class="layui-input-block">
+ <div id="mat" name="mat">
+ </div>
+ </div>
+ </div>
+ <div class="layui-form-item text-right" style="display: inline-block; margin-left: 35px">
+ <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+ <button class="layui-btn" lay-filter="matEditSubmit" lay-submit>淇濆瓨</button>
+ </div>
+ </form>
+</script>
+<!-- 璁㈠崟浠诲姟杩芥函 -->
+<script id="wrkTraceDialog" type="text/html" style="position: relative">
+ <div style="position: absolute; top: 0; left: 0;">
+ <div class="layui-card" style="overflow: hidden;">
+ <div class="layui-card-header" style="text-align: center;width: 80%;font-weight: inherit;font-size: 18px">{{ d.orderNo }}</div>
+ <div class="layui-card-body">
+ <div id="wrkTraceCharts" style="height: 300px;width: 400px;transform: translateX(-10%);"></div>
+ </div>
+ </div>
+ </div>
+ <div class="layui-row" >
+ <div class="layui-col-md5">
+ <h1 style="opacity: 0;">Hello World</h1>
+ </div>
+ <div class="layui-col-md7" style="">
+ {{# if(d.list.length > 0){ }}
+ <ul class="layui-timeline" style="height: 400px; overflow: scroll;">
+ {{# layui.each(d.list, function(index, item){ }}
+ <li class="layui-timeline-item">
+ <i class="layui-icon layui-timeline-axis"></i>
+ <div class="layui-timeline-content layui-text">
+ <div class="layui-timeline-title">
+ <h3 class="inline-block">
+ {{ item.wrkNo }}
+
+ {{# if(item.wrkMast.ioType < 100){ }}
+ <span class="layui-badge layui-bg-blue" style="line-height: 20px;">
+ {{ item.wrkMast.ioType$ }}
+ </span>
+ {{# } }}
+
+ {{# if(item.wrkMast.ioType > 100){ }}
+ <span class="layui-badge layui-bg-orange" style="line-height: 20px;">
+ {{ item.wrkMast.ioType$ }}
+ </span>
+ {{# } }}
+
+
+ {{# if(item.wrkMast.wrkSts < 14){ }}
+ <span class="layui-badge layui-bg-red" style="line-height: 20px;">
+ {{ item.wrkMast.wrkSts$ }}
+ </span>
+ {{# } }}
+
+ {{# if(item.wrkMast.wrkSts >= 14){ }}
+ <span class="layui-badge layui-bg-green" style="line-height: 20px;">
+ {{ item.wrkMast.wrkSts$ }}
+ </span>
+ {{# } }}
+
+ </h3> 
+ {{ item.wrkMast.ioTime$ }}
+ </div>
+
+ <table class="layui-table" lay-skin="nob" style="width: 80%">
+ <thead>
+ <tr style="background: none">
+ <td>No.</td>
+ <td>瑙勬牸</td>
+ <!-- <td>瑙勬牸</td>-->
+ <td>绠卞彿</td>
+<!-- <td>绠卞瓙绫诲瀷</td>-->
+ <td>鏄惁纭</td>
+ </tr>
+ </thead>
+ <tbody>
+ {{# layui.each(item.wrkDetls, function(idx, wrkDetl){ }}
+ <tr>
+ <td><span class="layui-badge layui-bg-cyan">{{ idx+1 }}</span></td>
+ <td>{{ wrkDetl.matnr }}</td>
+ <!-- <td>{{ wrkDetl.specs }}</td>-->
+ <td style="font-weight: bold">{{ wrkDetl.batch }}</td>
+ <td style="font-weight: bold">{{ wrkDetl.source$ }}</td>
+ </tr>
+ {{# }); }}
+ </tbody>
+ </table>
+
+ <hr class="layui-border-cyan" style="width: 90%; opacity: .6;">
+ </div>
+ </li>
+ {{# }); }}
+ </ul>
+ {{# } else { }}
+ <div style="height: 350px;display: flex;justify-content: center;align-items: center;">
+ <h2 style="font-weight: bold;letter-spacing: 2px">鏆傛棤浠诲姟</h2>
+ </div>
+ {{# } }}
+ </div>
+ </div>
+
+
+</script>
+
+
+<script type="text/html" id="staBatchSelectDialog">
+ <form class="layui-form" style="padding: 25px 50px 30px 50px;text-align: center">
+ <select id="batchSelectStaBox" name="batchSta" lay-vertype="tips" lay-verify="required" required="">
+ </select>
+ <button style="margin-top: 30px" class="layui-btn" lay-filter="staBatchSelectConfirm" lay-submit="">纭畾</button>
+ </form>
+</script>
+
+
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>
+<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/echarts/echarts.min.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/orderTable.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/review/review.js" charset="utf-8"></script>
+
+
+</body>
+
+
+
+
+</html>
+
--
Gitblit v1.9.1