فهرست منبع

Merge branch 'master' of http://47.100.37.243:10191/wutt/manHourHousekeeper

Min 1 سال پیش
والد
کامیت
ea0dce6a2c
17فایلهای تغییر یافته به همراه249 افزوده شده و 99 حذف شده
  1. 21 8
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectCurrentcostController.java
  2. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  3. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ExpenseItemMapper.java
  4. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportService.java
  5. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  6. 9 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  7. 3 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ExpenseItemMapper.xml
  8. 7 1
      fhKeeper/formulahousekeeper/management-workshop/pom.xml
  9. 19 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/config/exception/CustomServiceException.java
  10. 60 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/config/exception/GlobalExceptionHandler.java
  11. 28 22
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ProdCategoryServiceImpl.java
  12. 40 18
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  13. 14 7
      fhKeeper/formulahousekeeper/management-workshop/src/main/resources/application-prod.yml
  14. 3 3
      fhKeeper/formulahousekeeper/management-workshop/src/main/resources/application.yml
  15. 1 1
      fhKeeper/formulahousekeeper/timesheet-workshop/src/i18n/zh.json
  16. 30 29
      fhKeeper/formulahousekeeper/timesheet-workshop/src/views/product/list.vue
  17. 9 3
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

+ 21 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectCurrentcostController.java

@@ -2,11 +2,11 @@ package com.management.platform.controller;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.ExpenseMainType;
+import com.management.platform.entity.ExpenseSheet;
 import com.management.platform.entity.ProjectBasecostSetting;
 import com.management.platform.entity.ProjectCurrentcost;
