From 04144679bf2464adbb170b9713aaa4f26d41922e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=93=B2=E5=A5=87?= <13840175730@139.com> Date: Fri, 6 Jun 2025 14:08:14 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=E6=96=B0=E5=8F=8C=E5=91=A8?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E5=AF=BC=E5=85=A5=E5=8F=8A=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dsic/gj_erp/bean/jhgk/DmQfxq.java | 74 +++++++++++++++++++ .../bean/jhgk/dto/DzDoubleWeekNeedDto.java | 54 ++++++++++++++ .../bean/jhgk/dto/XzDoubleWeekNeedDto.java | 54 ++++++++++++++ .../controller/jhgk/DmQfxqController.java | 63 +++++++++++++++- .../gj_erp/listeners/CommonExcelListener.java | 64 ++++++++++++++++ .../gj_erp/listeners/ExcelDzDMNListener.java | 30 ++++++++ .../gj_erp/listeners/ExcelXzDMNListener.java | 33 +++++++++ .../gj_erp/service/jhgk/DmQfxqService.java | 2 + .../service/jhgk/impl/DmQfxqServiceImpl.java | 21 ++++++ 9 files changed, 393 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/dsic/gj_erp/bean/jhgk/dto/DzDoubleWeekNeedDto.java create mode 100644 src/main/java/com/dsic/gj_erp/bean/jhgk/dto/XzDoubleWeekNeedDto.java create mode 100644 src/main/java/com/dsic/gj_erp/listeners/CommonExcelListener.java create mode 100644 src/main/java/com/dsic/gj_erp/listeners/ExcelDzDMNListener.java create mode 100644 src/main/java/com/dsic/gj_erp/listeners/ExcelXzDMNListener.java diff --git a/src/main/java/com/dsic/gj_erp/bean/jhgk/DmQfxq.java b/src/main/java/com/dsic/gj_erp/bean/jhgk/DmQfxq.java index 1445852..a27c837 100644 --- a/src/main/java/com/dsic/gj_erp/bean/jhgk/DmQfxq.java +++ b/src/main/java/com/dsic/gj_erp/bean/jhgk/DmQfxq.java @@ -1,8 +1,11 @@ package com.dsic.gj_erp.bean.jhgk; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; +import com.dsic.gj_erp.bean.jhgk.dto.DzDoubleWeekNeedDto; +import com.dsic.gj_erp.bean.jhgk.dto.XzDoubleWeekNeedDto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -76,6 +79,10 @@ public class DmQfxq implements Serializable { @ApiModelProperty(value = "D大板") private String ddb; + //fixme 取消注解 + @TableField(exist = false) + private String dr150; + @TableId(value = "id", type = IdType.ASSIGN_UUID) private String id; @@ -83,6 +90,30 @@ public class DmQfxq implements Serializable { private String dcPl; + //fixme 取消注解 + @TableField(exist = false) + private String xzcd;//小组场地 + + //fixme 取消注解 + @TableField(exist = false) + private String dzcd;//大组场地 + + //fixme 取消注解 + @TableField(exist = false) + private String xok;//钢加回复,小组ok + + //fixme 取消注解 + @TableField(exist = false) + private String dok;//钢加回复,大组ok + + //fixme 取消注解 + @TableField(exist = false) + private String xbz;//小组备注 + + //fixme 取消注解 + @TableField(exist = false) + private String dbz;//大组备注 + private String drr; private String drrq; private String zt; @@ -98,4 +129,47 @@ public class DmQfxq implements Serializable { private String fan; @TableField(exist = false) private String zt1; + + public String getCustomUniKey(){ + return StrUtil.format("{}_{}_{}",this.dcCh,this.dcPl,this.dcFd); + } + + public void ofWithXzDWM0(XzDoubleWeekNeedDto dto){ + this.setXdb(dto.getDbXqrq()); + this.setXskj(dto.getSkjXqrq()); + this.setXpt(dto.getPtXqrq()); + this.setXyw(dto.getYwXqrq()); + this.setXxc(dto.getXcXqrq()); + this.setXzcd(dto.getXzcd()); + } + + public static DmQfxq ofWithXzDWM(XzDoubleWeekNeedDto dto){ + DmQfxq dmQfxq = new DmQfxq(); + dmQfxq.setDcCh(dto.getDcCh()); + dmQfxq.setDcPl(dto.getDcPl()); + dmQfxq.setDcFd(dto.getDcFd()); + + dmQfxq.ofWithXzDWM0(dto); + + return dmQfxq; + } + + public void ofWithDzDWM0(DzDoubleWeekNeedDto dto){ + this.setDzcd(dto.getDzcd()); + this.setDqb(dto.getQwbXqrq()); + this.setDdb(dto.getDbXqrq()); + this.setDxc(dto.getXcXqrq()); + this.setDsj(dto.getSjXqrq()); + this.setDr150(dto.getR150Xqrq()); + } + + public static DmQfxq ofWithDzDWM(DzDoubleWeekNeedDto dto){ + DmQfxq dmQfxq = new DmQfxq(); + dmQfxq.setDcCh(dto.getDcCh()); + dmQfxq.setDcPl(dto.getDcPl()); + dmQfxq.setDcFd(dto.getDcFd()); + + dmQfxq.ofWithDzDWM0(dto); + return dmQfxq; + } } diff --git a/src/main/java/com/dsic/gj_erp/bean/jhgk/dto/DzDoubleWeekNeedDto.java b/src/main/java/com/dsic/gj_erp/bean/jhgk/dto/DzDoubleWeekNeedDto.java new file mode 100644 index 0000000..88b70ed --- /dev/null +++ b/src/main/java/com/dsic/gj_erp/bean/jhgk/dto/DzDoubleWeekNeedDto.java @@ -0,0 +1,54 @@ +package com.dsic.gj_erp.bean.jhgk.dto; + +import cn.hutool.core.util.StrUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + * 双周需求计划(excel)导入对象 + */ +@Getter +@Setter +public class DzDoubleWeekNeedDto { + + @ApiModelProperty(value = "船只") + private String dcCh; + + @ApiModelProperty(value = "批量号") + private String dcPl;//需要自行补0 + + @ApiModelProperty(value = "分段号") + private String dcFd; + + @ApiModelProperty(value = "大组场地") + private String dzcd; + + @ApiModelProperty(value = "车间主管") + private String cjzg; + + @ApiModelProperty(value = "大板需求") + private String dbXqrq; + + @ApiModelProperty(value = "型材需求") + private String xcXqrq; + + @ApiModelProperty(value = "散件需求") + private String sjXqrq; + + @ApiModelProperty(value = "R150需求") + private String r150Xqrq; + + @ApiModelProperty(value = "曲外板需求") + private String qwbXqrq; + + @ApiModelProperty(value = "钢加回复") + private String gjhf; + + @ApiModelProperty(value = "备注") + private String bz; + + public String getCustomUniKey(){ + return StrUtil.format("{}_{}_{}",this.dcCh,this.dcPl,this.dcFd); + } +} diff --git a/src/main/java/com/dsic/gj_erp/bean/jhgk/dto/XzDoubleWeekNeedDto.java b/src/main/java/com/dsic/gj_erp/bean/jhgk/dto/XzDoubleWeekNeedDto.java new file mode 100644 index 0000000..ed0db35 --- /dev/null +++ b/src/main/java/com/dsic/gj_erp/bean/jhgk/dto/XzDoubleWeekNeedDto.java @@ -0,0 +1,54 @@ +package com.dsic.gj_erp.bean.jhgk.dto; + +import cn.hutool.core.util.StrUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + * 双周需求计划(excel)导入对象 + */ +@Getter +@Setter +public class XzDoubleWeekNeedDto { + + @ApiModelProperty(value = "船只") + private String dcCh; + + @ApiModelProperty(value = "批量号") + private String dcPl;//需要自行补0 + + @ApiModelProperty(value = "分段号") + private String dcFd; + + @ApiModelProperty(value = "小组场地") + private String xzcd; + + @ApiModelProperty(value = "大板") + private String dbXqrq; + + @ApiModelProperty(value = "数控件") + private String skjXqrq; + + @ApiModelProperty(value = "型材") + private String xcXqrq; + + @ApiModelProperty(value = "平铁") + private String ptXqrq; + + @ApiModelProperty(value = "压弯") + private String ywXqrq;//曲加工 + + @ApiModelProperty(value = "光电件") + private String gdjXqrq; + + @ApiModelProperty(value = "钢加回复") + private String gjhf; + + @ApiModelProperty(value = "备注") + private String bz; + + public String getCustomUniKey(){ + return StrUtil.format("{}_{}_{}",this.dcCh,this.dcPl,this.dcFd); + } +} diff --git a/src/main/java/com/dsic/gj_erp/controller/jhgk/DmQfxqController.java b/src/main/java/com/dsic/gj_erp/controller/jhgk/DmQfxqController.java index a78507a..cb1e717 100644 --- a/src/main/java/com/dsic/gj_erp/controller/jhgk/DmQfxqController.java +++ b/src/main/java/com/dsic/gj_erp/controller/jhgk/DmQfxqController.java @@ -3,18 +3,22 @@ package com.dsic.gj_erp.controller.jhgk; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.dsic.gj_erp.annotation.AuthFunction; import com.dsic.gj_erp.bean.ResultBean; import com.dsic.gj_erp.bean.jcsj.DmCbxxp; import com.dsic.gj_erp.bean.jhgk.DmQfxq; +import com.dsic.gj_erp.bean.jhgk.dto.DzDoubleWeekNeedDto; +import com.dsic.gj_erp.bean.jhgk.dto.XzDoubleWeekNeedDto; import com.dsic.gj_erp.bean.jhgk.excel.GdxqExcel; import com.dsic.gj_erp.bean.jhgk.excel.GdxqExcel1; import com.dsic.gj_erp.exception.CustomException; -import com.dsic.gj_erp.listeners.ExcelGdxq1Listener; -import com.dsic.gj_erp.listeners.ExcelGdxqListener; +import com.dsic.gj_erp.exception.ServiceException; +import com.dsic.gj_erp.listeners.*; import com.dsic.gj_erp.service.jcsj.DmCbxxpService; import com.dsic.gj_erp.service.jhgk.DmQfxqService; import org.springframework.beans.factory.annotation.Autowired; @@ -22,7 +26,9 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; +import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; @@ -65,6 +71,59 @@ public class DmQfxqController { return new ResultBean(list); } + @PostMapping("/uploadNew") + public ResultBean uploadNew(@RequestParam("file") List files,HttpServletRequest request) throws IOException { + + String username=(String) request.getAttribute("yhms"); + String day= DateUtil.format(DateUtil.date(), "yyyy/MM/dd"); + + List list=new ArrayList<>(); + HashMap map = new HashMap<>(); + + for (MultipartFile file:files){ + if (StrUtil.contains(file.getOriginalFilename(),"小组双周")){ + CommonExcelListener commonExcelListener = new CommonExcelListener<>(file, XzDoubleWeekNeedDto.class); + List objectList = commonExcelListener.readAndGetObjList(); + objectList.forEach(item->{ + if (map.containsKey(item.getCustomUniKey())){ + throw new ServiceException(9999,StrUtil.format("小组数据,船号:{},批量:{},分段:{}存在重复,请修正后再次上传")); + } + DmQfxq dmQfxq = DmQfxq.ofWithXzDWM(item); + dmQfxq.setDrr(username); + dmQfxq.setDrrq(day); + list.add(dmQfxq); + map.put(dmQfxq.getCustomUniKey(),dmQfxq); + }); + } + + if (StrUtil.contains(file.getOriginalFilename(),"大组双周")){ + HashMap _map = new HashMap<>(); + CommonExcelListener commonExcelListener = new CommonExcelListener<>(file, DzDoubleWeekNeedDto.class); + List objectList = commonExcelListener.readAndGetObjList(); + + objectList.forEach(item->{ + if (_map.containsKey(item.getCustomUniKey())){ + throw new ServiceException(9999,StrUtil.format("大组数据,船号:{},批量:{},分段:{}存在重复,请修正后再次上传")); + } + _map.put(item.getCustomUniKey(),item); + + DmQfxq dmQfxq = map.get(item.getCustomUniKey()); + if (ObjUtil.isNotEmpty(dmQfxq)){ + dmQfxq.ofWithDzDWM0(item); + }else{ + dmQfxq=DmQfxq.ofWithDzDWM(item); + dmQfxq.setDrr(username); + dmQfxq.setDrrq(day); + list.add(dmQfxq); + } + }); + } + } + + service.saveOrUpdate(list); + return new ResultBean<>(); + } + //导入 @PostMapping("/upload") @AuthFunction diff --git a/src/main/java/com/dsic/gj_erp/listeners/CommonExcelListener.java b/src/main/java/com/dsic/gj_erp/listeners/CommonExcelListener.java new file mode 100644 index 0000000..a65fc65 --- /dev/null +++ b/src/main/java/com/dsic/gj_erp/listeners/CommonExcelListener.java @@ -0,0 +1,64 @@ +package com.dsic.gj_erp.listeners; + +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import lombok.Getter; +import lombok.Setter; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + +public class CommonExcelListener extends AnalysisEventListener { + + @Getter + private List objList =new ArrayList<>(); + + @Getter + @Setter + private MultipartFile file; + + Consumer action; + + private final Class clazz; + + public CommonExcelListener(MultipartFile file,Class clazz){ + this.file=file; + this.clazz=clazz; + } + + public CommonExcelListener(MultipartFile file,Class clazz,Consumer action){ + this.file=file; + this.clazz=clazz; + this.action=action; + } + + @Override + public void invoke(T t, AnalysisContext analysisContext) { + if (this.action!=null){ + this.handler(t); + } + objList.add(t); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + + } + + public void handler(T t){ + action.accept(t); + } + + public void read() throws IOException { + EasyExcel.read(this.file.getInputStream(),clazz,this); + } + + public List readAndGetObjList() throws IOException { + this.read(); + return this.objList; + } +} \ No newline at end of file diff --git a/src/main/java/com/dsic/gj_erp/listeners/ExcelDzDMNListener.java b/src/main/java/com/dsic/gj_erp/listeners/ExcelDzDMNListener.java new file mode 100644 index 0000000..2332472 --- /dev/null +++ b/src/main/java/com/dsic/gj_erp/listeners/ExcelDzDMNListener.java @@ -0,0 +1,30 @@ +package com.dsic.gj_erp.listeners; + +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import com.dsic.gj_erp.bean.jhgk.dto.DzDoubleWeekNeedDto; +import com.dsic.gj_erp.bean.jhgk.dto.XzDoubleWeekNeedDto; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * 大组双周需求 + */ +public class ExcelDzDMNListener extends AnalysisEventListener { + + @Getter + List objectList = new ArrayList<>(); + + @Override + public void invoke(DzDoubleWeekNeedDto excelDemo, AnalysisContext analysisContext) { + objectList.add(excelDemo); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + + } + +} diff --git a/src/main/java/com/dsic/gj_erp/listeners/ExcelXzDMNListener.java b/src/main/java/com/dsic/gj_erp/listeners/ExcelXzDMNListener.java new file mode 100644 index 0000000..ed5e112 --- /dev/null +++ b/src/main/java/com/dsic/gj_erp/listeners/ExcelXzDMNListener.java @@ -0,0 +1,33 @@ +package com.dsic.gj_erp.listeners; + +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import com.dsic.gj_erp.bean.jhgk.dto.XzDoubleWeekNeedDto; +import com.dsic.gj_erp.bean.jhgk.excel.GdxqExcel; +import com.dsic.gj_erp.util.ObjConvertUtils; +import lombok.Getter; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * 小组双周需求 + */ +public class ExcelXzDMNListener extends AnalysisEventListener { + + @Getter + List objectList = new ArrayList<>(); + + @Override + public void invoke(XzDoubleWeekNeedDto excelDemo, AnalysisContext analysisContext) { + objectList.add(excelDemo); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + + } + +} diff --git a/src/main/java/com/dsic/gj_erp/service/jhgk/DmQfxqService.java b/src/main/java/com/dsic/gj_erp/service/jhgk/DmQfxqService.java index a27a5bd..60a75fe 100644 --- a/src/main/java/com/dsic/gj_erp/service/jhgk/DmQfxqService.java +++ b/src/main/java/com/dsic/gj_erp/service/jhgk/DmQfxqService.java @@ -20,4 +20,6 @@ public interface DmQfxqService extends IService { List saveXzList(List list, String username, String day); List saveDzList(List list, String username, String day); void generateYdjh(List list); + + void saveOrUpdate(List list); } diff --git a/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmQfxqServiceImpl.java b/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmQfxqServiceImpl.java index d2cebf7..9fb5a8b 100644 --- a/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmQfxqServiceImpl.java +++ b/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmQfxqServiceImpl.java @@ -1,6 +1,7 @@ package com.dsic.gj_erp.service.jhgk.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -203,6 +204,26 @@ public class DmQfxqServiceImpl extends ServiceImpl impleme // ydjhService.saveBatch(ydjhList); } + @Override + @Transactional(rollbackFor = Exception.class) + public void saveOrUpdate(List list) { + List saveOrUpdateList = list.stream().map(item -> { + DmQfxq qfxq = this.getOne(Wrappers.query() + .select("top 1 *") + .eq("dc_ch", item.getDcCh()) + .eq("dc_pl", item.getDcPl()) + .eq("dc_fd", item.getDcFd()) + ); + if (ObjUtil.isNotEmpty(qfxq)) { + BeanUtil.copyProperties(item, qfxq); + } else { + qfxq = item; + } + return qfxq; + }).collect(Collectors.toList()); + this.saveOrUpdateBatch(saveOrUpdateList); + } + private void removeByMulti(Map> map){ map.forEach((key,list)->{ String[] str= key.split("@");