From 7adc9d681ed4d04bfb83be445ac8104faedf1b11 Mon Sep 17 00:00:00 2001 From: chenhc <2369838784@qq.com> Date: Mon, 6 Jan 2025 15:07:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=89=8B=E5=8A=A8=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E8=8D=AF=E5=93=81=E5=A4=84=E6=96=B9=E5=8D=95=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../glxp/api/constant/RedissonCacheKey.java | 3 + .../collect/IoCollectOrderController.java | 17 +- .../req/collect/IoCollectOrderUploadVo.java | 340 ++++++++++++++++++ .../collect/IoCollectOrderService.java | 76 ++++ 4 files changed, 432 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/glxp/api/req/collect/IoCollectOrderUploadVo.java diff --git a/src/main/java/com/glxp/api/constant/RedissonCacheKey.java b/src/main/java/com/glxp/api/constant/RedissonCacheKey.java index c93970b55..1737dfeca 100644 --- a/src/main/java/com/glxp/api/constant/RedissonCacheKey.java +++ b/src/main/java/com/glxp/api/constant/RedissonCacheKey.java @@ -66,4 +66,7 @@ public interface RedissonCacheKey { String XML_UPLOAD="xml_upload"; + + String XLSX_UPLOAD="xlsx_upload"; + } diff --git a/src/main/java/com/glxp/api/controller/collect/IoCollectOrderController.java b/src/main/java/com/glxp/api/controller/collect/IoCollectOrderController.java index 89f09f724..7c3d9a4a5 100644 --- a/src/main/java/com/glxp/api/controller/collect/IoCollectOrderController.java +++ b/src/main/java/com/glxp/api/controller/collect/IoCollectOrderController.java @@ -8,9 +8,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.PageInfo; +import com.glxp.api.annotation.CusRedissonAnnotation; +import com.glxp.api.annotation.RepeatSubmit; import com.glxp.api.common.enums.ResultEnum; import com.glxp.api.common.res.BaseResponse; import com.glxp.api.common.util.ResultVOUtils; +import com.glxp.api.constant.RedissonCacheKey; import com.glxp.api.constant.WorkOperType; import com.glxp.api.controller.BaseController; import com.glxp.api.entity.basic.BasicSkPrescribeEntity; @@ -42,10 +45,8 @@ import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.*; @@ -523,6 +524,14 @@ public class IoCollectOrderController extends BaseController { return ResultVOUtils.success(); } + + @RepeatSubmit() + @CusRedissonAnnotation(cacheName = RedissonCacheKey.XLSX_UPLOAD, key = {"#uuid"}, timeOutMsg = "系统正在处理,请勿重复上传") + @PostMapping("/udiwms/collect/order/xlsxUpload") + public BaseResponse xlsxUpload(@RequestParam("uuid") String uuid, @RequestParam("file") MultipartFile file) { + collectOrderService.xlsxUpload(file); + return ResultVOUtils.successMsg("上传成功!"); + } /** * 置顶 * diff --git a/src/main/java/com/glxp/api/req/collect/IoCollectOrderUploadVo.java b/src/main/java/com/glxp/api/req/collect/IoCollectOrderUploadVo.java new file mode 100644 index 000000000..44fac7de0 --- /dev/null +++ b/src/main/java/com/glxp/api/req/collect/IoCollectOrderUploadVo.java @@ -0,0 +1,340 @@ +package com.glxp.api.req.collect; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +public class IoCollectOrderUploadVo { + + + /** + * 单据号 + */ + @TableField(value = "orderId") + @ApiModelProperty(value = "本单据号") + @ExcelProperty("本单据号") + @ColumnWidth(30) + private String orderId; + + /** + * 原始单据号 + */ + @TableField(value = "billNo") + @ApiModelProperty(value = "原始单据号") + @ExcelProperty("原始单据号") + @ColumnWidth(30) + private String billNo; + + /** + * 单据类型 + */ + @TableField(value = "busType") + @ApiModelProperty(value = "单据类型") + @ExcelProperty("单据类型") + @ColumnWidth(30) + private String busType; + + /** + * 来源业务 + */ + @TableField(value = "fromType") + @ApiModelProperty(value = "来源业务") + @ExcelProperty("来源业务") + @ColumnWidth(30) + private String fromType; + + /** + * 来源业务说明 + */ + @TableField(value = "fromTypeDesc") + @ApiModelProperty(value = "来源业务说明") + @ExcelProperty("来源业务说明") + @ColumnWidth(30) + private String fromTypeDesc; + + + /** + * 本系统往来单位编码 + */ + @TableField(value = "localFromCorp") + @ApiModelProperty(value = "本系统往来单位编码") + @ExcelProperty("本系统往来单位编码") + @ColumnWidth(30) + private String localFromCorp; + + + /** + * 往来信息 + */ + @TableField(value = "fromCorp") + @ApiModelProperty(value = "往来信息") + @ExcelProperty("往来信息") + @ColumnWidth(30) + private String fromCorp; + + /** + * 往来信息名称 + */ + @TableField(value = "fromCorpName") + @ApiModelProperty(value = "往来信息名称") + @ExcelProperty("往来信息名称") + @ColumnWidth(30) + private String fromCorpName; + + /** + * 单据时间 + */ + @TableField(value = "billTime") + @ApiModelProperty(value = "单据时间") + @ExcelProperty("单据时间") + @ColumnWidth(30) + private Date billTime; + + /** + * 创建时间 + */ + @TableField(value = "createTime") + @ApiModelProperty(value = "创建时间") + @ExcelProperty("创建时间") + @ColumnWidth(30) + private Date createTime; + + /** + * 采集时间 + */ + @TableField(value = "collectTime") + @ApiModelProperty(value = "采集时间") + @ExcelProperty("采集时间") + @ColumnWidth(30) + private Date collectTime; + + + /** + * 工位编码 + */ + @TableField(value = "workPlaceCode") + @ApiModelProperty(value = "工位编码") + @ExcelProperty("工位编码") + @ColumnWidth(30) + private Long workPlaceCode; + + /** + * 备注 + */ + @TableField(value = "remark") + @ApiModelProperty(value = "备注") + @ExcelProperty("备注") + @ColumnWidth(30) + private String remark; + + /** + * 创建人 + */ + @TableField(value = "`createUser`") + @ApiModelProperty(value = "创建人") + @ExcelProperty("创建人") + @ColumnWidth(30) + private String createUser; + + /** + * 更新时间 + */ + @TableField(value = "updateTime") + @ApiModelProperty(value = "更新时间") + @ExcelProperty("更新时间") + @ColumnWidth(30) + private Date updateTime; + + + /** + * 完成时间 + */ + @TableField(value = "finishTime") + @ApiModelProperty(value = "完成时间") + @ExcelProperty("完成时间") + @ColumnWidth(30) + private Date finishTime; + /** + * 单据挂起时间 + */ + @TableField(value = "draftTime") + @ApiModelProperty(value = "单据挂起时间") + @ExcelProperty("单据挂起时间") + @ColumnWidth(30) + private Date draftTime; + + + /** + * 更新人 + */ + @TableField(value = "updateUser") + @ApiModelProperty(value = "更新人") + @ExcelProperty("更新人") + @ColumnWidth(30) + private Long updateUser; + /** + * 赋码状态 0:原始单据未处理,1:已分配工位待处理;2:处理中;3:已完成;4:处理异常,-1:草稿,挂起状态,5:库存不足 + */ + @TableField(value = "tagStatus") + @ExcelProperty("赋码状态") + @ColumnWidth(30) + private Integer tagStatus; + + /** + * 拆零状态:0:未拆零,1,正在拆零;2,已完成;3.拆零失败 + */ + @TableField(value = "splitStatus") + @ExcelProperty("拆零状态") + @ColumnWidth(30) + private Integer splitStatus; + + /** + * 拆零异常信息 + */ + @TableField(value = "splitMsg") + @ExcelProperty("拆零异常信息") + @ColumnWidth(30) + private String splitMsg; + + + /** + * 处方赋码信息 + */ + @TableField(value = "tagMsg") + @ExcelProperty("处方赋码信息") + @ColumnWidth(30) + private String tagMsg; + + /** + * 单据流通方式: 1:配送流通; 2:出库使用 + */ + @TableField(value = "orderCirType") + @ExcelProperty("单据流通方式") + @ColumnWidth(30) + private Integer orderCirType; + + + /** + * 单据备注1 + */ + @TableField(value = "backupOrderRemark1") + @ApiModelProperty(value = "单据备注1") + @ExcelProperty("单据备注1") + @ColumnWidth(30) + private String backupOrderRemark1; + + /** + * 单据备注2 + */ + @TableField(value = "backupOrderRemark2") + @ApiModelProperty(value = "单据备注2") + @ExcelProperty("单据备注2") + @ColumnWidth(30) + private String backupOrderRemark2; + + /** + * 单据备注3 + */ + @TableField(value = "backupOrderRemark3") + @ApiModelProperty(value = "单据备注3") + @ExcelProperty("单据备注3") + @ColumnWidth(30) + private String backupOrderRemark3; + + /** + * 单据备注4 + */ + @TableField(value = "backupOrderRemark4") + @ApiModelProperty(value = "单据备注4") + @ExcelProperty("单据备注4") + @ColumnWidth(30) + private String backupOrderRemark4; + + /** + * 单据备注5 + */ + @TableField(value = "backupOrderRemark5") + @ApiModelProperty(value = "单据备注5") + @ExcelProperty("单据备注5") + @ColumnWidth(30) + private String backupOrderRemark5; + + /** + * 单据备注6 + */ + @TableField(value = "backupOrderRemark6") + @ApiModelProperty(value = "单据备注6") + @ExcelProperty("单据备注6") + @ColumnWidth(30) + private String backupOrderRemark6; + + /** + * 排序时间 + */ + @TableField(value = "orderTime") + @ApiModelProperty(value = "排序时间") + @ExcelProperty("排序时间") + @ColumnWidth(30) + private Date orderTime; + + + /** + * 库存预警: 1:上锁正常; 2:上锁不足;3:已释放锁 + */ + @TableField(value = "invAlert") + @ExcelProperty("库存预警") + @ColumnWidth(30) + private Integer invAlert; + + + /** + * 异常信息 + */ + @TableField(value = "errorMsg") + @ExcelProperty("异常信息") + @ColumnWidth(30) + private String errorMsg; + + /** + * 上传状态(1.未上传,2.已上传,3.上传失败) + */ + @TableField(value = "uploadStatus") + @ExcelProperty("上传状态") + @ColumnWidth(30) + private Integer uploadStatus; + + /** + * 上传错误信息 + */ + @TableField(value = "uploadError") + @ExcelProperty("上传错误信息") + @ColumnWidth(30) + private String uploadError; + + + @TableField(value = "shipper") + @ApiModelProperty(value = "发货方编码") + @ExcelProperty("发货方编码") + @ColumnWidth(30) + private String shipper; + + @TableField(value = "shipperName") + @ApiModelProperty(value = "发货方名称") + @ExcelProperty("发货方名称") + @ColumnWidth(30) + private String shipperName; + + @TableField(value = "thrBusType") + @ApiModelProperty(value = "第三方单据类型编码") + @ExcelProperty("第三方单据类型编码") + @ColumnWidth(30) + private String thrBusType; + + + +} diff --git a/src/main/java/com/glxp/api/service/collect/IoCollectOrderService.java b/src/main/java/com/glxp/api/service/collect/IoCollectOrderService.java index e39ebbcdc..786071737 100644 --- a/src/main/java/com/glxp/api/service/collect/IoCollectOrderService.java +++ b/src/main/java/com/glxp/api/service/collect/IoCollectOrderService.java @@ -2,10 +2,14 @@ package com.glxp.api.service.collect; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.io.FileUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -39,6 +43,7 @@ import com.glxp.api.http.sync.SpGetHttpClient; import com.glxp.api.req.basic.FilterUdiRelRequest; import com.glxp.api.req.collect.CollectOrderBizRequest; import com.glxp.api.req.collect.CollectOrderRequest; +import com.glxp.api.req.collect.IoCollectOrderUploadVo; import com.glxp.api.req.collect.PostCollectOrderRequest; import com.glxp.api.req.inout.*; import com.glxp.api.res.PageSimpleResponse; @@ -56,6 +61,7 @@ import com.glxp.api.service.auth.CustomerService; import com.glxp.api.service.auth.DeptService; import com.glxp.api.service.auth.SysWorkplaceService; import com.glxp.api.service.basic.*; +import com.glxp.api.service.collect.down.ThrOrderDownload; import com.glxp.api.service.inout.*; import com.glxp.api.service.inout.impl.IoCodeService; import com.glxp.api.service.sync.HeartService; @@ -69,8 +75,11 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import java.io.IOException; +import java.io.InputStream; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -132,6 +141,10 @@ public class IoCollectOrderService extends ServiceImpl 5 * 1024 * 1024) { + throw new JsonException("上传文件超过5M"); + } + } catch (Exception e) { + throw new JsonException("上传失败:" + e.getMessage()); + } + + + List list = getList(file); + if (CollUtil.isEmpty(list)) { + throw new JsonException("文件数据为空"); + } + + if (CollUtil.isNotEmpty(list)) { + CollectOrderRequest collectOrderRequest = new CollectOrderRequest(); + + collectOrderRequest.setBusType("YPCF002"); + collectOrderRequest.setCreateUser(String.valueOf(customerService.getUserId())); + collectOrderRequest.setWorkPlaceCode(null); + + thrOrderDownload.importThrOrder(list, collectOrderRequest); + } + } + + + + public List getList(MultipartFile file) { + List entities = new ArrayList<>(); + + try (InputStream inputStream = file.getInputStream()) { + EasyExcel.read(inputStream, IoCollectOrderUploadVo.class, new AnalysisEventListener() { + + @Override + public void invoke(IoCollectOrderUploadVo data, AnalysisContext context) { + // 每次读取到一行数据,都会调用这个方法 + IoCollectOrder ioCollectOrder = new IoCollectOrder(); + BeanUtils.copyProperties(data,ioCollectOrder); + entities.add(ioCollectOrder); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + // 所有数据解析完成后的操作,可以在这里进行后续处理 + // 比如:保存数据到数据库 + } + + // 可以选择性地覆盖其他方法,比如处理表头、异常等 + }).sheet().doRead(); + } catch (IOException e) { + e.printStackTrace(); + } + + return entities; + } + }