zx 1 سال پیش
والد
کامیت
52bdf88e0b

+ 2 - 18
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/ProdProcedureController.java

@@ -34,28 +34,12 @@ public class ProdProcedureController {
     private ProdProcedureService prodProcedureService;
 
     /**
-     * 获取产品的id工序列表
+     * 根据产品的id获取最新版本的工序列表
      */
     @RequestMapping("/getProdProcedureList")
     public HttpRespMsg getProdProcedureList (@RequestParam Integer productId){
-        HttpRespMsg httpRespMsg=new HttpRespMsg();
-        HashMap<String,Object> map=new HashMap<>();
-
-        List<String> versionList= (List<String>) prodProcedureService.getVersion(request,productId).getData();
-        List<ProdProcedure> prodProcedureList=new ArrayList<>();
-        if(versionList!=null&&versionList.size()>0){
-            HttpRespMsg info = prodProcedureService.getInfo(request, versionList.get(versionList.size() - 1), productId);
-            prodProcedureList= (List<ProdProcedure>) info.data;
-            map.put("version",versionList.get(versionList.size() - 1));
-        }else{
-            map.put("version","");
-        }
 
-
-        map.put("prodProcedureList",prodProcedureList);
-
-        httpRespMsg.data=map;
-        return httpRespMsg;
+      return prodProcedureService.getLastProcedureList(request,productId);
     }
 
     /**

+ 16 - 5
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/ProductController.java

@@ -1,8 +1,6 @@
 package com.management.platform.controller;
 
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.management.platform.entity.Plan;
 import com.management.platform.entity.Product;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.PlanService;
@@ -65,7 +63,7 @@ public class ProductController {
      * 查询产品详情
      * @param id
      * @return
-     * Todo
+     *
      */
     @RequestMapping("getInfo")
     public HttpRespMsg getInfo(Integer id){
@@ -78,8 +76,21 @@ public class ProductController {
      * @return
      */
     @RequestMapping("/importData")
-    public HttpRespMsg importData(MultipartFile file){
-        return null;
+    public HttpRespMsg importData(MultipartFile file,Integer categoryId){
+        return productService.importData(file,categoryId,request);
     }
+
+
+
+ /*   *//**
+     * todo
+     * @param date
+     * @param planType
+     * @return
+     *//*
+    @RequestMapping("/exportData")
+    public HttpRespMsg exportData(String date,Integer planType){
+        return productService.exportData(date,planType);
+    }*/
 }
 

+ 56 - 8
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/PlanMaterial.java

@@ -1,5 +1,6 @@
 package com.management.platform.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableField;
@@ -22,12 +23,14 @@ import lombok.experimental.Accessors;
 public class PlanMaterial extends Model<PlanMaterial> {
 
     private static final long serialVersionUID=1L;
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
 
     @TableId("plan_id")
     private Integer planId;
 
-    @TableField("prod_material_id")
-    private Integer prodMaterialId;
+    /*@TableField("prod_material_id")
+    private Integer prodMaterialId;*/
 
     /**
      * 是否清点(0:待清点,1:已清点)
@@ -36,27 +39,72 @@ public class PlanMaterial extends Model<PlanMaterial> {
     private Boolean isChecked;
 
     /**
-     * 数量(个/产品):产品数量*产品物料单中数量
+     * 派工单的物料数量(个/产品)
+     */
+    @TableField("pnumber_product")
+    private Integer pnumberProduct;
+
+    /**
+     * 派工单的物料数量(个/辆)
+     */
+    @TableField("pnumber_vehicle")
+    private Integer pnumberVehicle;
+
+
+    /**
+     * 缺少数量
+     */
+    @TableField("lack_number")
+    private Integer lackNumber;
+
+    /**
+     * 公司编码
+     */
+    @TableField("company_code")
+    private String companyCode;
+
+    /**
+     * 公司图号
+     */
+    @TableField("company_drawing_no")
+    private String companyDrawingNo;
+
+    /**
+     * 材质
+     */
+    @TableField("material_quality")
+    private String materialQuality;
+
+    /**
+     * 厚度
+     */
+    @TableField("thickness")
+    private Double thickness;
+
+    /**
+     * 数量(个/产品)
      */
     @TableField("number_product")
     private Integer numberProduct;
 
     /**
-     * 数量(个/辆):产品数量*产品物料单中数量
+     * 数量(个/辆)
      */
     @TableField("number_vehicle")
     private Integer numberVehicle;
 
     /**
-     * 缺少数量
+     * 版本号
      */
-    @TableField("lack_number")
-    private Integer lackNumber;
+    @TableField("version_number")
+    private String versionNumber;
+
 
     @TableField(exist = false)
     private ProdMaterial prodMaterial;
 
-
+    @TableField("material_id")
+    private Integer prodMaterialId;
     @Override
     protected Serializable pkVal() {
         return this.planId;

+ 2 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/ProdProcedureService.java

@@ -25,4 +25,6 @@ public interface ProdProcedureService extends IService<ProdProcedure> {
     HttpRespMsg getVersion(HttpServletRequest request, Integer productId);
 
     HttpRespMsg getInfo(HttpServletRequest request, String version, Integer productId);
+
+    HttpRespMsg getLastProcedureList(HttpServletRequest request, Integer productId);
 }

+ 3 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/ProductService.java

@@ -3,6 +3,7 @@ package com.management.platform.service;
 import com.management.platform.entity.Product;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -23,4 +24,6 @@ public interface ProductService extends IService<Product> {
     HttpRespMsg getProductInfo(HttpServletRequest request, Integer id);
 
     HttpRespMsg delete(Integer id);
+
+    HttpRespMsg importData(MultipartFile file, Integer categoryId, HttpServletRequest request);
 }

+ 16 - 6
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ProdCategoryServiceImpl.java

@@ -10,6 +10,7 @@ import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.ProdCategoryService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.util.HttpRespMsg;
+import io.micrometer.core.instrument.util.StringUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -34,17 +35,26 @@ public class ProdCategoryServiceImpl extends ServiceImpl<ProdCategoryMapper, Pro
 
     @Override
     public HttpRespMsg saveOrUpdateInfo(ProdCategory prodCategory, HttpServletRequest request) {
+        HttpRespMsg msg = new HttpRespMsg();
+
         String token = request.getHeader("Token");
         User user = userMapper.selectById(token);
         prodCategory.setCompanyId(user.getCompanyId());
-        if(prodCategory.getId()==null){
-            prodCategoryMapper.insert(prodCategory);
+
+        Integer count = prodCategoryMapper.selectCount(new LambdaQueryWrapper<ProdCategory>().eq(StringUtils.isNotBlank(prodCategory.getName()), ProdCategory::getName, prodCategory.getName()));
+
+        if(count==0){
+            if(prodCategory.getId()==null){
+                prodCategoryMapper.insert(prodCategory);
+            }else{
+                prodCategoryMapper.updateById(prodCategory);
+            }
+
+            msg.setData(prodCategory);
         }else{
-            prodCategoryMapper.updateById(prodCategory);
+          msg.setError("name is repeat !");
         }
-        HttpRespMsg msg = new HttpRespMsg();
-        System.out.println(prodCategory);
-        msg.setData(prodCategory);
+
         return msg;
     }
 

+ 30 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ProdProcedureServiceImpl.java

@@ -14,6 +14,8 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -141,4 +143,32 @@ public class ProdProcedureServiceImpl extends ServiceImpl<ProdProcedureMapper, P
         httpRespMsg.data=prodProcedureList;
         return httpRespMsg;
     }
+
+    /**
+     * 获取产品最新的工序列表
+     * @param request
+     * @param productId
+     * @return
+     */
+    @Override
+    public HttpRespMsg getLastProcedureList(HttpServletRequest request, Integer productId) {
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        HashMap<String,Object> map=new HashMap<>();
+
+
+        List<String> versionList= (List<String>)getVersion(request,productId).getData();
+        List<ProdProcedure> prodProcedureList=new ArrayList<>();
+        if(versionList!=null&&versionList.size()>0){
+            HttpRespMsg info = getInfo(request, versionList.get(versionList.size() - 1), productId);
+            prodProcedureList= (List<ProdProcedure>) info.data;
+            map.put("version",versionList.get(versionList.size() - 1));
+        }else{
+            map.put("version","");
+        }
+
+        map.put("prodProcedureList",prodProcedureList);
+
+        httpRespMsg.data=map;
+        return httpRespMsg;
+    }
 }

+ 218 - 2
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ProductServiceImpl.java

@@ -11,12 +11,23 @@ import com.management.platform.service.ProdProcedureService;
 import com.management.platform.service.ProductService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.util.HttpRespMsg;
+import com.management.platform.util.MessageUtils;
+import org.apache.poi.EncryptedDocumentException;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.xssf.usermodel.XSSFCell;
+import org.apache.poi.xssf.usermodel.XSSFRow;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.io.*;
+import java.time.format.DateTimeFormatter;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -46,6 +57,8 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
     ProdMaterialService prodMaterialService;
     @Resource
     PlanMapper planMapper;
+    @Resource
+    ProdCategoryMapper prodCategoryMapper;
 
 
     @Override
@@ -123,12 +136,12 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
     @Override
     public HttpRespMsg delete(Integer id) {
         HttpRespMsg msg = new HttpRespMsg();
-        //TODO : 需检测是否被使用
+
         int count = planMapper.selectCount(
                 new LambdaQueryWrapper<Plan>()
                         .eq(id != null, Plan::getProductId, id)
         );
-        System.out.println(count);
+
         if(count==0){
 
             prodProcedureMapper.delete(new LambdaQueryWrapper<ProdProcedure>().eq(id!=null,ProdProcedure::getProductId,id));
@@ -140,5 +153,208 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
         }
 
         return msg;
+    }
+
+    /**
+     * todo  待定
+     * @param multipartFile
+     * @param categoryId
+     * @param request
+     * @return
+     */
+    @Override
+    public HttpRespMsg importData(MultipartFile multipartFile, Integer categoryId, HttpServletRequest request) {
+        HttpRespMsg msg=new HttpRespMsg();
+        DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        String fileName = multipartFile.getOriginalFilename();
+        File file = new File(fileName == null ? "file" : fileName);
+        InputStream inputStream = null;
+        OutputStream outputStream = null;
+
+
+        try {
+            inputStream= multipartFile.getInputStream();
+            outputStream=new FileOutputStream(file);
+
+            byte[] buffer = new byte[4096];
+            int temp = 0;
+            while ((temp = inputStream.read(buffer, 0, 4096)) != -1) {
+                outputStream.write(buffer, 0, temp);
+            }
+            inputStream.close();
+            outputStream.close();
+            //然后解析表格
+            XSSFWorkbook workbook = new XSSFWorkbook(file);
+            //我们只需要第一个sheet
+            XSSFSheet sheet = workbook.getSheetAt(0);
+            int rowNum = sheet.getLastRowNum();
+
+            //获取相关数据
+            Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+            for(int rowIndex=1;rowIndex<=rowNum;rowIndex++){
+                XSSFRow row = sheet.getRow(rowIndex);
+                //跳过空行
+                if(row==null){
+                    continue;
+                }
+                if(rowIndex==1){
+                    //产品基本信息
+                    XSSFCell nameCell = row.getCell(0);
+                    XSSFCell codeCell = row.getCell(1);
+                    XSSFCell orderNumberCell = row.getCell(2);
+                    XSSFCell unitCell = row.getCell(3);
+                    XSSFCell groupNumberCell = row.getCell(4);
+                    XSSFCell columnNumberCell = row.getCell(5);
+                    XSSFCell vehicleNumberCell = row.getCell(6);
+                    XSSFCell descriptionCell = row.getCell(7);
+                    XSSFCell categoryNameCell = row.getCell(8);
+                    if(nameCell!=null){
+                        nameCell.setCellType(CellType.STRING);
+                    }
+                    if(codeCell!=null){
+                        codeCell.setCellType(CellType.STRING);
+                    }
+                    if(orderNumberCell!=null){
+                        orderNumberCell.setCellType(CellType.NUMERIC);
+                    }
+                    if(unitCell!=null){
+                        unitCell.setCellType(CellType.STRING);
+                    }
+                    if(groupNumberCell!=null){
+                        groupNumberCell.setCellType(CellType.NUMERIC);
+                    }
+                    if(columnNumberCell!=null){
+                        columnNumberCell.setCellType(CellType.NUMERIC);
+                    }
+                    if(vehicleNumberCell!=null){
+                        vehicleNumberCell.setCellType(CellType.NUMERIC);
+                    }
+                    if(descriptionCell!=null){
+                        descriptionCell.setCellType(CellType.STRING);
+                    }
+                    if(categoryNameCell!=null){
+                        categoryNameCell.setCellType(CellType.STRING);
+                    }
+
+                    Product product=new Product();
+                    product.setCompanyId(companyId);
+                    if(nameCell!=null){
+                        product.setName(nameCell.getStringCellValue());
+                    }else{
+                        msg.setError("产品名称不能为空");
+                        return msg;
+                    }
+                    if(codeCell!=null){
+                       product.setCode(codeCell.getStringCellValue());
+                    }else{
+                        msg.setError("项目代码不能为空");
+                        return msg;
+                    }
+                    if(orderNumberCell!=null){
+                        product.setOrderNumber(Integer.valueOf(String.valueOf(orderNumberCell.getNumericCellValue())));
+
+                    }else{
+                        msg.setError("订单数量不能为空");
+                        return msg;
+                    }
+                    if(unitCell!=null){
+                        product.setUnit(unitCell.getStringCellValue());
+
+                    }else{
+                        msg.setError("单位不能为空");
+                        return msg;
+                    }
+                    if(groupNumberCell!=null){
+                        product.setGroupNumber(Integer.valueOf(String.valueOf(groupNumberCell.getStringCellValue())));
+                    }else{
+                        msg.setError("编组不能为空");
+                        return msg;
+                    }
+                    if(columnNumberCell!=null){
+                        product.setColumnNumber(Integer.valueOf(String.valueOf(columnNumberCell.getStringCellValue())));
+                    }
+                    if(vehicleNumberCell!=null){
+                        product.setVehicleNumber(Integer.valueOf(String.valueOf(vehicleNumberCell.getStringCellValue())));
+
+                    }
+                    if(descriptionCell!=null){
+                        product.setDescription(descriptionCell.getStringCellValue());
+                        descriptionCell.setCellType(CellType.STRING);
+                    }
+                    if(categoryNameCell!=null){
+
+                        ProdCategory category = prodCategoryMapper.selectOne(new QueryWrapper<ProdCategory>().eq("name", categoryNameCell.getStringCellValue()));
+                        if(category==null){
+                            msg.setError("该分类不存在");
+                            return msg;
+                        }
+                        product.setCategoryName(category.getName());
+                        product.setCategoryId(category.getId());
+                    }else{
+                        msg.setError("分类名称不能为空");
+                        return msg;
+                    }
+                    rowIndex+=3;
+                }else{
+                    //工序和物料信息
+                    XSSFCell versionNumberPCell = row.getCell(0);
+                    XSSFCell namePCell = row.getCell(1);
+                    XSSFCell workingTimeCell = row.getCell(2);
+                    XSSFCell unitPriceCell = row.getCell(3);
+                    XSSFCell checkTypeCell = row.getCell(4);
+                    XSSFCell columnNumberCell = row.getCell(5);
+                    XSSFCell versionNumberMCell = row.getCell(6);
+                    XSSFCell nameMCell = row.getCell(7);
+                    XSSFCell companyCodeCell = row.getCell(8);
+                    XSSFCell materialQualityCell = row.getCell(9);
+                    XSSFCell thicknessCell = row.getCell(10);
+                    XSSFCell numberProductCell = row.getCell(11);
+                    XSSFCell numberVehicleCell = row.getCell(11);
+
+
+                }
+            }
+
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (NullPointerException e) {
+            e.printStackTrace();
+            //msg.setError("数据格式有误或存在空数据 导入失败");
+            msg.setError(MessageUtils.message("file.dataFormatError"));
+            return msg;
+        } catch (InvalidFormatException e) {
+            e.printStackTrace();
+            //msg.setError("文件格式错误,如果安装了加密软件需要先解密再上传");
+            msg.setError(MessageUtils.message("file.FormatErrorAndDecrypt"));
+        } catch (EncryptedDocumentException e) {
+            e.printStackTrace();
+            //msg.setError("文件加密状态,需要先解除加密状态再上传");
+            msg.setError(MessageUtils.message("file.encryption"));
+            return msg;
+        } catch (Exception e) {
+            e.printStackTrace();
+            //msg.setError("上传失败:" + e.getMessage());
+            msg.setError(MessageUtils.message("file.uploadError",e.getMessage()));
+            return msg;
+        } finally {
+            //关闭流
+            try {
+                if (outputStream != null && inputStream != null) {
+                    outputStream.close();
+                    inputStream.close();
+                    System.out.println("流已关闭");
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+//            file.deleteOnExit();//程序退出时删除临时文件
+            System.out.println(file.delete());
+        }
+        return null;
+
+
+
+
     }
 }

+ 7 - 0
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/product/list.vue

@@ -417,6 +417,7 @@
                 <el-button type="primary" @click="isganttshowCa = true; title ='新增'">新增</el-button>
             </span>
         </el-dialog>
+
          <el-dialog
             :title="title"
             :visible.sync="isganttshowCa"
@@ -955,6 +956,12 @@ a {
                         this.isganttshowCa = false
                         this.getCategoryList()
                         this.category={}
+                    }else{
+                         this.$message({
+                            showClose: true,
+                            message: '该分类已处在',
+                            type: 'warning'
+                        });
                     }