-import com.management.platform.mapper.ProjectBasecostSettingMapper;
-import com.management.platform.mapper.ProjectCurrentcostMapper;
-import com.management.platform.mapper.ReportMapper;
+import com.management.platform.mapper.*;
 import com.management.platform.service.ProjectCurrentcostService;
 import com.management.platform.util.HttpRespMsg;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -35,6 +35,10 @@ public class ProjectCurrentcostController {
     private ReportMapper reportMapper;
     @Resource
     ProjectBasecostSettingMapper projectBasecostSettingMapper;
+    @Resource
+    ExpenseMainTypeMapper expenseMainTypeMapper;
+    @Resource
+    ExpenseItemMapper expenseItemMapper;
 
     @RequestMapping("/get")
     public HttpRespMsg get(Integer companyId, Integer projectId) {
@@ -45,6 +49,8 @@ public class ProjectCurrentcostController {
         projectIds.add(projectId);
         List<Map<String, Object>> projectCost = reportMapper.getOneProjectBaseCost(projectId);
 
+        //设置了成本预算项的费用类型
+        List<ExpenseMainType> mainTypeList = expenseMainTypeMapper.selectList(new QueryWrapper<ExpenseMainType>().eq("company_id", companyId).isNotNull("basecost_setting_id"));
         //设置alarmType类型, 实际成本
         projectCurrentcosts.forEach(cur->{
             Optional<ProjectBasecostSetting> first = basecostSettingList.stream().filter(base -> base.getId().equals(cur.getBaseId())).findFirst();
@@ -59,12 +65,19 @@ public class ProjectCurrentcostController {
                     break;
                 }
             }
+            //费用报销对应的预算
+            if (cur.getAlarmType() == null) {
+                List<ExpenseMainType> expenseTypeFindList = mainTypeList.stream().filter(main -> cur.getBaseId().equals(main.getBasecostSettingId())).collect(Collectors.toList());
+                if (expenseTypeFindList.size() > 0) {
+                    double sum = 0;
+                    for (ExpenseMainType type : expenseTypeFindList) {
+                        int expenseTypeId = type.getId();
+                        sum += expenseItemMapper.selectExpenseByProject(null, null, projectId, expenseTypeId);
+                    }
+                    cur.setRealCost(sum);
+                }
+            }
         });
-
-//        double cost = reportMapper.getOneProjectCost(projectId);
-//        HashMap map = new HashMap();
-//        map.put("list", projectCurrentcosts);
-//        map.put("reportCost", cost);
         msg.data = projectCurrentcosts;
         return msg;
     }

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -1624,8 +1624,8 @@ public class ReportController {
     }
 
     @RequestMapping("/batchDelete")
-    public HttpRespMsg batchDelete(@RequestParam String userIds, String startDate, String endDate, HttpServletRequest request) {
-        return reportService.batchDelete(userIds,startDate, endDate, request);
+    public HttpRespMsg batchDelete(@RequestParam String userIds, Integer deptId, String startDate, String endDate, HttpServletRequest request) {
+        return reportService.batchDelete(userIds,deptId, startDate, endDate, request);
     }
 
     @RequestMapping("/getUserDailyWorkTime")

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ExpenseItemMapper.java

@@ -18,6 +18,6 @@ import java.util.Map;
 public interface ExpenseItemMapper extends BaseMapper<ExpenseItem> {
     List<ExpenseItemVO> getUserExpenseDetail(Integer projectId);
 
-    Double selectExpenseByProject(String startDate, String endDate, Integer projectId);
+    Double selectExpenseByProject(String startDate, String endDate, Integer projectId, Integer type);
     Double selectSumAmountByProjectAndType(Integer projectId, Integer type);
 }

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportService.java

@@ -117,7 +117,7 @@ public interface ReportService extends IService<Report> {
 
     HttpRespMsg getWeeklyReportData(String targetDate, HttpServletRequest request);
 
-    HttpRespMsg batchDelete(String userIds, String startDate, String endDate, HttpServletRequest request);
+    HttpRespMsg batchDelete(String userIds, Integer deptId, String startDate, String endDate, HttpServletRequest request);
 
     HttpRespMsg batchApproveByDate(String startDate, String endDate, Integer departmentId, HttpServletRequest request);
 }

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -10485,7 +10485,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     public HttpRespMsg timeCostAndExpenseByProject(HttpServletRequest request, String startDate, String endDate, Integer projectId) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         Map<String, Object> map = reportMapper.selectCostTimeByProject(startDate, endDate, projectId);
-        Double expense = expenseItemMapper.selectExpenseByProject(startDate, endDate, projectId);
+        Double expense = expenseItemMapper.selectExpenseByProject(startDate, endDate, projectId, null);
         map.put("expense",expense);
         httpRespMsg.data = map;
         return httpRespMsg;

+ 9 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -6294,7 +6294,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
-    public HttpRespMsg batchDelete(String userIds, String startDate, String endDate, HttpServletRequest request) {
+    public HttpRespMsg batchDelete(String userIds, Integer deptId, String startDate, String endDate, HttpServletRequest request) {
         //限制只针对赛元微电子
         HttpRespMsg msg = new HttpRespMsg();
         String userId = request.getHeader("TOKEN");
@@ -6310,6 +6310,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             userIdList.add(id);
         }
         if (userIdList.size() > 0) {
+            //选择人员时,按人员删除
             List<User> userList = userMapper.selectList(new QueryWrapper<User>().in("id", userIdList));
             boolean notAllowed = userList.stream().anyMatch(u -> !u.getCompanyId().equals(469));
             if (!notAllowed) {
@@ -6318,7 +6319,13 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 msg.setError("无权限");
             }
         } else {
-            msg.setError("人员不能为空");
+            if (deptId != null) {
+                //没有人员,选择部门时,按部门删除
+                reportMapper.delete(new QueryWrapper<Report>().eq("company_id", user.getCompanyId()).eq("dept_id", deptId).between("create_date", startDate, endDate));
+            } else {
+                msg.setError("请选择部门或者人员");
+            }
+
         }
         return msg;
     }

+ 3 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ExpenseItemMapper.xml

@@ -58,6 +58,9 @@
         </if>
         and expense_item.amount is not null
         and expense_sheet.status = 0
+        <if test="type!=null">
+            and expense_sheet.type = #{type}
+        </if>
     </select>
 
     <select id="selectSumAmountByProjectAndType" resultType="java.lang.Double">

+ 7 - 1
fhKeeper/formulahousekeeper/management-workshop/pom.xml

@@ -117,6 +117,12 @@
             <groupId>com.baidu.aip</groupId>
             <artifactId>java-sdk</artifactId>
         </dependency>
+        <!-- hutool工具包 -->
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.16</version>
+        </dependency>
 
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -281,4 +287,4 @@
             </snapshots>
         </pluginRepository>
     </pluginRepositories>
-</project>
+</project>

+ 19 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/config/exception/CustomServiceException.java

@@ -0,0 +1,19 @@
+package com.management.platform.config.exception;
+
+import lombok.Getter;
+
+
+/**
+ * 自定义业务异常
+ *
+ * @author 杨圣君
+ * @date 2023/08/24
+ */
+@Getter
+public class CustomServiceException extends RuntimeException {
+
+    public CustomServiceException(String msg) {
+        super(msg);
+    }
+
+}

+ 60 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/config/exception/GlobalExceptionHandler.java

@@ -0,0 +1,60 @@
+package com.management.platform.config.exception;
+
+import com.management.platform.util.HttpRespMsg;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+/**
+ * 全局异常处理程序
+ *
+ * @author 杨圣君
+ * @date 2023/08/24
+ */
+@Slf4j
+@RestControllerAdvice
+public class GlobalExceptionHandler {
+    private static String CODE="error";
+
+    /**
+     * 返回错误结果
+     *
+     * @param code   错误码
+     * @param msg    返回信息
+     * @param result 返回参数对象
+     * @return 错误结果集
+     */
+    private HttpRespMsg error(String code, String msg, Object result) {
+        HttpRespMsg resp = new HttpRespMsg();
+        resp.setCode(code);
+        resp.setMsg(msg);
+        resp.setData(result);
+        return resp;
+    }
+
+
+    /**
+     * 其他异常统一处理
+     *
+     * @param e 异常类型
+     * @return 异常结果
+     */
+    @ExceptionHandler(Throwable.class)
+    public HttpRespMsg handleException(Throwable e) {
+        log.error(e.getMessage(), e);
+        return error(CODE, "服务器异常", "服务器异常");
+    }
+
+    /**
+     * 自定义业务异常处理
+     *
+     * @param e 异常类型
+     * @return 异常结果
+     */
+    @ExceptionHandler(CustomServiceException.class)
+    public HttpRespMsg CustomServiceException(Throwable e) {
+        log.error(e.getMessage(), e);
+        return error(CODE, e.getMessage(), "业务异常");
+    }
+
+}

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

@@ -1,6 +1,9 @@
 package com.management.platform.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.config.exception.CustomServiceException;
 import com.management.platform.entity.ProdCategory;
 import com.management.platform.entity.Product;
 import com.management.platform.entity.User;
@@ -8,17 +11,17 @@ import com.management.platform.mapper.ProdCategoryMapper;
 import com.management.platform.mapper.ProductMapper;
 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 org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 
 /**
  * <p>
- *  服务实现类
+ * 服务实现类
  * </p>
  *
  * @author Seyason
@@ -34,52 +37,55 @@ public class ProdCategoryServiceImpl extends ServiceImpl<ProdCategoryMapper, Pro
     private ProductMapper productMapper;
 
     @Override
-    public HttpRespMsg saveOrUpdateInfo(ProdCategory prodCategory, HttpServletRequest request) {
+    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());
 
-        Integer count = prodCategoryMapper.selectCount(new LambdaQueryWrapper<ProdCategory>().eq(StringUtils.isNotBlank(prodCategory.getName()), ProdCategory::getName, prodCategory.getName()));
+        ProdCategory prodCategory1 = prodCategoryMapper
+                .selectOne(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);
-            }
+        if (ObjectUtil.isNotNull(prodCategory1) && !prodCategory1.getId().equals(prodCategory.getId())) {
+            throw new CustomServiceException("分类已存在");
+        }
 
-            msg.setData(prodCategory);
-        }else{
-          msg.setError("name is repeat !");
+        if (prodCategory.getId() == null) {
+            prodCategoryMapper.insert(prodCategory);
+        } else {
+            prodCategoryMapper.updateById(prodCategory);
         }
 
+        msg.setData(prodCategory);
+
+
         return msg;
     }
 
     @Override
     public HttpRespMsg delete(Integer id, HttpServletRequest request) {
-        HttpRespMsg msg=new HttpRespMsg();
+        HttpRespMsg msg = new HttpRespMsg();
         String token = request.getHeader("Token");
         User user = userMapper.selectById(token);
 
         Integer count = productMapper.selectCount(
                 new LambdaQueryWrapper<Product>()
                         .eq(id != null, Product::getCategoryId, id)
-                .eq(user.getCompanyId()!=null,Product::getCompanyId,user.getCompanyId())
+                        .eq(user.getCompanyId() != null, Product::getCompanyId, user.getCompanyId())
         );
 
 
-        if(count==0){
+        if (count == 0) {
 
-             if(prodCategoryMapper.selectCount(new LambdaQueryWrapper<ProdCategory>().eq(user.getCompanyId()!=null,ProdCategory::getCompanyId,user.getCompanyId()))==1){
-                 msg.setError("产品分类数量不能低于1");
-             }else{
-                 prodCategoryMapper.deleteById(id);
-             }
+            if (prodCategoryMapper.selectCount(new LambdaQueryWrapper<ProdCategory>().eq(user.getCompanyId() != null, ProdCategory::getCompanyId, user.getCompanyId())) == 1) {
+                msg.setError("产品分类数量不能低于1");
+            } else {
+                prodCategoryMapper.deleteById(id);
+            }
 
-        }else{
+        } else {
             msg.setError("已有产品为此分类,无法删除");
         }
 

+ 40 - 18
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -1,5 +1,6 @@
 package com.management.platform.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -132,29 +133,43 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         }
 
         //检查今日该员工的该工序是否已经有报工
-        Report existReport = reportMapper.selectOne(new QueryWrapper<Report>().eq("creator_id", token).eq("user_procedure_team_id", report.getUserProcedureTeamId()).eq("create_date", today));
+        Report todayReport = reportMapper.selectOne(new QueryWrapper<Report>().eq("creator_id", token).eq("user_procedure_team_id", report.getUserProcedureTeamId()).eq("create_date", today));
         //计算工作时长
         ProdProcedureTeam prodProcedureTeam = prodProcedureTeamMapper.selectById(report.getUserProcedureTeamId());
         double curReportTime = 0.0;
         //查找上一次该工序的报工
-        Integer currentProgress = 0;
-        Report lastReport = reportMapper.selectOne(new QueryWrapper<Report>().eq("creator_id", token).eq("user_procedure_team_id", report.getUserProcedureTeamId()).lt("create_date", today).orderByDesc("create_date").last("limit 1"));
-        //查找上次是否有报工,有的话取上次报工进度,没有的话取分配下来时的报工进度
-        if (lastReport != null) {
-            if (report.getProgress() <= lastReport.getProgress()) {
-                httpRespMsg.setError("进度必须大于上次报工进度("+lastReport.getProgress()+"%)");
+        Integer lastProgress = 0;
+        Report beforeTodayReport = reportMapper.selectOne(new QueryWrapper<Report>().eq("creator_id", token).eq("user_procedure_team_id", report.getUserProcedureTeamId()).lt("create_date", today).orderByDesc("create_date").last("limit 1"));
+        //查找今天之前是否有报工,有的话取上次报工进度,没有的话取分配下来时的报工进度
+        if (beforeTodayReport != null) {
+            if (report.getProgress() <= beforeTodayReport.getProgress()) {
+                httpRespMsg.setError("进度必须大于上次报工进度("+beforeTodayReport.getProgress()+"%)");
                 return httpRespMsg;
             }
-            currentProgress = report.getProgress();
+            lastProgress = report.getProgress();
         } else {
-            if (report.getProgress() <= currentProgress) {
-                httpRespMsg.setError("进度必须大于上次报工进度("+currentProgress+"%)");
+            //今天之前没有报过工
+            if (todayReport == null) {
+                lastProgress = prodProcedureTeam.getProgress();
+                if (report.getProgress() <= lastProgress) {
+                    httpRespMsg.setError("进度必须大于上次报工进度("+lastProgress+"%)");
+                    return httpRespMsg;
+                }
+            } else {
+                //今天报过工了,prodProcedureTeam中的是报过的工时,应该从0开始算才对
+                lastProgress = 0;
+            }
+            if (report.getProgress() <= lastProgress) {
+                httpRespMsg.setError("进度必须大于上次报工进度("+lastProgress+"%)");
                 return httpRespMsg;
             }
-            currentProgress = prodProcedureTeam.getProgress();
         }
-        curReportTime = (prodProcedureTeam.getWorkTime() * (report.getProgress() - currentProgress)/100);
+        int addProgress = report.getProgress() - lastProgress;
+        curReportTime = (prodProcedureTeam.getWorkTime() * (addProgress)/100);
+        //按比例获取本次进度的工钱
+        BigDecimal earnMoney = prodProcedureTeam.getJobOfMoney().multiply(new BigDecimal(curReportTime)).divide(new BigDecimal(100));
         report.setWorkingTime(curReportTime);//本次报工的工时数
+        report.setCost(earnMoney);//本次报工的成本
         report.setDeptId(plan.getStationId());
         if (plan.getPlanType() == 0) {
             report.setProductId(plan.getProductId());
@@ -176,14 +191,13 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             prodProcedureTeam.setStatus(3);//中止
         }
 
-        if (existReport == null) {
+        if (todayReport == null) {
             reportMapper.insert(report);
         } else {
-            report.setId(existReport.getId());
+            report.setId(todayReport.getId());
             reportMapper.updateById(report);
         }
         //更新自己执行的工序上的进度
-
         prodProcedureTeamMapper.updateById(prodProcedureTeam);
         return httpRespMsg;
     }
@@ -199,9 +213,17 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             user.setPassword(null);
             userList.add(user);
         } else if (checkType == 1) {
-            List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", user.getCompanyId()));
-            List<Integer> deptIncludeSubDeptIds = departmentService.getDeptIncludeSubDeptIds(deptId, allDeptList);
-            userList = userMapper.selectList(new QueryWrapper<User>().select("id, name, corpwx_userid").in("department_id", deptIncludeSubDeptIds));
+            //当前人员如果不在该计划部门下面,属于外调的,那他的审核人应该是该部门的主要负责人(工长)
+            if (!deptId.equals(user.getDepartmentId())) {
+                Department department = departmentMapper.selectById(deptId);
+                Integer superiorId = department.getSuperiorId();
+                User targetUser = userMapper.selectOne(new QueryWrapper<User>().select("id, name, corpwx_userid").eq("id", superiorId));
+                userList.add(targetUser);
+            } else {
+                List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", user.getCompanyId()));
+                List<Integer> deptIncludeSubDeptIds = departmentService.getDeptIncludeSubDeptIds(deptId, allDeptList);
+                userList = userMapper.selectList(new QueryWrapper<User>().select("id, name, corpwx_userid").in("department_id", deptIncludeSubDeptIds));
+            }
         } else if (checkType == 2) {
             List<DepartmentOtherManager> otherManagers = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("department_id", deptId));
             Department curDept = departmentMapper.selectById(deptId);

+ 14 - 7
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/application-prod.yml

@@ -1,5 +1,5 @@
 server:
-  port: 10010
+  port: 10030
   tomcat:
     uri-encoding: utf-8
     max-http-form-post-size: -1
@@ -13,7 +13,7 @@ spring:
       max-request-size: 100MB
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://47.100.37.243:7644/man_hour_manager?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
+    url: jdbc:mysql://47.100.37.243:7644/man_workshop?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
     username: root
     password: Ziyu20141026!@@
     hikari:
@@ -82,16 +82,22 @@ mybatis:
   mapper-locations: mappers/*Mapper.xml
 #####配置图片上传路径####
 upload:
-  path: /www/staticproject/timesheet/upload/
-
+  path: /www/staticproject/workshop/upload/
 
 
+referer:
+  refererDomain:
+    - localhost
+    - mobworkshop.ttkuaiban.com
+    - workshop.ttkuaiban.com
+suitId: wwd4d6f94f7bff4d66
+suitSecret: oQot8m-a3Sx2itfry7PDQBsl563l0ukcFQ0y83djHzo
 ##actuator健康检查配置
 management:
   security:
     enabled:false:
   server:
-    port: 10011
+    port: 10031
   #  endpoints:
   #    web:
   #      exposure:
@@ -103,11 +109,12 @@ management:
 
 configEnv:
   isDev: false
+  isPrivateDeploy: false
 # SFTP上传配置
 sftp:
-  isEnabled: true
+  isEnabled: false
   server: 101.132.166.205
   port: 22022
-  remoteDir: /bkup/timesheet
+  remoteDir: /bkup/workshop
   user: root
   password: Huoshi@2022

+ 3 - 3
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/application.yml

@@ -122,7 +122,7 @@ management:
   security:
     enabled:false:
   server:
-    port: 10092
+    port: 10093
 #  endpoints:
 #    web:
 #      exposure:
@@ -149,8 +149,8 @@ suitId: ww4e237fd6abb635af
 suitSecret: 1ApL6LIB4Z0v7wBrKTUNmJrerRWV3gEQWBlYOm8Kijw
 #平台作为服务商的参数
 corpId: wwf11426cf618e1703
-token: Mhi7ehNX61UN4MB7PHnC
-encodingAesKey: PHVMkME1XMrImmGJZ4OZJxSysI7hFEhtDDUQrlHAfIS
+token: PfYEl7HOkXQLXXd5RpAYv2QAZBN
+encodingAesKey: 8DdeJrkKk9t3N5tCWuWqB7hat5W4O68SMi2KH5opwU6
 providerSecret: wlwGIUXskWKsNtCfKUsAfJ6ueba55rZnqZvcC-rUM6nQ-LnRDyYgISQ2BO-UlL_A
 
 configEnv:

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet-workshop/src/i18n/zh.json

@@ -1214,7 +1214,7 @@
   "restartthesuccess": "重启成功",
   "suspensionofsuccess": "暂停成功",
   "projectcompletion": "项目完成",
-  "projectexport": "项目导出",
+  "projectexport": "产品导出",
   "projecttaskgroupexport": "项目任务分组导出",
   "professionalscannotbeempty": "专业人员不能为空",
   "professionalscannotrepeat": "专业人员不能重复",

+ 30 - 29
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/product/list.vue

@@ -214,14 +214,14 @@
                             clearable
                             placeholder="产品特征"
                             v-model="addForm.description">
-                        </el-input>    
+                        </el-input>
 
                     </el-form-item>
                 </el-form>
             </div>
             <div v-if="prodEditActive == 1">
                  <!--此处是录入工序的模块-->
-                
+
 
                 <el-input placeholder="请输入工序版本号" v-model="procedureVersion" clearable maxlength="50" class="input-pM"></el-input>
                 <el-table :data="procedureLit" style="width: 100%">
@@ -261,7 +261,7 @@
             </div>
             <!--此处是录入物料的模块-->
             <!--  <div v-if="prodEditActive == 2">
-               
+
 
                 <el-input placeholder="请输入物料版本号" v-model="prodMaterialVersion" class="input-pM"></el-input>
                 <el-table :data="prodMaterialList" style="width: 100%">
@@ -398,7 +398,7 @@
             <div>
                 <el-form ref="form" :model="category" label-width="80px">
                     <el-form-item label="分类名称">
-                        <el-input v-model="category.name" placeholder="请输入"></el-input>
+                        <el-input v-model="category.name"  maxlength="30" placeholder="请输入"></el-input>
                     </el-form-item>
                 </el-form>
             </div>
@@ -634,7 +634,7 @@ export default {
     },
     data() {
         return {
-            
+
             copyVisible: false,
             pdName: '',
             productSelections: [], //选中的产品id集合
@@ -782,7 +782,7 @@ export default {
                 orderNumber: [{ required: true, message:' 请输入订单数量', trigger: "blur" }],
                 unit: [{ required: true, message: '请输入单位', trigger: "blur" }],
                 groupNumber: [{ required: true, message: '请输入编组', trigger: "blur" }],
-                
+
 
                 projectStageName: [{ required: true, message: this.$t('pleaseentername'), trigger: "blur" }],
                 projectLevelName: [{ required: true, message: this.$t('pleaseentername'), trigger: "blur" }],
@@ -966,7 +966,7 @@ export default {
         exportProduct() {
 
             let productSelectionString = JSON.stringify(this.productSelections);
-            
+
             this.exportDisabled = true
             this.exportNotification = this.$notify({
                 title: '导出产品',
@@ -998,7 +998,7 @@ export default {
                     });
                 }
             );
-            
+
           /*   this.http.post("/product/exportData", {
                 date: productSelectionString,
                 productType: this.category
@@ -1024,7 +1024,7 @@ export default {
         updateCategory(row) {
             this.isganttshowCa = true
             this.title = "编辑"
-            
+
             console.log(row);
             this.category ={...row}
         },
@@ -1053,7 +1053,7 @@ export default {
                         }
                     })
             })
-           
+
         },
         saveCategory() {
             if (this.category.name == null) {
@@ -1066,14 +1066,15 @@ export default {
 
                 this.http.post("/prod-category/saveOrUpdateInfo", this.category,
                     res => {
-                        if (res.code == 'ok') {
+                        if (res.code === 'ok') {
                             this.isganttshowCa = false
                             this.getCategoryList()
                             this.category = {}
                         } else {
+                            console.log(res)
                             this.$message({
                                 showClose: true,
-                                message: '该分类已存在',
+                                message: res.msg,
                                 type: 'warning'
                             });
                         }
@@ -1082,12 +1083,12 @@ export default {
                     })
 
             }
-            
+
         },
 
         getCategoryList() {
             this.isganttshow = true
-           
+
             console.log(this.categoryList)
             this.http.post("/prod-category/getList", null,
                 res => {
@@ -1104,7 +1105,7 @@ export default {
                 .catch(_ => { });
         },
         changeProcedureVersion(row) {
-            
+
             let index = null
             for (var i in this.list) {
                 if (this.list[i].id === row.id) {
@@ -1112,7 +1113,7 @@ export default {
                     break
                 }
             }
-            
+
             this.getProdProcedureVersion(row.id, row.tableProdProcedure.version, index)
         },
         changeMaterialVersion(row) {
@@ -1123,7 +1124,7 @@ export default {
                     break
                 }
             }
-            
+
             this.getProdMaterialVersion(row.id,row. index)
         },
         // 获取row的key值
@@ -1157,7 +1158,7 @@ export default {
                           this.list[index].tableProdMaterial.versions = res.data
                           this.prodMaterialVersion = res.data[res.data.length - 1]
                           this.getProdMaterialVersion(row.id, index)
-  
+
                       }) */
             }
         },
