Jelajahi Sumber

修改单导入

DLC 4 minggu lalu
induk
melakukan
11ba631e4d

+ 4 - 0
qcs-common/src/main/java/com/rongwei/bscommon/sys/dao/QcsMdfFormDao.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.rongwei.bsentity.domain.QcsLossDetailDo;
 import com.rongwei.bsentity.domain.QcsMdfFormDo;
+import com.rongwei.rwadmincommon.system.domain.SysUserDo;
 import org.apache.ibatis.annotations.Delete;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -47,4 +48,7 @@ public interface QcsMdfFormDao extends BaseMapper<QcsMdfFormDo> {
 
     @Update("update qcs_mdf_detail set DELETED='1',MODIFYDATE=NOW() where FORMID=#{formId} and DELETED='0'")
     void delMdfDetail(@Param(value = "formId") String formId);
+
+    @Select("select ID,NAME from sys_user where DELETED='0'")
+    List<SysUserDo> getAllUsers();
 }

+ 4 - 0
qcs-common/src/main/java/com/rongwei/bscommon/sys/service/QcsMdfFormService.java

@@ -3,11 +3,15 @@ package com.rongwei.bscommon.sys.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.rongwei.bsentity.domain.QcsMdfFormDo;
 import com.rongwei.rwcommon.base.R;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
 import java.util.Map;
 
 public interface QcsMdfFormService extends IService<QcsMdfFormDo> {
     R afterSave(Map<String, String> params);
 
     R centerSell(Map<String, String> params);
+
+    R importMdfForm(MultipartFile file, String unitId) throws IOException;
 }

+ 1 - 1
qcs-common/src/main/java/com/rongwei/bscommon/sys/service/impl/QcsMainCostServiceImpl.java

@@ -807,6 +807,7 @@ public class QcsMainCostServiceImpl extends ServiceImpl<QcsMainCostDao, QcsMainC
                             amount = mdfFormDo.getActamount();
                             qcsLossDetailDo.setRoption("{\"dataSource\":\"导入\",\"dataType\":\"修改单同步\"}");
                         } else {
+                            thrSubIndex++;
                             continue;
                         }
                     } else {
@@ -886,7 +887,6 @@ public class QcsMainCostServiceImpl extends ServiceImpl<QcsMainCostDao, QcsMainC
             qcsMainCostDo.setYearmonth(format.parse(yearMonth));
             qcsMainCostDo.setCosttype(costType);
 
-//            return R.ok();
             Boolean bool1 = qcsMainCostService.save(qcsMainCostDo);
             Boolean bool2 = qcsLossDetailService.saveBatch(qcsLossDetailDoList);
             if (bool1 && bool2) {

+ 453 - 4
qcs-common/src/main/java/com/rongwei/bscommon/sys/service/impl/QcsMdfFormServiceImpl.java

@@ -1,20 +1,29 @@
 package com.rongwei.bscommon.sys.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.rongwei.bscommon.sys.dao.QcsMdfFormDao;
-import com.rongwei.bscommon.sys.service.QcsMainCostService;
-import com.rongwei.bscommon.sys.service.QcsMdfDetailService;
-import com.rongwei.bscommon.sys.service.QcsMdfFormService;
-import com.rongwei.bscommon.sys.service.QcsMdfRowService;
+import com.rongwei.bscommon.sys.dao.SlaveDao;
+import com.rongwei.bscommon.sys.service.*;
+import com.rongwei.bscommon.sys.utils.ExcelUtils;
+import com.rongwei.bscommon.sys.utils.StringUtil;
 import com.rongwei.bsentity.domain.*;
+import com.rongwei.bsentity.vo.ImportMdfVo;
+import com.rongwei.rwadmincommon.system.domain.SysUserDo;
 import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommon.utils.SecurityUtil;
 import com.rongwei.rwcommon.utils.StringUtils;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -27,11 +36,15 @@ public class QcsMdfFormServiceImpl extends ServiceImpl<QcsMdfFormDao, QcsMdfForm
     @Autowired
     QcsMdfFormService qcsMdfFormService;
     @Autowired
+    QcsMdfSectionService qcsMdfSectionService;
+    @Autowired
     QcsMainCostService qcsMainCostService;
     @Autowired
     QcsMdfRowService qcsMdfRowService;
     @Autowired
     QcsMdfDetailService qcsMdfDetailService;
+    @Autowired
+    SlaveDao slaveDao;
 
     DecimalFormat df = new DecimalFormat("0.##");
 
@@ -178,4 +191,440 @@ public class QcsMdfFormServiceImpl extends ServiceImpl<QcsMdfFormDao, QcsMdfForm
             return R.error();
         }
     }
