From 35313ffe430ad0ef6799c60316ce2d7bdfa8b855 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期一, 02 九月 2024 13:55:08 +0800
Subject: [PATCH] excel导入单据
---
src/main/resources/mapper/OrderDetlMapper.xml | 17 +++
src/main/java/com/zy/asrs/controller/OrderController.java | 31 ++++++
src/main/java/com/zy/asrs/service/impl/DocTypeServiceImpl.java | 48 ++++-----
src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java | 5 +
src/main/java/com/zy/asrs/importexcle/ImportOrderListener.java | 150 ++++++++++++++++++++++++++++++
src/main/java/com/zy/asrs/importexcle/ImportOrderDto.java | 20 ++++
src/main/webapp/views/order/order.html | 28 +++++
7 files changed, 273 insertions(+), 26 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/OrderController.java b/src/main/java/com/zy/asrs/controller/OrderController.java
index bf673f9..8465ddb 100644
--- a/src/main/java/com/zy/asrs/controller/OrderController.java
+++ b/src/main/java/com/zy/asrs/controller/OrderController.java
@@ -1,5 +1,6 @@
package com.zy.asrs.controller;
+import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
@@ -11,16 +12,23 @@
import com.zy.asrs.entity.param.OrderDomainParam;
import com.zy.asrs.entity.result.WrkTraceVo;
+import com.zy.asrs.importexcle.ImportOrderDto;
+import com.zy.asrs.importexcle.ImportOrderListener;
+import com.zy.asrs.mapper.OrderDetlMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.FileSaveExampleUtil;
import com.zy.common.model.DetlDto;
import com.zy.common.web.BaseController;
+import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
+import javax.annotation.Resource;
+import java.io.IOException;
import java.util.*;
@RestController
@@ -45,6 +53,29 @@
@Autowired
private WrkMastLogService wrkMastLogService;
+ @Resource
+ private OrderDetlMapper orderDetlMapper;
+
+ @PostMapping("/importOrder")
+ @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(), ImportOrderDto.class,
+ new ImportOrderListener(orderService, orderDetlMapper,docTypeService, snowflakeIdWorker,getUserId())).sheet().doReadSync();
+ }
+
@RequestMapping(value = "/order/nav/list/auth")
@ManagerAuth
public R navList(@RequestParam(required = false) String orderNo){
diff --git a/src/main/java/com/zy/asrs/importexcle/ImportOrderDto.java b/src/main/java/com/zy/asrs/importexcle/ImportOrderDto.java
new file mode 100644
index 0000000..8395d76
--- /dev/null
+++ b/src/main/java/com/zy/asrs/importexcle/ImportOrderDto.java
@@ -0,0 +1,20 @@
+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 ImportOrderDto {
+
+ @ExcelProperty(value = "鍖呰缁勫彿",index = 0)
+ private String column1;
+
+ @ExcelProperty(value = "鍑哄簱鍗曞彿/鍗曟嵁绫诲瀷",index = 1)
+ private String column2;
+
+}
diff --git a/src/main/java/com/zy/asrs/importexcle/ImportOrderListener.java b/src/main/java/com/zy/asrs/importexcle/ImportOrderListener.java
new file mode 100644
index 0000000..93226be
--- /dev/null
+++ b/src/main/java/com/zy/asrs/importexcle/ImportOrderListener.java
@@ -0,0 +1,150 @@
+package com.zy.asrs.importexcle;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.alibaba.excel.exception.ExcelAnalysisException;
+import com.alibaba.fastjson.JSON;
+import com.core.common.DateUtils;
+import com.core.common.SnowflakeIdWorker;
+import com.zy.asrs.entity.DocType;
+import com.zy.asrs.entity.Order;
+import com.zy.asrs.entity.OrderDetl;
+import com.zy.asrs.mapper.OrderDetlMapper;
+import com.zy.asrs.service.DocTypeService;
+import com.zy.asrs.service.OrderService;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author pang.jiabao
+ * @description 瀵煎叆璁㈠崟鐩戝惉鍣�
+ * @createDate 2024/9/2 9:56
+ */
+@Slf4j
+public class ImportOrderListener extends AnalysisEventListener<ImportOrderDto> {
+ /**
+ * 姣忛殧1000鏉″瓨鍌ㄦ暟鎹簱锛屽疄闄呬娇鐢ㄤ腑鍙互3000鏉★紝鐒跺悗娓呯悊list 锛屾柟渚垮唴瀛樺洖鏀�
+ */
+ private static final int BATCH_COUNT = 400;
+
+ private int count = 0;
+
+ private String orderNo;
+
+ private long orderId;
+
+ List<ImportOrderDto> list = new ArrayList<>();
+ /**
+ * 鍋囪杩欎釜鏄竴涓狣AO锛屽綋鐒舵湁涓氬姟閫昏緫杩欎釜涔熷彲浠ユ槸涓�涓猻ervice銆傚綋鐒跺鏋滀笉鐢ㄥ瓨鍌ㄨ繖涓璞℃病鐢ㄣ��
+ */
+ private final OrderService orderService;
+ private final OrderDetlMapper orderDetlMapper;
+ private final DocTypeService docTypeService;
+ private final SnowflakeIdWorker snowflakeIdWorker;
+ private final Long userId;
+
+ /**
+ * 濡傛灉浣跨敤浜唖pring,璇蜂娇鐢ㄨ繖涓瀯閫犳柟娉曘�傛瘡娆″垱寤篖istener鐨勬椂鍊欓渶瑕佹妸spring绠$悊鐨勭被浼犺繘鏉�
+ */
+ public ImportOrderListener(OrderService orderService, OrderDetlMapper orderDetlMapper,DocTypeService docTypeService, SnowflakeIdWorker snowflakeIdWorker, Long userId) {
+ this.orderService = orderService;
+ this.orderDetlMapper = orderDetlMapper;
+ this.docTypeService = docTypeService;
+ this.snowflakeIdWorker = snowflakeIdWorker;
+ this.userId = userId;
+ }
+
+ /**
+ * 杩欎釜姣忎竴鏉℃暟鎹В鏋愰兘浼氭潵璋冪敤
+ */
+ @SneakyThrows
+ @Override
+ public void invoke(ImportOrderDto data, AnalysisContext context) {
+ log.info("瑙f瀽鍒扮 {} 鏉℃暟鎹�:{}", ++count, JSON.toJSONString(data));
+ list.add(data);
+ if (context.getCurrentRowNum() == 3) {
+ String time = DateUtils.convert(new Date(),DateUtils.yyyyMMddHHmmss_F);
+ Order order2 = orderService.selectByNo(list.get(0).getColumn2());
+ if(order2 != null) {
+ throw new ExcelAnalysisException("鍗曟嵁宸插瓨鍦紒");
+ }
+ DocType docType = docTypeService.selectOrAdd(list.get(1).getColumn2(), Boolean.FALSE);
+ if (docType == null) {
+ throw new ExcelAnalysisException("鍗曟嵁绫诲瀷閿欒锛�" + list.get(1).getColumn2());
+ }
+ orderNo = list.get(0).getColumn2();
+ Order order = new Order();
+ order.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
+ order.setOrderNo(orderNo);
+ order.setOrderTime(time);
+ order.setDocType(docType.getDocId());
+ order.setSettle(1L);
+ order.setStatus(1);
+ order.setCreateBy(userId);
+ order.setCreateTime(new Date());
+ orderService.insert(order);
+ Order order1 = orderService.selectByNo(orderNo);
+ orderId = order1.getId();
+ list.clear();
+ return;
+ }
+
+ // 杈惧埌BATCH_COUNT浜嗭紝闇�瑕佸幓瀛樺偍涓�娆℃暟鎹簱锛岄槻姝㈡暟鎹嚑涓囨潯鏁版嵁鍦ㄥ唴瀛橈紝瀹规槗OOM
+ if (list.size() >= BATCH_COUNT) {
+ saveData();
+ // 瀛樺偍瀹屾垚娓呯悊 list
+ list.clear();
+ }
+ }
+
+ /**
+ * 鎵�鏈夋暟鎹В鏋愬畬鎴愪簡 閮戒細鏉ヨ皟鐢�
+ */
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext context) {
+ // 杩欓噷涔熻淇濆瓨鏁版嵁锛岀‘淇濇渶鍚庨仐鐣欑殑鏁版嵁涔熷瓨鍌ㄥ埌鏁版嵁搴�
+ if (list.size() > 0) {
+ saveData();
+ }
+ log.info("鎵�鏈夋暟鎹В鏋愬畬鎴愶紒");
+ }
+
+ /**
+ * 鍔犱笂瀛樺偍鏁版嵁搴�
+ */
+ private void saveData() {
+ log.info("{}鏉℃暟鎹紝寮�濮嬪瓨鍌ㄦ暟鎹簱锛�", list.size());
+ log.info("鍗曟嵁鍙凤細{}锛屾暟鎹細{},",orderNo, JSON.toJSONString(list));
+ List<OrderDetl> orderDetlList = new ArrayList<>();
+ list.forEach(importOrderDto -> {
+ OrderDetl orderDetl = new OrderDetl();
+ orderDetl.setBrand(importOrderDto.getColumn1());
+ 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);
+ });
+ orderDetlMapper.batchDetls(orderDetlList);
+
+ 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/OrderDetlMapper.java b/src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java
index e098f4e..48e8ddf 100644
--- a/src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java
@@ -13,6 +13,11 @@
@Repository
public interface OrderDetlMapper extends BaseMapper<OrderDetl> {
+ /**
+ * 鎵归噺瀛樺偍鍗曟嵁鏄庣粏
+ */
+ int batchDetls(@Param("list") List<OrderDetl> list);
+
OrderDetl selectItem(@Param("orderId") Long orderId, @Param("matnr") String matnr, @Param("batch") String batch);
OrderDetl selectItemByOrderNo(@Param("orderNo") String orderNo, @Param("matnr") String matnr, @Param("batch") String batch);
diff --git a/src/main/java/com/zy/asrs/service/impl/DocTypeServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/DocTypeServiceImpl.java
index 4f2a66d..4f7cc0e 100644
--- a/src/main/java/com/zy/asrs/service/impl/DocTypeServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/DocTypeServiceImpl.java
@@ -1,15 +1,12 @@
package com.zy.asrs.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.core.common.Cools;
-import com.core.exception.CoolException;
-import com.zy.asrs.mapper.DocTypeMapper;
-import com.zy.asrs.entity.DocType;
-import com.zy.asrs.service.DocTypeService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.core.common.Cools;
+import com.zy.asrs.entity.DocType;
+import com.zy.asrs.mapper.DocTypeMapper;
+import com.zy.asrs.service.DocTypeService;
import org.springframework.stereotype.Service;
-
-import java.util.Date;
@Service("docTypeService")
public class DocTypeServiceImpl extends ServiceImpl<DocTypeMapper, DocType> implements DocTypeService {
@@ -21,24 +18,25 @@
}
DocType docType = this.selectOne(new EntityWrapper<DocType>().eq("doc_name", docName));
if (docType == null) {
- long docId = 1L;
- DocType last = this.selectOne(new EntityWrapper<DocType>().orderBy("doc_id", false));
- if (last != null) {
- docId = last.getDocId() + 1;
- }
- docType = new DocType();
- docType.setDocId(docId);
- docType.setDocName(docName);
- if (null != pakin) {
- docType.setPakin(pakin ? 1 : 0);
- docType.setPakout(pakin ? 0 : 1);
- }
- docType.setStatus(1);
- docType.setCreateTime(new Date());
- docType.setUpdateTime(new Date());
- if (!this.insert(docType)) {
- throw new CoolException("鍗曟嵁绫诲瀷閿欒");
- }
+ return null;
+// long docId = 1L;
+// DocType last = this.selectOne(new EntityWrapper<DocType>().orderBy("doc_id", false));
+// if (last != null) {
+// docId = last.getDocId() + 1;
+// }
+// docType = new DocType();
+// docType.setDocId(docId);
+// docType.setDocName(docName);
+// if (null != pakin) {
+// docType.setPakin(pakin ? 1 : 0);
+// docType.setPakout(pakin ? 0 : 1);
+// }
+// docType.setStatus(1);
+// docType.setCreateTime(new Date());
+// docType.setUpdateTime(new Date());
+// if (!this.insert(docType)) {
+// throw new CoolException("鍗曟嵁绫诲瀷閿欒");
+// }
}
return docType;
}
diff --git a/src/main/resources/mapper/OrderDetlMapper.xml b/src/main/resources/mapper/OrderDetlMapper.xml
index 1fb8461..8c94d80 100644
--- a/src/main/resources/mapper/OrderDetlMapper.xml
+++ b/src/main/resources/mapper/OrderDetlMapper.xml
@@ -169,6 +169,23 @@
<insert id="addToLogTable">
INSERT INTO man_order_detl_log SELECT * FROM man_order_detl WHERE id = #{id}
</insert>
+ <insert id="batchDetls">
+ INSERT INTO
+ man_order_detl(brand,batch,order_id,order_no,create_by,create_time,status,qty,anfme)
+ VALUES
+ <foreach collection="list" item="item" index="index" separator=",">
+ (
+ #{item.brand},
+ #{item.batch},
+ #{item.orderId},
+ #{item.orderNo},
+ #{item.createBy},
+ #{item.createTime},
+ #{item.status},
+ #{item.qty},
+ #{item.anfme}
+ )</foreach>
+ </insert>
<update id="increaseQtyByOrderNo">
update man_order_detl
diff --git a/src/main/webapp/views/order/order.html b/src/main/webapp/views/order/order.html
index 5e0a283..49cbd8b 100644
--- a/src/main/webapp/views/order/order.html
+++ b/src/main/webapp/views/order/order.html
@@ -82,6 +82,8 @@
</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>
@@ -96,7 +98,31 @@
</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">
@@ -134,7 +160,7 @@
<a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" 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>
+<!-- <a class="layui-btn layui-btn-danger layui-btn-xs btn-delete" lay-event="refundLoc">閫�搴�</a>-->
{{# } }}
</script>
<!-- 琛ㄦ牸鎿嶄綔鍒� -->
--
Gitblit v1.9.1