Kaynağa Gözat

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

zx 1 yıl önce
ebeveyn
işleme
8487761eac

+ 3 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ExpenseSheetController.java

@@ -63,7 +63,9 @@ public class ExpenseSheetController {
         List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部报销单");
         if (functionList.size() == 0) {
             //普通员工只能看自己的
-            sheet.setOwnerId(user.getId());
+            if (sheet.getStatus() == null) {
+                sheet.setOwnerId(user.getId());
+            }
         }
         sheet.setCompanyId(user.getCompanyId());
         return expenseSheetService.queryList(sheet, startDate, endDate, pageIndex, pageSize);

+ 12 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ExpenseSheetServiceImpl.java

@@ -353,6 +353,7 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
     @Override
     public HttpRespMsg queryList(ExpenseSheet sheet, String startDate, String endDate, Integer pageIndex, Integer pageSize) {
         QueryWrapper<ExpenseSheet> queryWrapper = new QueryWrapper<ExpenseSheet>();
+        String token = request.getHeader("TOKEN");
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         queryWrapper.eq("company_id", sheet.getCompanyId()).orderByDesc("id");
         ExpenseAuditSetting expenseAuditSetting = expenseAuditSettingMapper.selectById(sheet.getCompanyId());
@@ -373,23 +374,29 @@ public class ExpenseSheetServiceImpl extends ServiceImpl<ExpenseSheetMapper, Exp
             if (sheet.getStatus() != null) {
                 //取待审核的
                 //项目经理审核模式下,只能查看自己项目的费用报销单
-                List<Integer> projectIds = projectMapper.selectList(new QueryWrapper<Project>().eq("incharger_id", sheet.getOwnerId())).stream().map(Project::getId).collect(Collectors.toList());
+                List<Integer> projectIds = projectMapper.selectList(new QueryWrapper<Project>().eq("incharger_id", token)).stream().map(Project::getId).collect(Collectors.toList());
+                System.out.println("项目经理的项目id"+projectIds);
                 if (projectIds.size() > 0) {
-                    queryWrapper.in("id", expenseItemMapper.selectList(new QueryWrapper<ExpenseItem>().in("project_id", projectIds)).stream().map(ExpenseItem::getExpenseId).distinct().collect(Collectors.toList()));
+                    List<Integer> expenseIds = expenseItemMapper.selectList(new QueryWrapper<ExpenseItem>().in("project_id", projectIds)).stream().map(ExpenseItem::getExpenseId).distinct().collect(Collectors.toList());
+                    System.out.println("项目经理的项目的费用报销单id"+expenseIds);
+                    queryWrapper.in("id", expenseIds);
                 } else {
                     //没有项目的项目经理,不显示任何数据
                     queryWrapper.eq("id", -1);
                 }
+                //按选择的人员过滤
+                if (!StringUtils.isEmpty(sheet.getOwnerId())) {
+                    queryWrapper.eq("owner_id", sheet.getOwnerId());
+                }
             } else {
-                //取自己的
+                //按人员过滤
                 if (!StringUtils.isEmpty(sheet.getOwnerId())) {
                     queryWrapper.eq("owner_id", sheet.getOwnerId());
                 }
             }
-
         }
 
-        if (sheet.getType() != null) {
+        if (!StringUtils.isEmpty(sheet.getType())) {
             queryWrapper.eq("type", sheet.getType());
         }
         if (!StringUtils.isEmpty(startDate) && !StringUtils.isEmpty(endDate)) {

+ 19 - 56
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -1232,6 +1232,8 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                             for (int m = 0; m < data.size(); m++) {
                                 String leaveText = data.getJSONObject(m).getString("text");
                                 if (leaveText.contains("假") || leaveText.contains("休")) {
+                                    //只要有请假,就重新计算
+                                    needRecaculate = true;
                                     //获取对应位置的请假时间段
                                     String string = holiday.getJSONObject("sp_description").getJSONArray("data").getJSONObject(m).getString("text");
                                     String[] s = string.split(" |\\~");
@@ -1324,15 +1326,25 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                                     //获取请假最早的开始时间和最晚的结束时间最为当天考勤的最早和最晚时间
                                     if (ct.getStartTime().equals("00:00") || ct.getStartTime().compareTo(leaveStart) > 0) {
                                         ct.setStartTime(leaveStart);
-                                        needRecaculate = true;
                                     }
                                     if (ct.getEndTime().compareTo(leaveEnd) < 0) {
                                         ct.setEndTime(leaveEnd);
-                                        needRecaculate = true;
                                     }
                                     //计算请假时长, 企业微信的请假时长不准
                                     if (needRecaculate) {
-
+                                        //完全包含请假时间段的,需要减去请假时间、
+                                        double minusRest = 0;
+                                        if (leaveStart.compareTo(baseMorningEnd) <= 0 && leaveEnd.compareTo(baseAfternoonStart) >= 0) {
+                                            minusRest = restTime;
+                                        } else {
+                                            if (leaveStart.compareTo(baseAfternoonStart) <= 0 && leaveStart.compareTo(baseMorningEnd) >= 0) {
+                                                leaveStart = baseAfternoonStart;
+                                            }
+                                            if (leaveEnd.compareTo(baseAfternoonStart) <= 0 && leaveEnd.compareTo(baseMorningEnd) >= 0) {
+                                                leaveEnd = baseMorningEnd;
+                                            }
+                                        }
+                                        //请假的时段如果包含了休息时间段,需要减去休息时间
                                         String[] endSplit = leaveEnd.split(":");
                                         String[] startSplit = leaveStart.split(":");
                                         int endHour = Integer.parseInt(endSplit[0]);
@@ -1340,16 +1352,14 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                                         int startHour = Integer.parseInt(startSplit[0]);
                                         int startMin = Integer.parseInt(startSplit[1]);
                                         double leaveHour = endHour - startHour;
-                                        //请假这天是全天请假,则需要减去中间的午休时间
-                                        if (leaveStart.compareTo(baseMorningEnd) < 0 && leaveEnd.compareTo(baseAfternoonStart) > 0) {
-                                            leaveHour = leaveHour - restTime;
-                                        }
+                                        //请假时段包含了休息时间,则需要减去中间的午休时间
+
                                         int leaveMin = endMin - startMin;
                                         double leaveTotalMin = leaveHour * 60 + leaveMin;
                                         if (leaveTotalMin < 0) {
                                             leaveTotalMin = 0;
                                         }
-                                        double leaveTotalHour = leaveTotalMin / 60;
+                                        double leaveTotalHour = leaveTotalMin / 60 - minusRest;
                                         if (showLog) System.out.println("重新计算请假时长:"+leaveStart+"--"+leaveEnd+", 时间间隔="+leaveTotalHour);
                                         if (ct.getAskLeaveTime() != null && ct.getAskLeaveTime() > 0) {
                                             //可能一天有多个请假单
@@ -1357,10 +1367,8 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                                         } else {
                                             ct.setAskLeaveTime(leaveTotalHour);
                                         }
-
                                         if (showLog) System.out.println("请假时长为:"+ct.getAskLeaveTime()+"小时");
                                     }
-
                                 } else if (leaveText.startsWith("外出") || leaveText.startsWith("出差") || leaveText.startsWith("外勤")) {
                                     //格式 "10/17 09:00 / 10/19 18:00", "10/17 上午 / 10/17 下午"
                                     String string = holiday.getJSONObject("sp_description").getJSONArray("data").getJSONObject(m).getString("text");
@@ -1473,6 +1481,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                             JSONObject spItem = sp_items.getJSONObject(j);
                             switch (spItem.getInteger("type")) {
                                 case 1://请假
+                                    //单独计算请假时间
 //                                    Double leaveTime = ct.getAskLeaveTime();
 //                                    if (leaveTime == null) {
 //                                        leaveTime = 0.0;
@@ -1637,52 +1646,6 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                                 ct.setEndTime(baseMorningEnd);
                                 if (showLog) System.out.println("再次校正,下午请假");
                             }
-
-                            //校正出差时间
-                            //获取请假的最早和最晚时间
-//                            boolean morningBusTrip = false;
-//                            boolean afternoonBusTrip = false;
-//                            for (int t = 0; t < holidayItems.size(); t++) {
-//                                JSONObject holiday = holidayItems.getJSONObject(t);
-//                                JSONObject spTitle = holiday.getJSONObject("sp_title");
-//                                JSONArray data = spTitle.getJSONArray("data");
-//                                for (int m = 0; m < data.size(); m++) {
-//                                    String leaveText = data.getJSONObject(m).getString("text");
-//                                    if (leaveText.contains("出差")) {
-//                                        //获取对应位置的出差时间段
-//                                        String string = holiday.getJSONObject("sp_description").getJSONArray("data").getJSONObject(m).getString("text");
-//                                        String[] s = string.split(" |\\~");
-//                                        boolean isOldFormat = false;
-//                                        if (s.length < 5) {
-//                                            isOldFormat = true;
-//                                        }
-//                                        //获取到出差的开始时间和结束时间
-//                                        String leaveStart = s[1];
-//                                        String leaveEnd = isOldFormat ? s[3] : s[4];
-//
-//                                        //检查出差时间段是否在打卡的时间范围内
-//                                        if ("上午".equals(leaveEnd) || "下午".equals(leaveEnd)) {
-//                                            //半天或者全天请假, 上面已经处理过结束时间为请假之前的时间了,此处不需要再处理了
-//                                            if (ct.getAskLeaveTime() >= 12) {
-//                                                if (showLog)
-//                                                    System.out.println("====半天或者全天出差 =转化为8小时制下的时间=" + (ct.getAskLeaveTime() / 24 * 8.0));
-//                                                //12小时以上的,是请假半天或者全天的。 防止1天有2次上下午分开的请假,导致计算两次的错误
-//                                                ct.setOutdoorTime(ct.getAskLeaveTime() / 24 * 8.0);//转换成一天8小时工作制
-//                                            }
-//                                            if ("上午".equals(leaveStart)) {
-//                                                morningBusTrip = true;
-//                                            }
-//                                            if ("下午".equals(leaveEnd)) {
-//                                                afternoonBusTrip = true;
-//                                            }
-//                                        } else if (ct.getStartTime().compareTo(leaveStart) <= 0 && ct.getEndTime().compareTo(leaveEnd) >= 0) {
-//                                            String hourLeaveTime = leaveText.replaceAll("出差", "").replaceAll("小时", "");
-//                                            if (showLog) System.out.println("出差时长=" + hourLeaveTime);
-////                                        ct.setCardTime(ct.getCardTime() - Double.parseDouble(hourLeaveTime));
-//                                        }
-//                                    }
-//                                }
-//                            }
                         }
                     }
 

+ 0 - 14
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/constant/Constant.java

@@ -10,22 +10,8 @@ import org.springframework.stereotype.Component;
  */
 @Component
 public class Constant {
-//    public static final String API_KEY = "gtImOYhgcFBzwuT29tB7tM0Z";//百度文字识别apiKey
-//    public static final String SECRET_KEY = "RipT5kfF3Zqp7S2vTXPlNcMiYcA76jfq";//百度文字识别secretKey
     public static final String API_KEY = "UgceK95dGkVbQKicVDU9D6s2";//百度文字识别apiKey
     public static final String SECRET_KEY = "fGCbfC9CR1v8Pf1u6kG4fM9KEXHgitAA";//百度文字识别secretKey
-    public static final Integer UN_HANDLE = 0;//定时任务未处理的状态码
-    public static final String PIC_PATH_PREFIX = "";//定时任务未处理的状态码
-    public static final String COMMON_SOFTWARE_KEYWORDS = "keyWords";//常用软件关键字
-    public static final String[] keyWords = new String[]{"IntelliJ IDEA","Eclipse",
-            "Postman","MyEclipse","Visual Studio Code",
-            "Navicat","Pycharm","Android Studio",
-            "WebStorm","SQLyog","PhpStorm",
-            "JetBrains Datagrip","JetBrains Rider",
-            "Android Studio","Photoshop","Illustrator",
-            "Adobe After Effects","Axure RP","Sketch"};//定时任务未处理的状态码
-//    public static final String ACCESS_KEY = "280d6f0e4a774117905ba789a9f0b978";//百度图像识别accessKey
-//    public static final String SECRET_KEY = "43b460e124eb474c8cdb7441dc30d66d";//百度图像识别secretKey
     //角色定义
     public static final String[] ROLE_NAMES = {"超级管理员", "系统管理员", "生产部经理","组员","高管"};
 

+ 22 - 27
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/AuthRedirectController.java

@@ -5,9 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.management.platform.entity.*;
 import com.management.platform.entity.vo.UserVO;
 import com.management.platform.mapper.*;
-import com.management.platform.service.FeishuInfoService;
-import com.management.platform.service.UserService;
-import com.management.platform.service.WxCorpInfoService;
+import com.management.platform.service.*;
 import com.management.platform.service.impl.FeishuInfoServiceImpl;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.MessageUtils;
@@ -65,6 +63,8 @@ public class AuthRedirectController {
     FeishuInfoServiceImpl feishuInfoService;
     @Resource
     UserLoginInfoMapper userLoginInfoMapper;
+    @Resource
+    SysFunctionService sysFunctionService;
 
 
     @RequestMapping("/corpWXAuth")
@@ -288,35 +288,30 @@ public class AuthRedirectController {
             User curUser = userList.get(0);
             companyId = curUser.getCompanyId();
             if (curUser.getIsActive() == 1) {
-                reqParam.put("userId", curUser.getId());
+                //检查登录权限
+                Integer roleId = curUser.getRoleId();
+                boolean loginPrivCheckPass = true;
+                if (isMobile) {
+                    boolean mobileLogin = sysFunctionService.hasPriviledge(roleId, "登录手机端");
+                    if (!mobileLogin) {
+                        reqParam.put("errorMsg", "无权登录手机端");
+                        loginPrivCheckPass = false;
+                    }
+                } else {
+                    boolean pcLogin = sysFunctionService.hasPriviledge(roleId, "登录PC端");
+                    if (!pcLogin) {
+                        reqParam.put("errorMsg", "无权登录PC端");
+                        loginPrivCheckPass = false;
+                    }
+                }
+                if (loginPrivCheckPass) {
+                    reqParam.put("userId", curUser.getId());
+                }
             } else {
                 //提示账号已停用
                 //reqParam.put("errorMsg", "您的账号已停用,无法登录");
                 reqParam.put("errorMsg", MessageUtils.message("user.inactive"));
             }
-        } else {
-            //使用UserId比对,之前有的老用户存的是UserId
-            WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectById(corpId);
-            if (wxCorpInfo == null) {
-                reqParam.put("errorMsg", MessageUtils.message("user.accountNoExist"));
-            } else {
-                User curUser = userMapper.selectOne(new QueryWrapper<User>().eq("company_id", wxCorpInfo.getCompanyId()).eq("corpwx_userid", wxUserId));
-                if (curUser == null) {
-                    reqParam.put("errorMsg", MessageUtils.message("user.accountNoExist"));
-                }
-                if (curUser != null) {
-                    if (curUser.getIsActive() == 1) {
-                        companyId = curUser.getCompanyId();
-                        reqParam.put("userId", curUser.getId());
-                    } else {
-                        //提示账号已停用
-                        reqParam.put("errorMsg", MessageUtils.message("user.inactive"));
-                    }
-                } else {
-                    reqParam.put("errorMsg", MessageUtils.message("user.accountNoExist"));
-                }
-
-            }
         }
         reqParam.put("hasTriedAutoLogin", 1);
         if (!StringUtils.isEmpty(state) && state.length() > 1) {

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

@@ -101,6 +101,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     private PlanMapper planMapper;
     @Autowired
     RestTemplate restTemplate;
+    @Resource
+    private ProductMapper productMapper;
 
     @Value(value = "${upload.path}")
     private String path;
@@ -115,6 +117,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         LocalDate today = LocalDate.now();
         report.setCreateDate(today);
         report.setCompanyId(companyId);
+        Product product = productMapper.selectById(report.getProductId());
+        if (product == null) {
+            httpRespMsg.setError("产品不存在,无法报工");
+            return httpRespMsg;
+        }
         //检查今日该员工的该工序是否已经有报工
         Report existReport = reportMapper.selectOne(new QueryWrapper<Report>().eq("creator_id", token).eq("prod_procedure_id", report.getProdProcedureId()).eq("create_date", today));
         //计算工作时长

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

@@ -105,6 +105,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     @Resource
     private RedisUtil redisUtil;
 
+    @Resource
+    private SysFunctionService sysFunctionService;
     @Autowired
     private RestTemplate restTemplate;
     @Resource
@@ -217,6 +219,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     //登录网页端
     @Override
     public HttpRespMsg loginAdmin(String username, String password){
+        String userAgent = request.getHeader("User-Agent");
+        //获取设备类型
+        String deviceType = UserAgentUtils.getDeviceType(userAgent);
+        boolean isMobile = "MOBILE".equals(deviceType);
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         //根据电话号码获取账号信息
         List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("phone", username));
@@ -272,6 +278,21 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 userVO.setTimeType(timeTypeMapper.selectById(company.getId()));
                 List<Department> manageDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", userVO.getId()));
                 List<Integer> deptIds = manageDeptList.stream().map(Department::getDepartmentId).collect(Collectors.toList());
+                //检查登录权限
+                Integer roleId = userVO.getRoleId();
+                if (isMobile) {
+                    boolean mobileLogin = sysFunctionService.hasPriviledge(roleId, "登录手机端");
+                    if (!mobileLogin) {
+                        httpRespMsg.setError("无权登录手机端");
+                        return httpRespMsg;
+                    }
+                } else {
+                    boolean pcLogin = sysFunctionService.hasPriviledge(roleId, "登录PC端");
+                    if (!pcLogin) {
+                        httpRespMsg.setError("无权登录PC端");
+                        return httpRespMsg;
+                    }
+                }
 
                 //获取当前角色的权限菜单
                 setUserRoleMenu(userVO);

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/plan/planComponent.vue

@@ -85,7 +85,7 @@
     </div>
 
     <!-- 新增今日计划 -->
-    <el-dialog :title="titleName" :visible.sync="editPlanDiaLog" width="800px" top="18.5vh" :before-close="handleClose">
+    <el-dialog :title="titleName" :visible.sync="editPlanDiaLog" width="800px" top="190px" :before-close="handleClose">
       <div class="planDialog">
         <el-form ref="todayPlanForm" :rules="todayPlanFormrules" :model="todayPlanForm" label-width="120px">
           <el-form-item label="排产工单号" style="width: 100%" prop="productSchedulingNum">
@@ -893,7 +893,7 @@ export default {
 
   // 新增样式
   .planDialog {
-    max-height: 50vh;
+    max-height: 42vh;
     overflow-y: auto;
     scrollbar-width: none;
     /* Firefox */

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/expense/expense.vue

@@ -939,7 +939,7 @@ export default {
         }
       }
       return num
-    }
+    }selectCal
   },
   watch: {},
   created() {