Min 1 year ago
parent
commit
24a406d712
16 changed files with 1024 additions and 4 deletions
  1. 4 4
      fhKeeper/formulahousekeeper/management-platform-import/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  2. 76 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/PlanController.java
  3. 21 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/PlanDeptController.java
  4. 170 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/Plan.java
  5. 37 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/PlanDept.java
  6. 16 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/mapper/PlanDeptMapper.java
  7. 16 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/mapper/PlanMapper.java
  8. 16 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/PlanDeptService.java
  9. 33 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/PlanService.java
  10. 20 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/PlanDeptServiceImpl.java
  11. 388 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/PlanServiceImpl.java
  12. 16 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/PlanDeptMapper.xml
  13. 37 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/PlanMapper.xml
  14. 23 0
      fhKeeper/formulahousekeeper/timesheet-workshop/src/views/plan/orderInsert.vue
  15. 130 0
      fhKeeper/formulahousekeeper/timesheet-workshop/src/views/plan/today.vue
  16. 21 0
      fhKeeper/formulahousekeeper/timesheet-workshop/src/views/plan/tomorrow.vue

+ 4 - 4
fhKeeper/formulahousekeeper/management-platform-import/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -4046,7 +4046,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                         row.getCell(8).setCellType(CellType.NUMERIC);
                                         if(row.getCell(8).getDateCellValue()!=null){
                                             String format = sdf.format(row.getCell(8).getDateCellValue());
-                                            report.setPlate5(format);
+                                            report.setPlate2(format);
                                         }
                                     }else  report.setPlate2(row.getCell(8).getStringCellValue());
                                 break;
@@ -4056,7 +4056,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                         row.getCell(9).setCellType(CellType.NUMERIC);
                                         if(row.getCell(9).getDateCellValue()!=null){
                                             String format = sdf.format(row.getCell(9).getDateCellValue());
-                                            report.setPlate5(format);
+                                            report.setPlate3(format);
                                         }
                                     }else  report.setPlate3(row.getCell(9).getStringCellValue());
                                 break;
@@ -4066,7 +4066,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                         row.getCell(10).setCellType(CellType.NUMERIC);
                                         if(row.getCell(10).getDateCellValue()!=null){
                                             String format = sdf.format(row.getCell(10).getDateCellValue());
-                                            report.setPlate5(format);
+                                            report.setPlate4(format);
                                         }
                                     }else  report.setPlate4(row.getCell(10).getStringCellValue());
                                 break;
@@ -4076,7 +4076,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                         row.getCell(11).setCellType(CellType.NUMERIC);
                                         if(row.getCell(11).getDateCellValue()!=null){
                                             String format = sdf.format(row.getCell(11).getDateCellValue());
-                                            report.setPlate5(format);
+                                            report.setPlate4(format);
                                         }
                                     }else  report.setPlate5(row.getCell(11).getStringCellValue());
                                 break;

+ 76 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/PlanController.java

@@ -0,0 +1,76 @@
+package com.management.platform.controller;
+
+
+import com.management.platform.entity.Plan;
+import com.management.platform.service.PlanService;
+import com.management.platform.util.HttpRespMsg;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2023-07-24
+ */
+@RestController
+@RequestMapping("/plan")
+public class PlanController {
+
+    @Resource
+    private PlanService planService;
+
+    @RequestMapping("/list")
+    public HttpRespMsg list(String date,String steelStampNumber,@RequestParam(defaultValue = "3") Integer planType,Integer deptId){
+        return planService.getList(date,steelStampNumber,planType,deptId);
+    }
+
+    @RequestMapping("/addOrUpdatePlan")
+    public HttpRespMsg addOrUpdatePlan(@RequestBody Plan plan){
+        return planService.addOrUpdatePlan(plan);
+    }
+
+    @RequestMapping("/planDetail")
+    public HttpRespMsg planDetail(Integer productSchedulingNum,@RequestParam(defaultValue = "0") Integer type){
+        return planService.planDetail(productSchedulingNum,type);
+    }
+
+    @RequestMapping("/allocationPlan")
+    public HttpRespMsg allocationPlan(String ids,Integer planType){
+        return planService.allocationPlan(ids,planType);
+    }
+
+    //设置今明日计划部门
+    @RequestMapping("/deptSet")
+    @Transactional
+    public HttpRespMsg deptSet(String deptIds){
+        return  planService.deptSet(deptIds);
+    }
+
+    @RequestMapping("/deptList")
+    public HttpRespMsg deptList(){
+        return planService.deptList();
+    }
+
+    @RequestMapping("/importData")
+    public HttpRespMsg importData(MultipartFile file,Integer planType){
+        return planService.importData(file,planType);
+    }
+
+    @RequestMapping("/exportData")
+    public HttpRespMsg exportData(String date,Integer planType){
+        return planService.exportData(date,planType);
+    }
+
+}
+

