Explorar o código

Merge remote-tracking branch 'origin/master'

tomatozq %!s(int64=3) %!d(string=hai) anos
pai
achega
024f84eb32

+ 1 - 0
common/src/main/java/com/jpsoft/shinestar/modules/base/dao/WorkShiftInfoDAO.java

@@ -24,4 +24,5 @@ public interface WorkShiftInfoDAO {
 	List<WorkShiftInfo> findByCompanyIds(@Param("companyIds")List<String> companyIds);
 	String findNumberById(String id);
 	List<String> sortIdsByNumber(@Param("shiftIds")List<String> shiftIds);
+	WorkShiftInfo findByNumber(String number);
 }

+ 2 - 0
common/src/main/java/com/jpsoft/shinestar/modules/base/service/WorkShiftInfoService.java

@@ -25,4 +25,6 @@ public interface WorkShiftInfoService {
 	String findNumberById(String id);
 
 	List<String> sortIdsByNumber(List<String> shiftIds);
+
+	WorkShiftInfo findByNumber(String number);
 }

+ 5 - 0
common/src/main/java/com/jpsoft/shinestar/modules/base/service/impl/WorkShiftInfoServiceImpl.java

@@ -124,4 +124,9 @@ public class WorkShiftInfoServiceImpl implements WorkShiftInfoService {
 		return workShiftInfoDAO.sortIdsByNumber(shiftIds);
 	}
 
+	@Override
+	public WorkShiftInfo findByNumber(String number){
+		return workShiftInfoDAO.findByNumber(number);
+	}
+
 }

+ 10 - 0
common/src/main/resources/mapper/base/WorkShiftInfo.xml

@@ -199,4 +199,14 @@
         ORDER BY
         number_+0 ASC
     </select>
+    <select id="findByNumber" parameterType="string" resultMap="WorkShiftInfoMap">
+        SELECT
+        *
+        FROM
+        base_work_shift_info
+        WHERE
+        number_ = #{number}
+        and del_flag = 0
+        limit 1
+    </select>
 </mapper>

+ 1 - 0
common/src/main/resources/mapper/workflow/TemplateDepartment.xml

@@ -102,6 +102,7 @@ id_,process_template_id,department_id,create_by,create_time,update_by,update_tim
 		where a.del_flag = 0
 		and b.del_flag = 0
 		and c.del_flag = 0
+		and d.del_flag = 0
 		and a.department_id = #{companyId}
 		and c.form_id = #{formId}
 		and d.person_role_id = #{personRoleId}

+ 47 - 0
web/src/main/java/com/jpsoft/shinestar/modules/base/controller/PersonInfoController.java

@@ -1990,6 +1990,53 @@ public class PersonInfoController {
         return msgResult;
     }
 