+
+    //修改单导入
+    @Override
+    public R importMdfForm(MultipartFile file, String unitId) throws IOException {
+        StringBuilder allStrBuilder = new StringBuilder();
+        List<QcsPartNoDo> allPartnos = slaveDao.getAllPartnos();//工号及图号信息
+        List<SysUserDo> sysUserDos = qcsMdfFormDao.getAllUsers();//人员信息
+        List<Map<String, String>> unitMap = qcsMdfFormDao.getUnitMap();//基地信息
+        String deptName = "";
+        List<Map<String, String>> unitList = unitMap.stream()
+                .filter(umap -> {
+                    // 设置你的筛选条件
+                    String id = umap.get("ID");
+                    return id.equals(unitId);
+                }).collect(Collectors.toList());
+        if (unitList.size() > 0) {
+            deptName = unitList.get(0).get("FULLNAME");
+        }
+
+        List<ImportMdfVo> importMdfVos = new ArrayList<>();
+        List<QcsMdfFormDo> qcsMdfFormDoList = new ArrayList<>();
+        List<QcsMdfSectionDo> qcsMdfSectionDoList = new ArrayList<>();
+        List<QcsMdfRowDo> qcsMdfRowDoList = new ArrayList<>();
+        List<QcsMdfDetailDo> qcsMdfDetailDoList = new ArrayList<>();
+        List<String> formids = new ArrayList<>();
+
+        Sheet sheet = new XSSFWorkbook(file.getInputStream()).getSheetAt(0);
+        int lastRowNum = sheet.getLastRowNum();
+        String ropJson = "{\"dataSource\":\"导入\"}";
+        for (int i = 2; i <= lastRowNum; i++) {
+            Row row = sheet.getRow(i);
+            if (ExcelUtils.isRowEmpty(row)) {
+                continue;
+            }
+
+            StringBuilder stringBuilder = new StringBuilder();
+            ImportMdfVo importMdfVo = new ImportMdfVo();
+
+            //项目工号
+            String procode = row.getCell(0).toString().replaceAll("\\s+", "");
+            List<QcsPartNoDo> codeParts = new ArrayList<>();
+            ;
+            if (StringUtils.isEmpty(procode)) {
+                stringBuilder.append("项目工号不能为空,");
+            } else if (procode.equals("小计")) {
+                break;
+            } else {
+                if (StringUtil.isScience(procode)) {
+                    BigDecimal formatProjectCode = new BigDecimal(procode);
+                    procode = formatProjectCode.setScale(0, BigDecimal.ROUND_HALF_UP).toPlainString();
+                }
+
+                String finalProcode = procode;
+                codeParts = allPartnos.stream().filter(c -> c.getDlprojid().equals(finalProcode)).collect(Collectors.toList());
+                if (codeParts.size() == 0) {
+                    stringBuilder.append("项目工号" + procode + "不存在,");
+                } else {
+                    importMdfVo.setProjectdlprojid(procode);
+                    importMdfVo.setProjectid(codeParts.get(0).getDtserialid());
+                    importMdfVo.setProjectdlprojname(codeParts.get(0).getDlprojname());
+                }
+            }
+
+            importMdfVo.setSourcename(row.getCell(2).toString().replaceAll("\\s+", ""));//修改原因
+            importMdfVo.setNumbername(row.getCell(3).toString().replaceAll("\\s+", ""));//专业
+
+            //修改单编号
+            String lossno = row.getCell(4).toString().replaceAll("\\s+", "");
+            if (StringUtils.isNotEmpty(lossno)) {
+                if (StringUtil.isScience(lossno)) {
+                    BigDecimal formatProjectCode = new BigDecimal(lossno);
+                    lossno = formatProjectCode.setScale(0, BigDecimal.ROUND_HALF_UP).toPlainString();
+                }
+                importMdfVo.setSourcenumbercode(lossno);
+            } else {
+                stringBuilder.append("修改单编号不能为空,");
+            }
+
+            //整改编号
+            String rectifycode = row.getCell(5).toString().replaceAll("\\s+", "");
+            if (StringUtils.isNotEmpty(rectifycode)) {
+                if (StringUtil.isScience(rectifycode)) {
+                    BigDecimal formatProjectCode = new BigDecimal(rectifycode);
+                    rectifycode = formatProjectCode.setScale(0, BigDecimal.ROUND_HALF_UP).toPlainString();
+                }
+                importMdfVo.setRectifycode(rectifycode);
+            }
+
+            //项目总工
+            String managename = row.getCell(6).toString().replaceAll("\\s+", "");
+            if (StringUtils.isNotEmpty(managename)) {
+                if (StringUtil.isScience(managename)) {
+                    BigDecimal formatProjectCode = new BigDecimal(managename);
+                    managename = formatProjectCode.setScale(0, BigDecimal.ROUND_HALF_UP).toPlainString();
+                }
+
+                String finalManagename = managename;
+                SysUserDo sysUserDo = sysUserDos.stream().filter(u -> u.getName().equals(finalManagename)).findFirst().orElse(null);
+                if (sysUserDo != null) {
+                    importMdfVo.setManageadminid(sysUserDo.getId());
+                    importMdfVo.setManageadminnickname(managename);
+                }
+            }
+
+            importMdfVo.setProducename(row.getCell(7).toString().replaceAll("\\s+", ""));//项目生产阶段
+
+            //错误源头图号
+            String partno = row.getCell(8).toString().replaceAll("\\s+", "");
+            if (StringUtils.isNotEmpty(partno)) {
+                if (StringUtil.isScience(partno)) {
+                    BigDecimal formatProjectCode = new BigDecimal(partno);
+                    partno = formatProjectCode.setScale(0, BigDecimal.ROUND_HALF_UP).toPlainString();
+                }
+                String finalPartno = partno;
+                List<QcsPartNoDo> partNos = codeParts.stream().filter(p -> p.getDtdrawingno().equals(finalPartno)).collect(Collectors.toList());
+                if (partNos.size() == 0) {
+                    stringBuilder.append("错误源头图号" + partno + "与项目工号" + procode + "不匹配,");
+                } else {
+                    importMdfVo.setErrordesignid(partNos.get(0).getPartnoid());
+                    importMdfVo.setErrordesigndtdrawingno(partno);
+                    importMdfVo.setErrordesigndtpartname(partNos.get(0).getDtpartname());
+                }
+            } else {
+                stringBuilder.append("错误源头图号不能为空,");
+            }
+
+            //设计人
+            String dtdesigner = row.getCell(10).toString().replaceAll("\\s+", "");
+            if (StringUtils.isNotEmpty(dtdesigner)) {
+                if (StringUtil.isScience(dtdesigner)) {
+                    BigDecimal formatProjectCode = new BigDecimal(dtdesigner);
+                    dtdesigner = formatProjectCode.setScale(0, BigDecimal.ROUND_HALF_UP).toPlainString();
+                }
+
+                String finaldtdesigner = dtdesigner;
+                SysUserDo sysUserDo = sysUserDos.stream().filter(u -> u.getName().equals(finaldtdesigner)).findFirst().orElse(null);
+                if (sysUserDo != null) {
+                    importMdfVo.setDtdesigneruseradminid(sysUserDo.getId());
+                    importMdfVo.setDtdesigner(dtdesigner);
+                }
+            }
+
+            //校对人
+            String dtwhocollate = row.getCell(11).toString().replaceAll("\\s+", "");
+            if (StringUtils.isNotEmpty(dtwhocollate)) {
+                if (StringUtil.isScience(dtwhocollate)) {
+                    BigDecimal formatProjectCode = new BigDecimal(dtwhocollate);
+                    dtwhocollate = formatProjectCode.setScale(0, BigDecimal.ROUND_HALF_UP).toPlainString();
+                }
+
+                String finaldtwhocollate = dtwhocollate;
+                SysUserDo sysUserDo = sysUserDos.stream().filter(u -> u.getName().equals(finaldtwhocollate)).findFirst().orElse(null);
+                if (sysUserDo != null) {
+                    importMdfVo.setDtwhocollateuseradminid(sysUserDo.getId());
+                    importMdfVo.setDtwhocollate(dtwhocollate);
+                }
+            }
+
+            //审核人
+            String dtwhoapprove = row.getCell(12).toString().replaceAll("\\s+", "");
+            if (StringUtils.isNotEmpty(dtwhoapprove)) {
+                if (StringUtil.isScience(dtwhoapprove)) {
+                    BigDecimal formatProjectCode = new BigDecimal(dtwhoapprove);
+                    dtwhoapprove = formatProjectCode.setScale(0, BigDecimal.ROUND_HALF_UP).toPlainString();
+                }
+
+                String finaldtwhoapprove = dtwhoapprove;
+                SysUserDo sysUserDo = sysUserDos.stream().filter(u -> u.getName().equals(finaldtwhoapprove)).findFirst().orElse(null);
+                if (sysUserDo != null) {
+                    importMdfVo.setDtwhoapproveuseradminid(sysUserDo.getId());
+                    importMdfVo.setDtwhoapprove(dtwhoapprove);
+                }
+            }
+
+            //修改责任方
+            String modifyby = row.getCell(13).toString().replaceAll("\\s+", "");
+            if (StringUtils.isNotEmpty(modifyby)) {
+                List<Map<String, String>> mapList = unitMap.stream()
+                        .filter(umap -> {
+                            String fullname = umap.get("FULLNAME");
+                            return fullname.equals(modifyby);
+                        }).collect(Collectors.toList());
+                if (mapList.size() > 0) {
+                    importMdfVo.setModifyby(modifyby);
+                }
+            }
+
+            importMdfVo.setErrorroutine(row.getCell(14).toString().replaceAll("\\s+", ""));//常规错误
+            importMdfVo.setErroragain(row.getCell(15).toString().replaceAll("\\s+", ""));//二过错误
+            importMdfVo.setErrorhard(row.getCell(16).toString().replaceAll("\\s+", ""));//较难发现错误
+
+            //校对表错误
+            String errortable = row.getCell(17).toString().replaceAll("\\s+", "");
+            if (errortable.equals("是")) {
+                importMdfVo.setErrortable("1");
+            } else {
+                importMdfVo.setErrortable("0");
+            }
+
+            //修改图号(任务单部件)
+            String taskdesign = row.getCell(18).toString().replaceAll("\\s+", "");
+            if (StringUtils.isNotEmpty(taskdesign)) {
+                if (StringUtil.isScience(taskdesign)) {
+                    BigDecimal formatProjectCode = new BigDecimal(taskdesign);
+                    taskdesign = formatProjectCode.setScale(0, BigDecimal.ROUND_HALF_UP).toPlainString();
+                }
+                String finaltaskdesign = taskdesign;
+                List<QcsPartNoDo> taskdesigns = codeParts.stream().filter(p -> p.getDtdrawingno().equals(finaltaskdesign)).collect(Collectors.toList());
+                if (taskdesigns.size() == 0) {
+                    stringBuilder.append("修改图号(任务单部件)" + taskdesign + "与项目工号" + procode + "不匹配,");
+                } else {
+                    importMdfVo.setTaskdesignid(taskdesigns.get(0).getPartnoid());
+                    importMdfVo.setTaskdesigndtdrawingno(taskdesign);
+                    importMdfVo.setTaskdesigndtpartname(taskdesigns.get(0).getDtpartname());
+                }
+            } else {
+                stringBuilder.append("修改图号(任务单部件)不能为空,");
+            }
+
+            //修改图号(次级部件)
+            String xgth = row.getCell(20).toString().replaceAll("\\s+", "");
+            if (StringUtils.isNotEmpty(xgth)) {
+                if (StringUtil.isScience(xgth)) {
+                    BigDecimal formatProjectCode = new BigDecimal(xgth);
+                    xgth = formatProjectCode.setScale(0, BigDecimal.ROUND_HALF_UP).toPlainString();
+                }
+                importMdfVo.setMinordesigndtdrawingno(xgth);
+            }
+
+            //修改图名(次级部件)
+            String xgtm = row.getCell(21).toString().replaceAll("\\s+", "");
+            if (StringUtils.isNotEmpty(xgtm)) {
+                if (StringUtil.isScience(xgtm)) {
+                    BigDecimal formatProjectCode = new BigDecimal(xgtm);
+                    xgtm = formatProjectCode.setScale(0, BigDecimal.ROUND_HALF_UP).toPlainString();
+                }
+                importMdfVo.setMinordesigndtpartname(xgtm);
+            }
+
+            //修改内容
+            String content = row.getCell(22).toString().replaceAll("\\s+", "");
+            if (StringUtils.isNotEmpty(content)) {
+                if (StringUtil.isScience(content)) {
+                    BigDecimal formatProjectCode = new BigDecimal(content);
+                    content = formatProjectCode.setScale(0, BigDecimal.ROUND_HALF_UP).toPlainString();
+                }
+                importMdfVo.setContent(content);
+            }
+
+            //人工
+            String mandayStr = row.getCell(23).toString().replaceAll("\\s+", "");
+            if (mandayStr != null && StringUtils.isNotEmpty(mandayStr)) {
+                String toAmount = convertToTwoDecimalPlaces(mandayStr);
+                if (toAmount.equals("金额要为数字,")) {
+                    stringBuilder.append(toAmount);
+                } else {
+                    importMdfVo.setManday(new BigDecimal(toAmount));
+                }
+            }
+
+            //材料
+            String materStr = row.getCell(24).toString().replaceAll("\\s+", "");
+            if (materStr != null && StringUtils.isNotEmpty(materStr)) {
+                String toAmount = convertToTwoDecimalPlaces(materStr);
+                if (toAmount.equals("金额要为数字,")) {
+                    stringBuilder.append(toAmount);
+                } else {
+                    importMdfVo.setMater(new BigDecimal(toAmount));
+                }
+            }
+
+            //设备
+            String equipStr = row.getCell(25).toString().replaceAll("\\s+", "");
+            if (equipStr != null && StringUtils.isNotEmpty(equipStr)) {
+                String toAmount = convertToTwoDecimalPlaces(equipStr);
+                if (toAmount.equals("金额要为数字,")) {
+                    stringBuilder.append(toAmount);
+                } else {
+                    importMdfVo.setEquip(new BigDecimal(toAmount));
+                }
+            }
+
+            //其他
+            String otherStr = row.getCell(26).toString().replaceAll("\\s+", "");
+            if (otherStr != null && StringUtils.isNotEmpty(otherStr)) {
+                String toAmount = convertToTwoDecimalPlaces(otherStr);
+                if (toAmount.equals("金额要为数字,")) {
+                    stringBuilder.append(toAmount);
+                } else {
+                    importMdfVo.setOther(new BigDecimal(toAmount));
+                }
+            }
+
+            if (StringUtils.isNotBlank(stringBuilder.toString())) {
+                allStrBuilder.append("第").append(i + 1).append("行").append(stringBuilder.deleteCharAt(stringBuilder.length() - 1)).append("<br>");
+            } else {
+                importMdfVos.add(importMdfVo);
+            }
+        }
+
+        String errMsg = allStrBuilder.toString();
+        if (StringUtils.isNotBlank(errMsg)) {
+            return R.error(errMsg);
+        } else {
+            if (importMdfVos.size() > 0) {
+                String finalDeptName = deptName;
+                String finalDeptName1 = deptName;
+                //项目工号+修改单编号 分组
+                Map<ImportMdfVo, List<ImportMdfVo>> formList = importMdfVos.stream().collect(Collectors.groupingBy(
+                        ps -> new ImportMdfVo(ps.getProjectdlprojid(), ps.getSourcenumbercode())
+                ));
+                formList.forEach((fm, flist) -> {
+                    //修改单分组
+                    Map<ImportMdfVo, List<ImportMdfVo>> formListMap = flist.stream().collect(Collectors.groupingBy(
+                            f -> new ImportMdfVo(f.getSourcename(), f.getNumbername(), f.getRectifycode(), f.getManageadminnickname(), f.getProducename())
+                    ));
+                    if (formListMap.size() > 1) {
+                        allStrBuilder.append("项目工号" + fm.getProjectdlprojid() + "修改单编号" + fm.getSourcenumbercode() + "有" + formListMap.size() + "行数据重复,请检查");
+                    } else {
+                        String formid = SecurityUtil.getUUID();
+                        //错误源头图号分组
+                        Map<String, List<ImportMdfVo>> secListMap = flist.stream().collect(Collectors.groupingBy(s -> s.getErrordesigndtdrawingno()));
+                        secListMap.forEach((sno, slist) -> {
+                            String sectionid = SecurityUtil.getUUID();
+                            //序号分组
+                            Map<ImportMdfVo, List<ImportMdfVo>> mdfVoListMap = slist.stream().collect(Collectors.groupingBy(
+                                    p -> new ImportMdfVo(p.getDtdesigner(), p.getDtwhocollate(), p.getDtwhoapprove(), p.getModifyby(), p.getErrorroutine(), p.getErroragain(), p.getErrorhard(), p.getErrortable())
+                            ));
+                            if (mdfVoListMap.size() > 1) {
+                                allStrBuilder.append("项目工号" + fm.getProjectdlprojid() + "修改单编号" + fm.getSourcenumbercode() + "错误源头图号" + sno + "有" + mdfVoListMap.size() + "行数据重复,请检查");
+                            } else {
+                                //修改图号(任务单部件)分组
+                                Map<String, List<ImportMdfVo>> rowListMap = flist.stream().collect(Collectors.groupingBy(s -> s.getTaskdesigndtdrawingno()));
+                                rowListMap.forEach((rno, rlist) -> {
+                                    //排号分组
+                                    Map<ImportMdfVo, List<ImportMdfVo>> mdfVos = rlist.stream().collect(Collectors.groupingBy(
+                                            m -> new ImportMdfVo(m.getMinordesigndtdrawingno(), m.getMinordesigndtpartname(), m.getContent(), m.getManday(), m.getMater(), m.getEquip(), m.getOther())
+                                    ));
+                                    if (mdfVos.size() > 1) {
+                                        allStrBuilder.append("项目工号" + fm.getProjectdlprojid() + "修改单编号" + fm.getSourcenumbercode() + "错误源头图号" + sno + "修改图号(任务单部件)" + rno + "有" + mdfVos.size() + "行数据重复,请检查");
+                                    } else {
+                                        String rowid = SecurityUtil.getUUID();
+                                        QcsMdfRowDo qcsMdfRowDo = BeanUtil.toBean(rlist.get(0), QcsMdfRowDo.class);
+                                        qcsMdfRowDo.setId(rowid);
+                                        qcsMdfRowDo.setFormid(formid);
+                                        qcsMdfRowDo.setSectionid(sectionid);
+                                        qcsMdfRowDo.setRoption(ropJson);
+                                        qcsMdfRowDoList.add(qcsMdfRowDo);
+
+                                        QcsMdfDetailDo qcsMdfDetailDo = BeanUtil.toBean(rlist.get(0), QcsMdfDetailDo.class);
+                                        qcsMdfDetailDo.setId(SecurityUtil.getUUID());
+                                        qcsMdfDetailDo.setRowid(rowid);
+                                        qcsMdfDetailDo.setFormid(formid);
+                                        qcsMdfDetailDo.setSectionid(sectionid);
+                                        qcsMdfDetailDo.setRoption(ropJson);
+                                        qcsMdfDetailDo.setDeptid(unitId);
+                                        qcsMdfDetailDo.setDeptname(finalDeptName);
+                                        if (rlist.get(0).getProducename().equals("未下料")) {
+                                            qcsMdfDetailDo.setManday(null);
+                                            qcsMdfDetailDo.setMater(null);
+                                            qcsMdfDetailDo.setEquip(null);
+                                            qcsMdfDetailDo.setOther(null);
+                                        } else {
+                                            BigDecimal total = sumTotal(qcsMdfDetailDo);
+                                            qcsMdfDetailDo.setTotalamount(total);
+                                            qcsMdfDetailDo.setActamount(total);
+                                        }
+                                        qcsMdfDetailDoList.add(qcsMdfDetailDo);
+                                    }
+                                });
+                            }
+
+                            if (StringUtils.isBlank(allStrBuilder.toString())) {
+                                QcsMdfSectionDo qcsMdfSectionDo = BeanUtil.toBean(slist.get(0), QcsMdfSectionDo.class);
+                                qcsMdfSectionDo.setId(sectionid);
+                                qcsMdfSectionDo.setFormid(formid);
+                                qcsMdfSectionDo.setRoption(ropJson);
+                                qcsMdfSectionDoList.add(qcsMdfSectionDo);
+                            }
+                        });
+                        if (StringUtils.isBlank(allStrBuilder.toString())) {
+                            QcsMdfFormDo qcsMdfFormDo = BeanUtil.toBean(flist.get(0), QcsMdfFormDo.class);
+                            qcsMdfFormDo.setId(formid);
+                            qcsMdfFormDo.setRoption(ropJson);
+                            qcsMdfFormDo.setBaseid(unitId);
+                            qcsMdfFormDo.setBasename(finalDeptName1);
+                            qcsMdfFormDo.setDatasource("质量成本系统");
+                            qcsMdfFormDoList.add(qcsMdfFormDo);
+                            formids.add(formid);
+                        }
+                    }
+                });
+            } else {
+                return R.error("没有要导入的数据,请确认");
+            }
+        }
+
+        if (StringUtils.isNotBlank(allStrBuilder.toString())) {
+            return R.error(allStrBuilder.toString());
+        } else {
+            Boolean bool1 = qcsMdfFormService.saveBatch(qcsMdfFormDoList);
+            Boolean bool2 = qcsMdfSectionService.saveBatch(qcsMdfSectionDoList);
+            Boolean bool3 = qcsMdfRowService.saveBatch(qcsMdfRowDoList);
+            Boolean bool4 = qcsMdfDetailService.saveBatch(qcsMdfDetailDoList);
+            if (bool1 && bool2 && bool3 && bool4) {
+                for (String fid : formids) {
+                    Map<String, String> aMap = new HashMap<>();
+                    aMap.put("formId", fid);
+                    aMap.put("saveType", "");
+                    aMap.put("deptId", "");
+                    afterSave(aMap);
+                }
+
+                return R.ok();
+            } else {
+                return R.error("数据导入异常");
+            }
+        }
+    }
+
+    public String convertToTwoDecimalPlaces(String input) {
+        try {
+            // 尝试转换为BigDecimal
+            BigDecimal number = new BigDecimal(input.trim());
+            // 设置保留2位小数,使用四舍五入模式
+            number = number.setScale(2, RoundingMode.HALF_UP);
+            return number.toString();
+        } catch (NumberFormatException e) {
+            // 转换失败,返回null或抛出异常,取决于你的需求
+            return "金额要为数字,";
+        }
+    }
+
+    private BigDecimal sumTotal(QcsMdfDetailDo mdfDetailDo) {
+        return (mdfDetailDo.getManday() == null ? BigDecimal.valueOf(0) : mdfDetailDo.getManday()).add((mdfDetailDo.getMater() == null ? BigDecimal.valueOf(0) : mdfDetailDo.getMater())).add((mdfDetailDo.getEquip() == null ? BigDecimal.valueOf(0) : mdfDetailDo.getEquip())).add((mdfDetailDo.getOther() == null ? BigDecimal.valueOf(0) : mdfDetailDo.getOther()));
+    }
 }