+ 21 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/PlanDeptController.java

@@ -0,0 +1,21 @@
+package com.management.platform.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2023-07-24
+ */
+@RestController
+@RequestMapping("/plan-dept")
+public class PlanDeptController {
+
+}
+

+ 170 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/Plan.java

@@ -0,0 +1,170 @@
+package com.management.platform.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.time.LocalDate;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2023-07-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class Plan extends Model<Plan> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 排产工单号
+     */
+    @TableField("product_scheduling_num")
+    private String productSchedulingNum;
+
+    /**
+     * 产品ID
+     */
+    @TableField("product_id")
+    private Integer productId;
+
+    /**
+     * 产品名称
+     */
+    @TableField("product_name")
+    private String productName;
+
+    /**
+     * 公司ID
+     */
+    @TableField("company_id")
+    private Integer companyId;
+
+    /**
+     * 部门ID
+     */
+    @TableField("dept_id")
+    private Integer deptId;
+
+    /**
+     * 钢印号
+     */
+    @TableField("steel_stamp_number_start")
+    private String steelStampNumberStart;
+
+    /**
+     * 钢印号
+     */
+    @TableField("steel_stamp_number_end")
+    private String steelStampNumberEnd;
+
+    /**
+     * 数量
+     */
+    @TableField("num")
+    private Integer num;
+
+    /**
+     * 主工序
+     */
+    @TableField("main_process")
+    private String mainProcess;
+
+    /**
+     * 工位
+     */
+    @TableField("station_id")
+    private Integer stationId;
+
+    /**
+     * 工位名称
+     */
+    @TableField("station_name")
+    private String stationName;
+
+    /**
+     * 工长
+     */
+    @TableField("foreman_id")
+    private Integer foremanId;
+
+    /**
+     * 计划类型 0-今日计划 1-明日计划 2-插单计划
+     */
+    @TableField("plan_type")
+    private Integer planType;
+
+    /**
+     * 计划日期
+     */
+    @TableField("plan_date")
+    private LocalDate planDate;
+
+    /**
+     * 开工时间
+     */
+    @TableField("start_date")
+    private LocalDate startDate;
+
+    /**
+     * 完工时间
+     */
+    @TableField("end_date")
+    private LocalDate endDate;
+
+    /**
+     * 任务名称
+     */
+    @TableField("task_name")
+    private String taskName;
+
+    /**
+     * 任务类型ID
+     */
+    @TableField("task_type_id")
+    private Integer taskTypeId;
+
+    /**
+     * 任务变更通知号
+     */
+    @TableField("task_change_notice_num")
+    private String taskChangeNoticeNum;
+
+    /**
+     * 计划工时
+     */
+    @TableField("plan_work_hour")
+    private Double planWorkHour;
+
+    /**
+     * 工钱
+     */
+    @TableField("money_of_job")
+    private BigDecimal moneyOfJob;
+
+    /**
+     * 描述
+     */
+    @TableField("desc")
+    private String desc;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 37 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/PlanDept.java