+    @ApiOperation(value = "根据后勤公司查询用户")
+    @PostMapping("findByHqCompanyId")
+    public MessageResult<Object> findByHqCompanyId(String companyId) {
+        MessageResult<Object> msgResult = new MessageResult<>();
+
+        try {
+
+            Map<String,Object> searchParams = new HashMap<>();
+            if ("hq1".equals(companyId)) {
+                //外勤1
+                List<CompanyInfo> list1 = companyInfoService.findByClassify("1");
+                searchParams.put("companyInfos", list1);
+
+                searchParams.put("hqStatus", "1");
+            } else if ("hq2".equals(companyId)) {
+                //外勤2
+                List<CompanyInfo> list2 = companyInfoService.findByClassify("2");
+                searchParams.put("companyInfos", list2);
+
+                searchParams.put("hqStatus", "2");
+            } else {
+                CompanyInfo parentCompanyInfo = companyInfoService.get(companyId);
+                String parentCode = parentCompanyInfo.getCode();
+                searchParams.put("attendanceCompanyCode", parentCode + "%");
+                searchParams.put("hqStatus", parentCompanyInfo.getClassify());
+            }
+
+            List<Sort> sortList = new ArrayList<>();
+            sortList.add(new Sort("b.sort_no","asc"));
+            sortList.add(new Sort("a.id_","asc"));
+            //用户左边列
+            Page<PersonInfo> personInfoPage = personInfoService.pageSearch(searchParams,0,10000,false,sortList);
+            List<PersonInfo> list = personInfoPage.getResult();
+
+            msgResult.setResult(true);
+            msgResult.setData(list);
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
     @ApiOperation(value = "查询物业公司所在人员")
     @PostMapping("findByCompanyCode")
     public MessageResult<Object> findByCompanyCode(@RequestAttribute String subject) {

+ 267 - 0
web/src/main/java/com/jpsoft/shinestar/modules/base/controller/WorkPersonSchedulingController.java

@@ -349,6 +349,147 @@ public class WorkPersonSchedulingController {
         return dataMap;
     }
 
+    @ApiOperation(value="查询后勤人员排班")
+    @RequestMapping(value = "findHqScheduling",method = RequestMethod.POST)
+    public Map<String,Object> findHqScheduling(
+            @RequestParam(value="personName",defaultValue="")  String personName,
+            @RequestParam(value="queryMonth",defaultValue="")  String queryMonth,
+            @RequestParam(value="companyId",defaultValue="")  String companyId,
+            @RequestParam(value="subordinate",defaultValue="false")  Boolean subordinate,
+            @RequestParam(name="pageIndex",defaultValue = "1") int pageIndex,
+            @RequestParam(name="pageSize",defaultValue = "10") int pageSize,
+            @RequestAttribute String subject) throws Exception{
+
+        //当前用户ID
+        System.out.println(subject);
+        Map<String,Object> dataMap = new HashMap<>();
+        try{
+            Map<String,Object> searchParams = new HashMap<>();
+            if (StringUtils.isNotEmpty(personName)) {
+                searchParams.put("name","%" + personName + "%");
+            }
+
+            if (StringUtils.isNotEmpty(queryMonth)) {
+                searchParams.put("queryMonth",queryMonth);
+            }else{
+                throw new Exception("请选择查询日期!");
+            }
+
+            if (StringUtils.isNotEmpty(companyId)) {
+                if ("hq1".equals(companyId)) {
+                    //外勤1
+                    List<CompanyInfo> list1 = companyInfoService.findByClassify("1");
+                    searchParams.put("companyInfos", list1);
+
+                    searchParams.put("hqStatus", "1");
+                } else if ("hq2".equals(companyId)) {
+                    //外勤2
+                    List<CompanyInfo> list2 = companyInfoService.findByClassify("2");
+                    searchParams.put("companyInfos", list2);
+
+                    searchParams.put("hqStatus", "2");
+                } else {
+                    CompanyInfo parentCompanyInfo = companyInfoService.get(companyId);
+                    String parentCode = parentCompanyInfo.getCode();
+                    if (subordinate) {
+                        searchParams.put("attendanceCompanyCode", parentCode + "%");
+                    } else {
+                        searchParams.put("attendanceCompanyCode", parentCode);
+                    }
+
+                    searchParams.put("hqStatus", parentCompanyInfo.getClassify());
+                }
+            } else {
+                searchParams.put("querHq", "yes");
+            }
+
+            List<Sort> sortList = new ArrayList<>();
+            sortList.add(new Sort("b.sort_no","asc"));
+            sortList.add(new Sort("a.id_","asc"));
+            //用户左边列
+            Page<PersonInfo> personInfoPage = personInfoService.pageSearch(searchParams,pageIndex,pageSize,true,sortList);
+            //头部是月份
+            Date queryDate = new SimpleDateFormat("yyyy-MM-dd").parse(queryMonth + "-01");
+            Map<String,Object> returnMap = getDayByMonth(queryDate);
+            List<Integer> days = (List<Integer>)returnMap.get("days");
+            int year = Integer.parseInt(returnMap.get("year").toString());
+            int month = Integer.parseInt(returnMap.get("month").toString());
+
+            List<Map<String,Object>> personList = new ArrayList<>();
+            List<Map> dayMapList = new ArrayList<>();
+            for(int i=0;i<days.size();i++){
+                int day = days.get(i);
+                Map map = new HashMap();
+                map.put("id",i);
+                map.put("day",day);
+                dayMapList.add(map);
+            }
+
+            for(PersonInfo personInfo : personInfoPage.getResult()){
+                List<WorkPersonScheduling> workDayList = workPersonSchedulingService.findByPersonIdYearMonth(personInfo.getId(),year,month);
+                Map<String,List> dayMap = new HashMap<>();
+
+
+                for(int i=0;i<days.size();i++){
+                    int day = days.get(i);
+                    List<String> numberList = new ArrayList<>();
+                    numberList.add("无");
+                    dayMap.put(String.valueOf(day),numberList);
+                }
+
+                for(WorkPersonScheduling wps : workDayList){
+                    //dayMap.put(sdf.format(wps.getSchedulingDay()),wps);
+                    String shiftNumbers = "";
+                    String[] shiftIds = null ;
+                    if(wps.getShiftIds() != null){
+                        shiftIds = wps.getShiftIds().split(",");
+                        for(int i=0;i<shiftIds.length;i++){
+                            String shiftId = shiftIds[i];
+                            String shiftNumber = (String)valueOperations.get("shift_number_" + shiftId);
+
+                            if(StringUtils.isEmpty(shiftNumber)){
+                                shiftNumber = workShiftInfoService.findNumberById(shiftId);
+                                valueOperations.set("shift_number_" + shiftId, shiftNumber);
+                            }
+
+                            if(i < shiftIds.length - 1) {
+                                shiftNumbers += shiftNumber + ",";
+                            }else{
+                                shiftNumbers += shiftNumber;
+                            }
+                        }
+                    }
+
+                    List<String> numberList = new ArrayList<>();
+                    numberList.add(shiftNumbers);
+                    dayMap.replace(wps.getDay().toString(),numberList);
+                }
+
+
+                Map<String,Object> mapPerson = new HashMap<>();
+
+                mapPerson.put("id",personInfo.getId());
+                mapPerson.put("name",personInfo.getName());
+                mapPerson.put("companyId",personInfo.getCompanyId());
+                mapPerson.put("companyName",personInfo.getCompanyName());
+                mapPerson.put("personNumberMap",dayMap);
+
+                personList.add(mapPerson);
+            }
+
+
+            dataMap.put("recordsTotal", personInfoPage.getTotal());
+            dataMap.put("totalPage", personInfoPage.getPages());
+            dataMap.put("personList", personList);
+            dataMap.put("dayList", dayMapList);
+        }catch (Exception ex){
+            ex.printStackTrace();
+            logger.error(ex.getMessage(),ex);
+        }
+
+        return dataMap;
+    }
+
     public static Map<String,Object> getDayByMonth(Date queryMonth){
         Map<String,Object> returnMap = new HashMap<>();
         List list = new ArrayList();
@@ -479,6 +620,132 @@ public class WorkPersonSchedulingController {
         return msgResult;
     }
 
+    @ApiOperation(value="后勤排班班次")
+    @RequestMapping(value = "changeSchedulingHq",method = RequestMethod.POST)
+    public MessageResult<List> changeSchedulingHq(
+            @RequestParam(name="companyId",defaultValue = "") String companyId,
+            @RequestParam(name="personId",defaultValue = "") String personId,
+            String[] schedulingIds,
+            @DateTimeFormat(pattern = "yyyy-MM-dd") String startDate,
+            @DateTimeFormat(pattern = "yyyy-MM-dd") String endDate,
+            @RequestAttribute String subject,
+            HttpServletRequest request) throws Exception{
+        MessageResult<List> msgResult = new MessageResult<>();
+
+        if(!valueOperations.setIfAbsent("changeScheduling_" + subject,true,3,TimeUnit.SECONDS)){
+            throw new Exception("操作过于频繁,请稍后再试!");
+        }
+
+        Map<String,Object> searchParams = new HashMap<>();
+        if (StringUtils.isNotEmpty(companyId)) {
+            if ("hq1".equals(companyId)) {
+                //外勤1
+                List<CompanyInfo> list1 = companyInfoService.findByClassify("1");
+                searchParams.put("companyInfos", list1);
+
+                searchParams.put("hqStatus", "1");
+            } else if ("hq2".equals(companyId)) {
+                //外勤2
+                List<CompanyInfo> list2 = companyInfoService.findByClassify("2");
+                searchParams.put("companyInfos", list2);
+
+                searchParams.put("hqStatus", "2");
+            } else {
+                CompanyInfo parentCompanyInfo = companyInfoService.get(companyId);
+                String parentCode = parentCompanyInfo.getCode();
+                searchParams.put("attendanceCompanyCode", parentCode);
+                searchParams.put("hqStatus", parentCompanyInfo.getClassify());
+            }
+        } else {
+            throw new Exception("请选择部门");
+        }
+
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("b.sort_no","asc"));
+        sortList.add(new Sort("a.id_","asc"));
+        //查询部门下人员
+        Page<PersonInfo> personInfoPage = personInfoService.pageSearch(searchParams,0,10000,false,sortList);
+        List<PersonInfo> personInfoList = personInfoPage.getResult();
+        if(StringUtils.isNotEmpty(personId)){
+            personInfoList = new ArrayList<>();
+            String [] pIds = personId.split(",");
+            for(String pId : pIds) {
+                PersonInfo personInfo = personInfoService.get(Long.valueOf(pId));
+                personInfoList.add(personInfo);
+            }
+        }
+
+        for(PersonInfo pi : personInfoList){
+            //查询需要排班的日期
+            List<Date> dateList = getDayByYear(startDate,endDate);
+            int num=0;
+            for(Date scheDate : dateList){
+                //如果num = 数组的长度
+                String shiftId = schedulingIds[num];
+                if(num == schedulingIds.length-1) {
+                    num = 0;
+                }else{
+                    num ++;
+                }
+                List<WorkShiftInfo> wsiList = null;
+                if(StringUtils.isNotEmpty(shiftId)) {
+                    String[] shiftIds =  shiftId.split(";");
+                    //String sortShiftIds = Arrays.stream(shiftIds).sorted(Comparator.naturalOrder()).collect(Collectors.joining(","));
+                    List<String> shiftIdsList = Arrays.asList(shiftIds);
+
+                    List<String> sortShiftIdsList = workShiftInfoService.sortIdsByNumber(shiftIdsList);
+                    //返回排序后参数
+
+                    shiftId = StringUtils.join(sortShiftIdsList,",");
+                }
+
+                Calendar calendar = Calendar.getInstance(Locale.CHINA);
+                calendar.setTime(scheDate);
+                int year = calendar.get(Calendar.YEAR);//年份
+                int month = calendar.get(Calendar.MONTH) + 1;//月份
+                int day = calendar.get(Calendar.DAY_OF_MONTH);
+
+                //先假删除
+                workPersonSchedulingService.deleteByPersonIdSchedulingDay(year,month,day,pi.getId());
+
+                WorkPersonScheduling workPersonScheduling = workPersonSchedulingService.findByYearMonthDayPersonId(year,month,day,pi.getId());
+                if(workPersonScheduling == null){
+                    workPersonScheduling = new WorkPersonScheduling();
+                    workPersonScheduling.setId(UUID.randomUUID().toString());
+                    workPersonScheduling.setDelFlag(false);
+                    workPersonScheduling.setCreateBy(subject);
+                    workPersonScheduling.setCreateTime(new Date());
+
+                    workPersonScheduling.setPersonId(pi.getId());
+                    workPersonScheduling.setYear(year);
+                    workPersonScheduling.setMonth(month);
+                    workPersonScheduling.setDay(day);
+                    workPersonScheduling.setSchedulingDay(scheDate);
+                    workPersonScheduling.setShiftIds(shiftId);
+                    //workPersonScheduling.setShiftNumbers(shiftNumber);
+
+                    workPersonSchedulingService.insert(workPersonScheduling);
+                }else{
+                    workPersonScheduling.setUpdateBy(subject);
+                    workPersonScheduling.setUpdateTime(new Date());
+
+                    workPersonScheduling.setPersonId(pi.getId());
+                    workPersonScheduling.setYear(year);
+                    workPersonScheduling.setMonth(month);
+                    workPersonScheduling.setDay(day);
+                    workPersonScheduling.setSchedulingDay(scheDate);
+                    workPersonScheduling.setShiftIds(shiftId);
+                    //workPersonScheduling.setShiftNumbers(shiftNumber);
+
+                    workPersonSchedulingService.update(workPersonScheduling);
+                }
+
+            }
+        }
+        msgResult.setResult(true);
+        return msgResult;
+    }
+
 
     @ApiOperation(value="根据年月日人查班次ID")
     @RequestMapping(value = "findWPSByParameter",method = RequestMethod.POST)

+ 51 - 0
web/src/main/java/com/jpsoft/shinestar/modules/base/controller/WorkShiftInfoController.java

@@ -346,4 +346,55 @@ public class WorkShiftInfoController {
         msgResult.setResult(true);
         return msgResult;
     }
+
+    @ApiOperation(value="后勤部门班次列表")
+    @RequestMapping(value = "shiftHqList",method = RequestMethod.POST)
+    public MessageResult<List> shiftHqList(
+            @RequestParam(name="companyId",defaultValue = "") String companyId,
+            HttpServletRequest request){
+        MessageResult<List> msgResult = new MessageResult<>();
+
+        if (StringUtils.isNotEmpty(companyId)) {
+            //可以查所选单位下面所有的排班 like
+            List<WorkShiftInfo> list = new ArrayList<>();
+            if ("hq1".equals(companyId) || "hq2".equals(companyId)) {
+                //外勤1 0,46,47
+                WorkShiftInfo workShiftInfo0 = workShiftInfoService.findByNumber("0");
+                if(workShiftInfo0 != null) {
+                    workShiftInfo0.setWorkTime("");
+                    workShiftInfo0.setClosingTime("");
+                    list.add(workShiftInfo0);
+                }
+
+                WorkShiftInfo workShiftInfo46 = workShiftInfoService.findByNumber("46");
+                if(workShiftInfo46 != null) {
+                    list.add(workShiftInfo46);
+                }
+
+                WorkShiftInfo workShiftInfo47 = workShiftInfoService.findByNumber("47");
+                if(workShiftInfo47 != null) {
+                    list.add(workShiftInfo47);
+                }
+            } else {
+                CompanyInfo companyInfo = companyInfoService.get(companyId);
+                List<String> parentIds = Arrays.asList(companyInfo.getCode().split(","));
+                list = workShiftInfoService.findByCompanyIds(parentIds);
+                for(WorkShiftInfo wsi : list){
+                    if("0".equals(wsi.getNumber())){
+                        wsi.setWorkTime("");
+                        wsi.setClosingTime("");
+                    }
+                }
+            }
+
+
+
+            msgResult.setData(list);
+        }else{
+            msgResult.setData(null);
+        }
+
+        msgResult.setResult(true);
+        return msgResult;
+    }
 }

+ 4 - 3
web/src/main/java/com/jpsoft/shinestar/modules/business/controller/WorkScheduleAttendanceController.java

@@ -1425,9 +1425,7 @@ public class WorkScheduleAttendanceController {
             Map<String, Object> msgMap = new HashMap<>();
 
             List<Sort> sortList = new ArrayList<>();
-            sortList.add(new Sort("b.level_", "asc"));
-            sortList.add(new Sort("b.sort_no", "asc"));
-            sortList.add(new Sort("a.job_number", "asc"));
+            sortList.add(new Sort("a.hq_sort_no", "asc"));
 
             if (StringUtils.isNotEmpty(name)) {
                 String[] names = name.split(",");
@@ -2184,6 +2182,9 @@ public class WorkScheduleAttendanceController {
                 row.createCell(colIndex).setCellValue(jsonObject.getString("onWorkResult1N"));
                 colIndex++;
 
+                row.createCell(colIndex).setCellValue(jsonObject.getString("offWorkRecordTime1"));
+                colIndex++;
+
                 row.createCell(colIndex).setCellValue(jsonObject.getString("offWorkResult1N"));
                 colIndex++;
 

+ 2 - 1
web/src/main/java/com/jpsoft/shinestar/modules/mobile/controller/ExamineApiController.java

@@ -496,7 +496,8 @@ public class ExamineApiController {
 
                     if ("2".equals(procinstType)){
                         RequestForLeaveInfo requestForLeaveInfo = requestForLeaveInfoService.get(procinst.getBusinessKey());
-                        PersonInfo personInfo1 = personInfoService.get(requestForLeaveInfo.getPersonId());
+                       // PersonInfo personInfo1 = personInfoService.get(requestForLeaveInfo.getPersonId());
+                        PersonInfo personInfo1 = personInfoService.findByIdIgnoreDel(requestForLeaveInfo.getPersonId());
                         ExamineShiftListDTO examineShiftListDTO = new ExamineShiftListDTO();
                         examineShiftListDTO.setId(requestForLeaveInfo.getId());
                         examineShiftListDTO.setProcinstActUserId(requestForLeaveInfo.getId());