@@ -1186,12 +1187,12 @@ export default {
         submitSequence(addSequence) {
 
             let flag=true
-            
+
             if (this.procedureVersion === null|| this.procedureVersion==='') {
                 flag=false
             }
 
-           
+
             if ((this.procedureVersion != null || this.procedureVersion != '') && (this.procedureLit.length == 0 || this.procedureLit.length == null)) {
                 flag = false
             }
@@ -1212,7 +1213,7 @@ export default {
                             type: "error"
                         });
 
-                        return 
+                        return
                     }
                     console.log("工价:"+this.procedureLit[i].unitPrice)
                    if(this.procedureLit[i].unitPrice> 9999999.999){
@@ -1231,7 +1232,7 @@ export default {
             if ((this.procedureVersion == null || this.procedureVersion === '')  && (this.procedureLit.length == 0 || this.procedureLit.length == null)) {
                 flag = true
             }
-           
+
             if(flag){
 
                  this.addLoading = true;
@@ -1251,7 +1252,7 @@ export default {
                             });
                             if (addSequence) {
                                 //进入物料录入
-/* 
+/*
                                 this.http.post('/prod-material/getProdMaterialList', { productId: this.productId },
                                     res => {
                                         this.prodMaterialList = res.data.prodMaterialList;
@@ -1284,7 +1285,7 @@ export default {
                 });
             }
 
-           
+
 
         },
         //工序返回上一步
@@ -1302,7 +1303,7 @@ export default {
                 if (this.professionList.length == 0) {
                     this.getProfessionList();
                 }
-            }    
+            }
         },
 
         //删除工序
@@ -2377,7 +2378,7 @@ export default {
                 if (arr[i].id != -1 && arr[i].id != 0) {
                     // if(arr[i].userList) {
                     //     if(arr[i].userList.length > 0) {
-                    //         arr[i].children = arr[i].userList 
+                    //         arr[i].children = arr[i].userList
                     //     }
                     // }
                     if (arr[i].children != null && arr[i].children.length > 0) {
@@ -3300,7 +3301,7 @@ export default {
                         flag=false;
                     }
 
-                    
+
                     if(flag){
                             //console.log("valid",valid)
                         this.addLoading = true;
@@ -3590,7 +3591,7 @@ export default {
     },
     activated() {
         var cateId = this.$route.params.cateId;
-        
+
         console.log('activated分类参数', cateId);
     },
     mounted() {
@@ -3699,4 +3700,4 @@ export default {
 .gongcheng .el-table .cell {
     overflow: inherit !important;
 }
-</style>
+</style>

+ 9 - 3
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -1670,6 +1670,11 @@
                     :end-placeholder="$t('time.endDate')"
                     ></el-date-picker>
             </div>
+            <div style="margin-top:10px;">
+                <span>请选择部门:</span>
+                <el-cascader v-if="user.userNameNeedTranslate != 1" v-model="deleteReportParam.deptId" placeholder="请选择部门" :options="departmentList" :props="{ checkStrictly: true, value: 'id' }" clearable style="width: 350px;"></el-cascader>
+                <vueCascader :size="'medium'" :widthStr="'350'" :clearable="true" :subject="departmentList" :radios="true" :distinction="'1'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1" :selectNameChuan="$t('other.allDepartments')"></vueCascader>
+            </div>
             <div style="margin-top:10px;">
                 <span>请选择员工:</span>
                 <el-select v-model="deleteReportParam.userIds" placeholder="请选择" style="width:500px;" filterable multiple>
@@ -2310,9 +2315,9 @@
                 }).catch(() => {this.startDeleting = false});
             },
             confirmBatchDelReport() {
-                if (this.deleteReportParam.userIds.length == 0) {
+                if (this.deleteReportParam.userIds.length == 0 && !this.deleteReportParam.deptId) {
                     this.$message({
-                                message: '请选择人员',
+                                message: '请选择部门或人员',
                                 type: "error"
                             });
                     return;
@@ -2325,7 +2330,7 @@
                     return;
                 }
                 
-                this.$confirm('您确定要删除该时间段内选中人员的日报吗,删除后将不可恢复',this.$t('other.prompts'), {
+                this.$confirm('您确定要删除该时间段内的日报吗,删除后将不可恢复',this.$t('other.prompts'), {
                     confirmButtonText: this.$t('btn.determine'),
                     cancelButtonText: this.$t('btn.cancel'),
                     type: "warning"
@@ -2336,6 +2341,7 @@
                         userIds: JSON.stringify(this.deleteReportParam.userIds),
                         startDate: this.deleteReportParam.date[0],
                         endDate: this.deleteReportParam.date[1],
+                        deptId: this.deleteReportParam.deptId[0]
                     },res => {
                         if (res.code == "ok") {
                             this.$message({