@@ -0,0 +1,37 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2023-07-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class PlanDept extends Model<PlanDept> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableField("company_id")
+    private Integer companyId;
+
+    @TableField("dept_id")
+    private Integer deptId;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return null;
+    }
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/mapper/PlanDeptMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.PlanDept;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2023-07-24
+ */
+public interface PlanDeptMapper extends BaseMapper<PlanDept> {
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/mapper/PlanMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.Plan;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2023-07-24
+ */
+public interface PlanMapper extends BaseMapper<Plan> {
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/PlanDeptService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.PlanDept;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2023-07-24
+ */
+public interface PlanDeptService extends IService<PlanDept> {
+
+}

+ 33 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/PlanService.java

@@ -0,0 +1,33 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.Plan;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2023-07-24
+ */
+public interface PlanService extends IService<Plan> {
+
+    HttpRespMsg getList(String date, String steelStampNumber, Integer planType,Integer deptId);
+
+    HttpRespMsg addOrUpdatePlan(Plan plan);
+
+    HttpRespMsg allocationPlan(String ids,Integer planType);
+
+    HttpRespMsg importData(MultipartFile multipartFile, Integer planType);
+
+    HttpRespMsg exportData(String date, Integer planType);
+
+    HttpRespMsg deptSet(String deptIds);
+
+    HttpRespMsg deptList();
+
+    HttpRespMsg planDetail(Integer productSchedulingNum, Integer type);
+}

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

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.PlanDept;
+import com.management.platform.mapper.PlanDeptMapper;
+import com.management.platform.service.PlanDeptService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2023-07-24
+ */
+@Service
+public class PlanDeptServiceImpl extends ServiceImpl<PlanDeptMapper, PlanDept> implements PlanDeptService {
+
+}

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

@@ -0,0 +1,388 @@
+package com.management.platform.service.impl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.*;
+import com.management.platform.entity.vo.SysRichFunction;
+import com.management.platform.mapper.*;
+import com.management.platform.service.PlanDeptService;
+import com.management.platform.service.PlanService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.service.WxCorpInfoService;
+import com.management.platform.util.ExcelUtil;
+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.bind.annotation.RequestMapping;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.io.*;
+import java.math.BigDecimal;
+import java.sql.Wrapper;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2023-07-24
+ */
+@Service
+public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements PlanService {
+
+    @Resource
+    private PlanMapper planMapper;
+    @Resource
+    private WxCorpInfoService wxCorpInfoService;
+    @Resource
+    private HttpServletRequest request;
+    @Resource
+    private UserMapper userMapper;
+    @Resource
+    private PlanDeptMapper planDeptMapper;
+    @Resource
+    private PlanDeptService planDeptService;
+    @Resource
+    private DepartmentMapper departmentMapper;
+    @Resource
+    private ProdMaterialMapper prodMaterialMapper;
+    @Resource
+    private ProdProcedureMapper prodProcedureMapper;
+    @Resource
+    private ProductMapper productMapper;
+
+    @Override
+    public HttpRespMsg getList(String date, String steelStampNumber, Integer planType,Integer deptId) {
+        HttpRespMsg msg=new HttpRespMsg();
+        QueryWrapper<Plan> queryWrapper=new QueryWrapper();
+        DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        queryWrapper.eq("plan_type",planType);
+        if(planType!=2){
+            queryWrapper.eq("dept_id",deptId);
+        }
+        if(date!=null){
+            queryWrapper.eq("plan_date",LocalDate.parse(date,df));
+        }else {
+            queryWrapper.eq("plan_date",planType==0?LocalDate.now():LocalDate.now().plusDays(1));
+        }
+        if(!StringUtils.isEmpty(steelStampNumber)){
+            queryWrapper.gt("steel_stamp_number_start",steelStampNumber);
+            queryWrapper.lt("steel_stamp_number_end",steelStampNumber);
+        }
+        List<Plan> planList = planMapper.selectList(queryWrapper);
+        msg.setData(planList);
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg addOrUpdatePlan(Plan plan) {
+        HttpRespMsg msg=new HttpRespMsg();
+        if(plan.getId()==null){
+            if(count(new QueryWrapper<Plan>().eq("product_scheduling_num",plan.getProductSchedulingNum()))>0){
+                msg.setError("当前排产工单号已存在");
+                return msg;
+            }
+            switch (plan.getPlanType()){
+                case 0:
+                    plan.setPlanDate(LocalDate.now());
+                    break;
+                case 1:
+                    plan.setPlanDate(LocalDate.now().plusDays(1));
+                    break;
+            }
+            if(planMapper.insert(plan)<0){
+                msg.setError("验证失败");
+                return msg;
+            }
+        }else {
+            if(planMapper.updateById(plan)<0){
+                msg.setError("验证失败");
+                return msg;
+            }
+        }
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg allocationPlan(String ids,Integer planType) {
+        HttpRespMsg msg=new HttpRespMsg();
+        List<String> idList = Arrays.asList(ids.split(","));
+        List<Plan> planList = planMapper.selectBatchIds(idList);
+        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        List<WxCorpInfo> wxCorpInfoList = wxCorpInfoService.list(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
+        if(wxCorpInfoList.size()>0){
+            WxCorpInfo wxCorpInfo = wxCorpInfoList.get(0);
+            List<Integer> foremanIds = planList.stream().map(Plan::getForemanId).distinct().collect(Collectors.toList());
+            List<User> userList = userMapper.selectBatchIds(foremanIds);
+            for (Plan plan : planList) {
+                Optional<User> first = userList.stream().filter(ul -> ul.getId().equals(plan.getForemanId())).findFirst();
+                if(first.isPresent()){
+                    //推送到企业微信
+                    JSONObject json=new JSONObject();
+                    JSONArray dataJson=new JSONArray();
+                    JSONObject jsonObj=new JSONObject();
+                    jsonObj.put("key",planType==0?"今日计划":planType==1?"明日计划":"插单计划");
+                    jsonObj.put("value",planType==2?"任务名称"+plan.getTaskName()+"\n"+"任务变更通知号"+plan.getTaskChangeNoticeNum():"产品名称"+plan.getProductName()+"\n"+"排产工单号"+plan.getProductSchedulingNum());
+                    dataJson.add(jsonObj);
+                    //todo:配置消息模板以及推送后入口
+                    json.put("template_id","tty9TkCAAALUiWvjdoDg_PZf48gwucZA");
+                    json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://worktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=expense#wechat_redirect");
+                    json.put("content_item",dataJson);
+                    wxCorpInfoService.sendWXCorpTemplateMsg(wxCorpInfo,first.get().getCorpwxUserid(), json);
+                }else msg.setError("验证失败");
+            }
+        }
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg importData(MultipartFile multipartFile, Integer planType) {
+        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();
+            List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
+            List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+            List<Product> productList = productMapper.selectList(new QueryWrapper<Product>().eq("company_id", companyId));
+            List<Plan> needInsertList=new ArrayList<>();
+            for (int rowIndex = 1; rowIndex <= rowNum; rowIndex++) {
+                XSSFRow row = sheet.getRow(rowIndex);
+                if (row == null) {
+                    continue;
+                }
+                //跳过空行
+                if (ExcelUtil.isRowEmpty(row)) {
+                    continue;
+                }
+                //部门 排产工单号 产品名称 钢印号 数量 主工序 工位 开工时间 完工时间 描述
+                XSSFCell deptCell = row.getCell(0);
+                XSSFCell productSchedulingNumCell = row.getCell(1);
+                XSSFCell productNameCell = row.getCell(2);
+                XSSFCell steelStampNumberCell = row.getCell(3);
+                XSSFCell numCell = row.getCell(4);
+                XSSFCell mainProcessCell = row.getCell(5);
+                XSSFCell stationNameCell = row.getCell(6);
+                XSSFCell startDateCell = row.getCell(7);
+                XSSFCell endDateCell = row.getCell(8);
+                XSSFCell descCell = row.getCell(9);
+
+                if (deptCell != null) deptCell.setCellType(CellType.STRING);
+                if (productSchedulingNumCell != null) productSchedulingNumCell.setCellType(CellType.NUMERIC);
+                if (productNameCell != null) productNameCell.setCellType(CellType.STRING);
+                if (steelStampNumberCell != null) steelStampNumberCell.setCellType(CellType.STRING);
+                if (numCell != null) numCell.setCellType(CellType.NUMERIC);
+                if (mainProcessCell != null) mainProcessCell.setCellType(CellType.STRING);
+                if (stationNameCell != null) stationNameCell.setCellType(CellType.STRING);
+                if (startDateCell != null) startDateCell.setCellType(CellType.NUMERIC);
+                if (endDateCell != null) endDateCell.setCellType(CellType.NUMERIC);
+                if (descCell != null) descCell.setCellType(CellType.STRING);
+                Plan plan=new Plan();
+                plan.setPlanDate(planType==0?LocalDate.now():LocalDate.now().plusDays(1));
+                if(deptCell!=null){
+                    Optional<Department> first = departmentList.stream().filter(dl -> dl.getDepartmentName().equals(deptCell.getStringCellValue())).findFirst();
+                    if(first.isPresent()){
+                        plan.setDeptId(first.get().getDepartmentId());
+                    }else {
+                        msg.setError("部门["+deptCell.getStringCellValue()+"]不存在");
+                        return msg;
+                    }
+                }else {
+                    msg.setError("部门不能为空");
+                    return msg;
+                }
+                if(productSchedulingNumCell!=null){
+                    if(count(new QueryWrapper<Plan>().eq("product_scheduling_num",productSchedulingNumCell.getStringCellValue()))>0){
+                        msg.setError("已存在的排产工单号"+productSchedulingNumCell.getStringCellValue());
+                        return msg;
+                    }
+                    plan.setProductSchedulingNum(productSchedulingNumCell.getStringCellValue());
+                }
+                if(productNameCell!=null){
+                    Optional<Product> first = productList.stream().filter(pl -> pl.getName().equals(productNameCell.getStringCellValue())).findFirst();
+                    if(first.isPresent()){
+                        plan.setProductId(first.get().getId());
+                        plan.setProductName(first.get().getName());
+                    }else {
+                        msg.setError("产品["+productNameCell.getStringCellValue()+"]不存在");
+                        return msg;
+                    }
+                }
+                if(steelStampNumberCell!=null){
+                    String value = steelStampNumberCell.getStringCellValue();
+                    String[] split = value.split("-");
+                    if(split.length>1){
+                        plan.setSteelStampNumberStart(split[0]);
+                        plan.setSteelStampNumberEnd(split[1]);
+                    }
+                }
+                plan.setNum(numCell==null?0:Integer.valueOf(String.valueOf(numCell.getNumericCellValue())));
+                plan.setMainProcess(mainProcessCell==null?"":mainProcessCell.getStringCellValue());
+                if(stationNameCell!=null){
+                    Optional<Department> first = departmentList.stream().filter(dl -> dl.getDepartmentName().equals(stationNameCell.getStringCellValue())).findFirst();
+                    if(first.isPresent()){
+                        if(!first.get().getSuperiorId().equals(plan.getDeptId())){
+                            msg.setError("工位["+stationNameCell.getStringCellValue()+"]不属于部门["+deptCell.getStringCellValue()+"]");
+                            return msg;
+                        }
+                        plan.setStationId(first.get().getDepartmentId());
+                        plan.setStationName(first.get().getDepartmentName());
+                    }else {
+                        msg.setError("工位["+stationNameCell.getStringCellValue()+"]不存在");
+                        return msg;
+                    }
+                }
+                if(startDateCell!=null){
+                    plan.setStartDate(LocalDate.parse(startDateCell.getDateCellValue().toString(),df));
+                }
+                if(endDateCell!=null){
+                    plan.setEndDate(LocalDate.parse(endDateCell.getDateCellValue().toString(),df));
+                }
+                plan.setDesc(descCell==null?"":descCell.getStringCellValue());
+            }
+
+        } 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;
+    }
+
+    @Override
+    public HttpRespMsg exportData(String date, Integer planType) {
+        return null;
+    }
+
+    @Override
+    public HttpRespMsg deptList() {
+        HttpRespMsg msg=new HttpRespMsg();
+        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        List<PlanDept> planDeptList = planDeptService.list(new QueryWrapper<PlanDept>().eq("company_id", companyId));
+        List<Integer> deptIds = planDeptList.stream().map(PlanDept::getDeptId).distinct().collect(Collectors.toList());
+        deptIds.add(-1);
+        List<Department> departmentList = departmentMapper.selectBatchIds(deptIds);
+        msg.setData(departmentList);
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg planDetail(Integer productSchedulingNum, Integer type) {
+        HttpRespMsg msg=new HttpRespMsg();
+        Plan plan = planMapper.selectOne(new QueryWrapper<Plan>().eq("product_scheduling_num", productSchedulingNum));
+        if(plan!=null){
+            switch (type){
+                case 0:
+                    List<ProdProcedure> prodProcedureList = prodProcedureMapper.selectList(new QueryWrapper<ProdProcedure>().eq("product_id", plan.getProductId()));
+                    msg.setData(prodProcedureList);
+                    break;
+                case 1:
+                    List<ProdMaterial> prodMaterialList = prodMaterialMapper.selectList(new QueryWrapper<ProdMaterial>().eq("product_id", plan.getProductId()));
+                    msg.setData(prodMaterialList);
+                    break;
+            }
+        }
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg deptSet(String deptIds) {
+        HttpRespMsg msg=new HttpRespMsg();
+        List<String> deptIdList = Arrays.asList(deptIds.split(","));
+        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        //已经保存了的部门设置 删除之前 部门下不存在计划数据的部门
+        List<PlanDept> allPlanDept = planDeptMapper.selectList(new QueryWrapper<PlanDept>().eq("company_id", companyId));
+        if(allPlanDept.size()>0){
+            List<Integer> allDeptIds = allPlanDept.stream().map(PlanDept::getDeptId).distinct().collect(Collectors.toList());
+            for (Integer allDeptId : allDeptIds) {
+                if(planMapper.selectCount(new QueryWrapper<Plan>().eq("dept_id",allDeptId))<=0){
+                    Map map=new HashMap();
+                    map.put("company_id",companyId);
+                    map.put("dept_id",allDeptId);
+                    planDeptMapper.deleteByMap(map);
+                }
+            }
+        }
+        List<PlanDept> afterRemoveDept = planDeptMapper.selectList(new QueryWrapper<PlanDept>().eq("company_id", companyId));
+        List<PlanDept> planDeptList=new ArrayList<>();
+        deptIdList.forEach(dl->{
+            PlanDept planDept=new PlanDept();
+            planDept.setCompanyId(companyId);
+            planDept.setDeptId(Integer.valueOf(dl));
+            if(!afterRemoveDept.contains(planDept)){
+                planDeptList.add(planDept);
+            }
+        });
+        if(!planDeptService.saveBatch(planDeptList)){
+            msg.setError("验证失败");
+        }
+        return msg;
+    }
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/PlanDeptMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.PlanDeptMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.PlanDept">
+        <result column="company_id" property="companyId" />
+        <result column="dept_id" property="deptId" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        company_id, dept_id
+    </sql>
+
+</mapper>

+ 37 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/PlanMapper.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.PlanMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.Plan">
+        <id column="id" property="id" />
+        <result column="product_scheduling_num" property="productSchedulingNum" />
+        <result column="product_id" property="productId" />
+        <result column="product_name" property="productName" />
+        <result column="company_id" property="companyId" />
+        <result column="dept_id" property="deptId" />
+        <result column="steel_stamp_number_start" property="steelStampNumberStart" />
+        <result column="steel_stamp_number_end" property="steelStampNumberEnd" />
+        <result column="num" property="num" />
+        <result column="main_process" property="mainProcess" />
+        <result column="station_id" property="stationId" />
+        <result column="station_name" property="stationName" />
+        <result column="foreman_id" property="foremanId" />
+        <result column="plan_type" property="planType" />
+        <result column="plan_date" property="planDate" />
+        <result column="start_date" property="startDate" />
+        <result column="end_date" property="endDate" />
+        <result column="task_name" property="taskName" />
+        <result column="task_type_id" property="taskTypeId" />
+        <result column="task_change_notice_num" property="taskChangeNoticeNum" />
+        <result column="plan_work_hour" property="planWorkHour" />
+        <result column="money_of_job" property="moneyOfJob" />
+        <result column="desc" property="desc" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, product_scheduling_num, product_id, product_name, company_id, dept_id, steel_stamp_number_start, steel_stamp_number_end, num, main_process, station_id, station_name, foreman_id, plan_type, plan_date, start_date, end_date, task_name, task_type_id, task_change_notice_num, plan_work_hour, money_of_job, desc
+    </sql>
+
+</mapper>

+ 23 - 0
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/plan/orderInsert.vue

@@ -0,0 +1,23 @@
+<template>
+<div class='layout-container'>
+
+</div>
+</template>
+
+<script>
+export default {
+name: '',
+components: {},
+props: { },
+data() { 
+return {}
+},
+computed: {},
+watch: {},
+created () {},
+mounted () {},
+methods: {},
+}
+</script>
+<style scoped lang='scss'>
+</style>

+ 130 - 0
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/plan/today.vue

@@ -0,0 +1,130 @@
+<template>
+  <div class="layout-container">
+    <div class="OutSide">
+        <div>今日计划</div>
+        <div>{{today()}}</div>
+        <div class="block">
+        <span class="demonstration">查询以往今日计划</span>
+        <el-date-picker
+        v-model="planDate"
+        type="date"
+        placeholder="选择日期">
+        </el-date-picker>
+        </div>
+        <div class="OutSide">
+            <span style="width:100px">{{'钢印号'}}</span><el-input v-model="steelStampNumber" placeholder="请输入内容"></el-input>
+        </div>
+        <div>
+            <span>
+                <el-link type="primary" :underline="false" @click="deptSetDialog=true">{{'部门设置'}}</el-link>
+                <el-link type="primary" :underline="false">{{'新增今日计划'}}</el-link>
+                <el-link type="primary" :underline="false">{{'导入'}}</el-link>
+                <el-link type="primary" :underline="false">{{'导出'}}</el-link>
+            </span>
+        </div>
+    </div>
+    <!-- 部门设置弹框 -->
+    <el-dialog
+      title="部门设置"
+      :visible.sync="deptSetDialog"
+      width="30%"
+      :before-close="handleClose">
+      <div>
+        <el-cascader
+        v-model="departmentIdArray"
+        :options="departmentList"
+        :props="props"
+        collapse-tags
+        clearable>
+        </el-cascader>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="deptSetDialog = false">取 消</el-button>
+        <el-button type="primary" @click="deptSet()">确 定</el-button>
+      </span>
+  </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "",
+  components: {
+    
+  },
+  props: {
+
+  },
+  data() {
+    return {
+        steelStampNumber:'',
+        planDate:'',
+        deptSetDialog:false,
+        departmentList:[],
+        departmentIdArray: [],
+    };
+  },
+  computed: {},
+  watch: {},
+  created() {},
+  mounted() {
+    this.getDepartmentList()
+  },
+  methods: {
+    today(){
+        let date=new Date();
+        let year=date.getFullYear();
+        let month=(date.getMonth()+1+'').padStart(2,'0');
+        let day=(date.getDate()+'').padStart(2,'0');
+        return `${year}-${month}-${day}`
+    },
+    getDepartmentList() {
+      this.http.post( this.port.manage.depList, {},
+        res => {
+          if (res.code == "ok") {
+            let dptlist = JSON.parse(JSON.stringify(res.data));
+            this.departmentList = this.changeArr(dptlist);
+          } else {
+            this.$message({
+              message: res.msg,
+              type: "error"
+            });
+          }
+        },error => {
+          this.$message({
+            message: error,
+            type: "error"
+          });
+        });
+    },
+    changeArr(arr) {
+        for (var i = 0; i < arr.length; i++) {
+            if(arr[i].id != -1 && arr[i].id != 0) {
+                if (arr[i].children != null && arr[i].children.length>0) {
+                    arr[i].children = this.changeArr(arr[i].children);
+                }
+                arr[i].id && (arr[i].value = arr[i].id);
+                delete arr[i].id;
+            }
+        }
+        for(var i in arr) {
+            if(arr[i].id == -1 || arr[i].id == 0) {
+                arr.splice(i,1)
+            }    
+        }
+        return arr;
+    },
+    deptSet(){
+      console.log(this.departmentIdArray)
+    }
+  },
+};
+</script>
+<style scoped lang='scss'>
+ .layout-container{
+    .OutSide{
+        display: flex;
+        align-items: center;
+    }
+ }
+</style>

+ 21 - 0
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/plan/tomorrow.vue

@@ -0,0 +1,21 @@
+<template>
+  <div class="layout-container"></div>
+</template>
+
+<script>
+export default {
+  name: "",
+  components: {},
+  props: {},
+  data() {
+    return {};
+  },
+  computed: {},
+  watch: {},
+  created() {},
+  mounted() {},
+  methods: {},
+};
+</script>
+<style scoped lang='sass'>
+</style>