+ 4 - 0
qcs-entity/src/main/java/com/rongwei/bsentity/domain/QcsMdfDetailDo.java

@@ -20,6 +20,10 @@ public class QcsMdfDetailDo extends BaseDo implements Serializable {
      * ID
      */
     private String id;
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
     /**
      * 施工方ID
      */

+ 88 - 0
qcs-entity/src/main/java/com/rongwei/bsentity/vo/ImportMdfVo.java

@@ -0,0 +1,88 @@
+package com.rongwei.bsentity.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class ImportMdfVo {
+    private String projectid;//项目id
+    private String projectdlprojid;//项目工号
+    private String projectdlprojname;//项目名称
+    private String sourcename;//修改原因
+    private String numbername;//专业
+    private String sourcenumbercode;//修改单编号
+    private String rectifycode;//整改编号
+    private String manageadminid;//项目总工id
+    private String manageadminnickname;//项目总工
+    private String producename;//项目生产阶段
+
+    private String errordesignid;//设计错误部件id
+    private String errordesigndtdrawingno;//错误源头图号
+    private String errordesigndtpartname;//错误源头图名
+    private String dtdesigneruseradminid;//设计人id
+    private String dtdesigner;//设计人
+    private String dtwhocollateuseradminid;//校对人id
+    private String dtwhocollate;//校对人
+    private String dtwhoapproveuseradminid;//审核人id
+    private String dtwhoapprove;//审核人
+    private String modifyby;//修改责任方
+    private String errorroutine;//常规错误
+    private String erroragain;//二过错误
+    private String errorhard;//较难发现错误
+    private String errortable;//校对表错误   0:未勾选 1: 勾选
+
+    private String taskdesignid;//任务部件 id
+    private String taskdesigndtdrawingno;//修改图号(任务单部件)
+    private String taskdesigndtpartname;//修改图名(任务单部件)
+    private String minordesigndtdrawingno;//修改图号(次级部件)
+    private String minordesigndtpartname;//修改图名(次级部件)
+    private String content;//修改内容
+
+    private BigDecimal manday;//人工
+    private BigDecimal mater;//材料
+    private BigDecimal equip;//设备
+    private BigDecimal other;//其他
+
+    public ImportMdfVo() {
+
+    }
+
+    //修改单分组
+    public ImportMdfVo(String sourcename, String numbername, String rectifycode, String manageadminnickname, String producename) {
+        this.sourcename = sourcename;
+        this.numbername = numbername;
+        this.rectifycode = rectifycode;
+        this.manageadminnickname = manageadminnickname;
+        this.producename = producename;
+    }
+
+    //序号分组
+    public ImportMdfVo(String dtdesigner, String dtwhocollate, String dtwhoapprove, String modifyby, String errorroutine, String erroragain, String errorhard, String errortable) {
+        this.dtdesigner = dtdesigner;
+        this.dtwhocollate = dtwhocollate;
+        this.dtwhoapprove = dtwhoapprove;
+        this.modifyby = modifyby;
+        this.errorroutine = errorroutine;
+        this.erroragain = erroragain;
+        this.errorhard = errorhard;
+        this.errortable = errortable;
+    }
+
+    //排号分组
+    public ImportMdfVo(String minordesigndtdrawingno, String minordesigndtpartname, String content, BigDecimal manday, BigDecimal mater, BigDecimal equip, BigDecimal other) {
+        this.minordesigndtdrawingno = minordesigndtdrawingno;
+        this.minordesigndtpartname = minordesigndtpartname;
+        this.content = content;
+        this.manday = manday;
+        this.mater = mater;
+        this.equip = equip;
+        this.other = other;
+    }
+
+    //项目工号+修改单编号 分组
+    public ImportMdfVo(String projectdlprojid, String sourcenumbercode) {
+        this.projectdlprojid = projectdlprojid;
+        this.sourcenumbercode = sourcenumbercode;
+    }
+}

+ 18 - 4
qcs-server/src/main/java/com/rongwei/controller/QcsMdfFormController.java

@@ -4,10 +4,8 @@ import com.rongwei.bscommon.sys.service.QcsMdfFormService;
 import com.rongwei.rwcommon.base.R;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.Map;
 
@@ -43,4 +41,20 @@ public class QcsMdfFormController {
             return R.error();
         }
     }
+
+    //修改单导入
+    @RequestMapping("/importMdfForm")
+    @ResponseBody
+    public R importMdfForm(@RequestParam MultipartFile file, String unitId) {
+        try {
+            if (file == null) {
+                return R.error("内外部文件解析失败");
+            }
+            return qcsMdfFormService.importMdfForm(file, unitId);
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.info("内外部数据导入异常..." + e.getMessage());
+            return R.error();
+        }
+    }
 }