瀏覽代碼

申请年假日期范围内不能包含出差日期范围,否者不能申请年假的功能

yanliming 2 周之前
父節點
當前提交
fc98fb1649

+ 4 - 0
common/src/main/java/com/jpsoft/shinestar/modules/base/dao/BusinessOutDAO.java

@@ -3,6 +3,8 @@ package com.jpsoft.shinestar.modules.base.dao;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 import com.jpsoft.shinestar.modules.base.entity.BusinessOut;
 import java.util.Map;
@@ -23,4 +25,6 @@ public interface BusinessOutDAO {
 
     List<BusinessOut> findByGreaterEndTime(Date date,String personPopedomId);
 	List<BusinessOut> findByPersonIdAndSEDate(Long personId, Date startDate, Date endDate);
+
+	List<BusinessOut> findByPersonIdAndSingleDate(@Param("personId") Long personId, @Param("date")Date date);
 }

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

@@ -35,4 +35,6 @@ public interface BusinessOutService {
     List<BusinessOut> findByGreaterEndTime(Date date,String personPopedomId);
 
     BigDecimal sumDaysByPersonIdAndTimeRange(Long personId, Date startDate, Date endDate);
+
+    List<BusinessOut> findByPersonIdAndSingleDate(Long personId, Date date);
 }

+ 106 - 101
common/src/main/java/com/jpsoft/shinestar/modules/base/service/impl/BusinessOutServiceImpl.java

@@ -125,7 +125,7 @@ public class BusinessOutServiceImpl implements BusinessOutService {
     }
 
     @Override
-    public void approvalBusinessOut(PersonInfo personInfo, String ids, String status, String approvalContent,String nextApprovalId) throws Exception {
+    public void approvalBusinessOut(PersonInfo personInfo, String ids, String status, String approvalContent, String nextApprovalId) throws Exception {
         List<String> idList = Arrays.asList(ids.split(","));
 
         if (idList.size() > 0) {
@@ -134,7 +134,7 @@ public class BusinessOutServiceImpl implements BusinessOutService {
                 BusinessOut businessOut = get(id);
 
                 String type = businessOut.getType();
-                if ("1".equals(businessOut.getType())){
+                if ("1".equals(businessOut.getType())) {
                     type = "2";
                 }
                 //申请人
@@ -168,12 +168,12 @@ public class BusinessOutServiceImpl implements BusinessOutService {
                         }
                         while (parent != null && zIndex < loopNum) {
                             ApprovalConfig approvalConfig = approvalConfigService.findByCompanyIdAndType(companyInfo.getId(), type);
-                            if (approvalConfig != null){
+                            if (approvalConfig != null) {
                                 companyId = companyInfo.getId();
                                 break;
-                            }else if (org.apache.commons.lang3.StringUtils.isBlank(companyInfo.getParentId())) {
+                            } else if (org.apache.commons.lang3.StringUtils.isBlank(companyInfo.getParentId())) {
                                 break;
-                            }else {
+                            } else {
                                 parent = companyInfoService.get(parent.getParentId());
                                 companyInfo = companyInfoService.get(companyInfo.getParentId());
                                 zIndex++;
@@ -211,10 +211,10 @@ public class BusinessOutServiceImpl implements BusinessOutService {
                     //默认审核层级
                     int level = 2;
 
-                    if (StringUtils.isNotBlank(companyId)){
+                    if (StringUtils.isNotBlank(companyId)) {
 
-                        ApprovalConfig approvalConfig = approvalConfigService.findByCompanyIdAndType(companyId,type);
-                        if (approvalConfig != null){
+                        ApprovalConfig approvalConfig = approvalConfigService.findByCompanyIdAndType(companyId, type);
+                        if (approvalConfig != null) {
                             level = Integer.valueOf(approvalConfig.getLevel());
                         }
 
@@ -222,66 +222,66 @@ public class BusinessOutServiceImpl implements BusinessOutService {
 
                     //计算当前审核的是第几级审批
                     int nowLevel = 1;
-                    if (StringUtils.isNotBlank(approvalPersonIdStr)){
+                    if (StringUtils.isNotBlank(approvalPersonIdStr)) {
                         nowLevel = nowLevel + Arrays.asList(approvalPersonIdStr.split(",")).size();
                     }
                     //判断已审核人总数和需要审核级数
-                    if (nowLevel<level){
-                        List<PersonPopedom> dataList =  personPopedomService.findApprovalList(personInfo,null,null,null);
-                        if (dataList.size()>0){
+                    if (nowLevel < level) {
+                        List<PersonPopedom> dataList = personPopedomService.findApprovalList(personInfo, null, null, null);
+                        if (dataList.size() > 0) {
                             personPopedomList.add(dataList.get(0));
                         }
                     }
 
-                        //判断审批人数量,审批人数据为0,审批流程走完
-                        if (personPopedomList.size() == 0) {
-                            businessOut.setApprovalTime(new Date());
-                            businessOut.setStatus(status);
-                            businessOut.setApprovalContent(approvalContent);
-                            businessOut.setUpdateBy(personInfo.getPopedom());
-                            businessOut.setUpdateTime(new Date());
-                            update(businessOut);
+                    //判断审批人数量,审批人数据为0,审批流程走完
+                    if (personPopedomList.size() == 0) {
+                        businessOut.setApprovalTime(new Date());
+                        businessOut.setStatus(status);
+                        businessOut.setApprovalContent(approvalContent);
+                        businessOut.setUpdateBy(personInfo.getPopedom());
+                        businessOut.setUpdateTime(new Date());
+                        update(businessOut);
+                    }
+                    //审批人数据不为0
+                    else {
+                        PersonPopedom personPopedom1 = personPopedomList.get(0);
+                        if (StringUtils.isNotBlank(approvalPersonIdStr)) {
+                            businessOut.setApprovalPersonIdStr(approvalPersonIdStr + "," + businessOut.getApprovalPersonPopedomId());
+                            businessOut.setApprovalStatusStr(approvalStatusStr + "," + status);
+                            businessOut.setApprovalTimeStr(approvalTimeStr + "," + DateUtil.format(new Date(), "yyyy-MM-dd HH:mm"));
+                            businessOut.setApprovalContentStr(approvalContentStr + "," + approvalContent);
+                        } else {
+                            businessOut.setApprovalPersonIdStr(businessOut.getApprovalPersonPopedomId());
+                            businessOut.setApprovalStatusStr(status);
+                            businessOut.setApprovalTimeStr(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm"));
+                            businessOut.setApprovalContentStr(approvalContent);
                         }
-                        //审批人数据不为0
-                        else {
-                            PersonPopedom personPopedom1 = personPopedomList.get(0);
-                            if (StringUtils.isNotBlank(approvalPersonIdStr)) {
-                                businessOut.setApprovalPersonIdStr(approvalPersonIdStr + "," + businessOut.getApprovalPersonPopedomId());
-                                businessOut.setApprovalStatusStr(approvalStatusStr + "," + status);
-                                businessOut.setApprovalTimeStr(approvalTimeStr + "," + DateUtil.format(new Date(), "yyyy-MM-dd HH:mm"));
-                                businessOut.setApprovalContentStr(approvalContentStr + "," + approvalContent);
-                            } else {
-                                businessOut.setApprovalPersonIdStr(businessOut.getApprovalPersonPopedomId());
-                                businessOut.setApprovalStatusStr(status);
-                                businessOut.setApprovalTimeStr(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm"));
-                                businessOut.setApprovalContentStr(approvalContent);
+
+                        businessOut.setApprovalPersonPopedomId(personPopedom1.getId());
+                        businessOut.setStatus("0");
+                        businessOut.setApprovalContent("");
+                        businessOut.setApprovalTime(null);
+                        update(businessOut);
+
+                        new Thread(() -> {
+                            PersonInfo approvalPerson = personInfoService.get(personPopedom1.getPersonId());
+
+                            String typeN = null;
+                            String url = null;
+                            if ("1".equals(businessOut.getType())) {
+                                typeN = "外出";
+                                url = "master/egress/verifyInfo";
+                            }
+                            if ("3".equals(businessOut.getType())) {
+                                typeN = "出差";
+                                url = "master/businessTravel/verifyInfo";
                             }
+                            String accessToken = JwtUtil2.createToken(jwtSecret, approvalPerson.getId() + "", DateTime.now().plusHours(30 * 24).toDate());
+                            WechatMessageUtil.sendEvenMessage(approvalPerson.getOpenId(), "有一条新的" + typeN + "信息待审核", person.getName(), businessOut.getApprovalNo(), "前往处理", wxConfig.getPortalUrl() + url + "?id=" + businessOut.getId() + "&exchange=1&role_id=" + personPopedom1.getId() + "&token=" + accessToken, wxConfig.getAppId(), wxConfig.getAppSecret());
 
-                            businessOut.setApprovalPersonPopedomId(personPopedom1.getId());
-                            businessOut.setStatus("0");
-                            businessOut.setApprovalContent("");
-                            businessOut.setApprovalTime(null);
-                            update(businessOut);
-
-                            new Thread(() -> {
-                                PersonInfo approvalPerson = personInfoService.get(personPopedom1.getPersonId());
-
-                                String typeN = null;
-                                String url = null;
-                                if ("1".equals(businessOut.getType())) {
-                                    typeN = "外出";
-                                    url = "master/egress/verifyInfo";
-                                }
-                                if ("3".equals(businessOut.getType())) {
-                                    typeN = "出差";
-                                    url = "master/businessTravel/verifyInfo";
-                                }
-                                String accessToken = JwtUtil2.createToken(jwtSecret, approvalPerson.getId() + "", DateTime.now().plusHours(30*24).toDate());
-                                WechatMessageUtil.sendEvenMessage(approvalPerson.getOpenId(), "有一条新的" + typeN + "信息待审核", person.getName(), businessOut.getApprovalNo(), "前往处理", wxConfig.getPortalUrl() + url+"?id=" + businessOut.getId() + "&exchange=1&role_id=" + personPopedom1.getId() + "&token=" + accessToken, wxConfig.getAppId(), wxConfig.getAppSecret());
-
-                            }).start();
-                        }
-               //     }
+                        }).start();
+                    }
+                    //     }
                 }
                 //拒绝
                 if ("2".equals(status)) {
@@ -317,8 +317,8 @@ public class BusinessOutServiceImpl implements BusinessOutService {
                             url = "master/businessTravel/info";
                         }
 
-                        String accessToken = JwtUtil2.createToken(jwtSecret, person.getId() + "", DateTime.now().plusHours(30*24).toDate());
-                        WechatMessageUtil.sendExamine(person.getOpenId(), firstMessage, person.getName(), businessOut.getStatus(), businessOut.getStatusN(), businessOut.getTypeN(), "前往查看", wxConfig.getPortalUrl() +url +"?id=" + businessOut.getId() + "&exchange=1&role_id=" + personPopedom.getId() + "&token=" + accessToken, wxConfig.getAppId(), wxConfig.getAppSecret());
+                        String accessToken = JwtUtil2.createToken(jwtSecret, person.getId() + "", DateTime.now().plusHours(30 * 24).toDate());
+                        WechatMessageUtil.sendExamine(person.getOpenId(), firstMessage, person.getName(), businessOut.getStatus(), businessOut.getStatusN(), businessOut.getTypeN(), "前往查看", wxConfig.getPortalUrl() + url + "?id=" + businessOut.getId() + "&exchange=1&role_id=" + personPopedom.getId() + "&token=" + accessToken, wxConfig.getAppId(), wxConfig.getAppSecret());
 
                     }).start();
                 }
@@ -330,47 +330,45 @@ public class BusinessOutServiceImpl implements BusinessOutService {
 
     @Override
     public void updatePersonWorkStatus(BusinessOut businessOut) {
-        try{
+        try {
             PersonPopedom personPopedom = personPopedomService.get(businessOut.getPersonPopedomId());
             PersonInfo personInfo = personInfoService.get(personPopedom.getPersonId());
 
             Date now = new Date();
 
             //如果出差开始时间<=当前时间,说明是补出差记录,可能正在出差
-            if (businessOut.getStartTime().compareTo(now) <=0){
+            if (businessOut.getStartTime().compareTo(now) <= 0) {
                 String workStatus = "";
 
-                if ("1".equals(businessOut.getType())){
+                if ("1".equals(businessOut.getType())) {
                     workStatus = "2";
-                }
-                else if ("3".equals(businessOut.getType())){
+                } else if ("3".equals(businessOut.getType())) {
                     workStatus = "3";
                 }
 
                 personInfo.setWorkStatus(workStatus);
                 personInfoService.update(personInfo);
-            }
-            else {
+            } else {
                 //如果出差开始开始时间>当前时间,则延时修改状态
-                long millisecond = DateUtil.betweenMs(now,businessOut.getStartTime());
+                long millisecond = DateUtil.betweenMs(now, businessOut.getStartTime());
 
-                log.warn("创建延时队列修改工作状态,id:"+businessOut.getId());
+                log.warn("创建延时队列修改工作状态,id:" + businessOut.getId());
 
                 rabbitTemplate.convertAndSend("businessOutDelayExchange", "businessOutSubmit",
-                        businessOut.getId(), (message)->{
-                            message.getMessageProperties().setHeader("x-delay",millisecond);
+                        businessOut.getId(), (message) -> {
+                            message.getMessageProperties().setHeader("x-delay", millisecond);
                             return message;
                         });
             }
 
-            if(businessOut.getEndTime()!=null) {
+            if (businessOut.getEndTime() != null) {
                 //如果出差结束时间<=当前时间,说明已出差结束
                 if (businessOut.getEndTime().compareTo(now) <= 0) {
                     personInfo.setWorkStatus("1");
                     personInfoService.update(personInfo);
                 } else {
                     //如果出差结束时间>当前时间,则延时修改状态
-                    long millisecond = DateUtil.betweenMs(now, businessOut.getEndTime())+60000;
+                    long millisecond = DateUtil.betweenMs(now, businessOut.getEndTime()) + 60000;
 
                     log.warn("创建延时队列修改工作状态,id:" + businessOut.getId());
 
@@ -381,8 +379,8 @@ public class BusinessOutServiceImpl implements BusinessOutService {
                             });
                 }
             }
-        }catch (Exception ex){
-            log.error(ex.getMessage(),ex);
+        } catch (Exception ex) {
+            log.error(ex.getMessage(), ex);
         }
     }
 
@@ -390,6 +388,7 @@ public class BusinessOutServiceImpl implements BusinessOutService {
     public BusinessOut findLastActiveByPersonId(Long personId) {
         return businessOutDAO.findLastActiveByPersonId(personId);
     }
+
     @Override
     public List<BusinessOut> findByPersonPopedomAndEndTimeIsNull(String personPopedomId) {
         return businessOutDAO.findByPersonPopedomAndEndTimeIsNull(personPopedomId);
@@ -401,13 +400,13 @@ public class BusinessOutServiceImpl implements BusinessOutService {
     }
 
     @Override
-    public String submitBusiness(PersonPopedom personPopedom, String type, String destination, String startTime,String endTime,String days, String estimatedTime, String content,String formId,String ids,String draft) throws Exception {
+    public String submitBusiness(PersonPopedom personPopedom, String type, String destination, String startTime, String endTime, String days, String estimatedTime, String content, String formId, String ids, String draft) throws Exception {
 
         BusinessOut businessOut = new BusinessOut();
-        if(StringUtils.isNotEmpty(ids)){
-            businessOut=businessOutDAO.get(ids);
+        if (StringUtils.isNotEmpty(ids)) {
+            businessOut = businessOutDAO.get(ids);
 
-        }else{
+        } else {
             businessOut = new BusinessOut();
             businessOut.setId(UUID.randomUUID().toString());
         }
@@ -416,7 +415,7 @@ public class BusinessOutServiceImpl implements BusinessOutService {
         businessOut.setStatus("-99");
         businessOut.setDestination(destination);
         businessOut.setStartTime(DateUtil.parse(startTime));
-      //  businessOut.setEstimatedTime(estimatedTime);
+        //  businessOut.setEstimatedTime(estimatedTime);
         /*if (estimatedTime.contains(".")){
             Integer n  = estimatedTime.indexOf(".");
             String days = estimatedTime.substring(0,n);
@@ -426,7 +425,7 @@ public class BusinessOutServiceImpl implements BusinessOutService {
             businessOut.setEstimatedDate(DateUtil.offsetDay(businessOut.getStartTime(),Integer.parseInt(estimatedTime)));
         }*/
 
-    //    businessOut.setEndTime(businessOut.getEstimatedDate());
+        //    businessOut.setEndTime(businessOut.getEstimatedDate());
         businessOut.setEndTime(DateUtil.parse(endTime));
         businessOut.setEstimatedTime(days);
         businessOut.setEstimatedDate(DateUtil.parse(endTime));
@@ -434,19 +433,19 @@ public class BusinessOutServiceImpl implements BusinessOutService {
         businessOut.setContent(content);
 
         //判断是否有重叠时间
-        List<BusinessOut> businessOutList = findByGreaterEndTime(new Date(),personPopedom.getId());
-        if (businessOutList.size()>0){
-            for (BusinessOut businessOut1 : businessOutList){
+        List<BusinessOut> businessOutList = findByGreaterEndTime(new Date(), personPopedom.getId());
+        if (businessOutList.size() > 0) {
+            for (BusinessOut businessOut1 : businessOutList) {
                 Date startTime1 = businessOut.getStartTime();
                 Date endTime1 = businessOut.getEndTime();
                 Date startTime2 = businessOut1.getStartTime();
                 Date endTime2 = businessOut1.getEndTime();
-                if (startTime1.compareTo(startTime2) <=0){
-                    if (endTime1.compareTo(startTime2)>0){
+                if (startTime1.compareTo(startTime2) <= 0) {
+                    if (endTime1.compareTo(startTime2) > 0) {
                         throw new Exception("与其他出差记录的申请时间重叠");
                     }
                 }
-                if (startTime1.compareTo(startTime2)>0 && startTime1.compareTo(endTime2) <0 ){
+                if (startTime1.compareTo(startTime2) > 0 && startTime1.compareTo(endTime2) < 0) {
                     throw new Exception("与其他出差记录的申请时间重叠");
                 }
 
@@ -454,14 +453,14 @@ public class BusinessOutServiceImpl implements BusinessOutService {
             }
         }
 
-        if(StringUtils.isNotEmpty(ids)){
+        if (StringUtils.isNotEmpty(ids)) {
             update(businessOut);
-        }else {
+        } else {
             insert(businessOut);
         }
 
         if ("1".equals(draft)) {
-            String procInstId = procinstService.addProcInst(businessOut.getId(),  "出差", formId, personPopedom, null,null,null);
+            String procInstId = procinstService.addProcInst(businessOut.getId(), "出差", formId, personPopedom, null, null, null);
 
             businessOut.setProcinstId(procInstId);
 
@@ -503,7 +502,7 @@ public class BusinessOutServiceImpl implements BusinessOutService {
             PersonInfo personInfo = personInfoService.get(personPopedom.getPersonId());
 
             UpdatePersonAttendanceDTO updatePersonAttendanceDTO = new UpdatePersonAttendanceDTO(
-                    personInfo.getId(), businessOut.getStartTime(),businessOut.getEndTime());
+                    personInfo.getId(), businessOut.getStartTime(), businessOut.getEndTime());
 
             rabbitTemplate.convertAndSend("updatePersonAttendanceQueue", updatePersonAttendanceDTO);
         }
@@ -511,35 +510,41 @@ public class BusinessOutServiceImpl implements BusinessOutService {
 
     @Override
     public List<BusinessOut> listSearch(Map<String, Object> searchParams, List<Sort> sortList) {
-        return businessOutDAO.search(searchParams,sortList);
+        return businessOutDAO.search(searchParams, sortList);
     }
 
     @Override
-    public List<BusinessOut> findByGreaterEndTime(Date date,String personPopedomId) {
-        return businessOutDAO.findByGreaterEndTime(date,personPopedomId);
+    public List<BusinessOut> findByGreaterEndTime(Date date, String personPopedomId) {
+        return businessOutDAO.findByGreaterEndTime(date, personPopedomId);
     }
 
     @Override
-    public BigDecimal sumDaysByPersonIdAndTimeRange(Long personId, Date startDate, Date endDate){
+    public BigDecimal sumDaysByPersonIdAndTimeRange(Long personId, Date startDate, Date endDate) {
         //查询时间段与出差交集部分
-        List<BusinessOut> boList = businessOutDAO.findByPersonIdAndSEDate(personId,startDate,endDate);
+        List<BusinessOut> boList = businessOutDAO.findByPersonIdAndSEDate(personId, startDate, endDate);
         BigDecimal totalAttendanceNum = BigDecimal.ZERO;
 
-        for(BusinessOut bo : boList){
+        for (BusinessOut bo : boList) {
 //            if(bo.getEstimatedTime() != null) {
 //                BigDecimal et = new BigDecimal(bo.getEstimatedTime());
 //                totalAttendanceNum = totalAttendanceNum.add(et);
 //            }
             //查询交集部分小时数
-            Date maxStartDate = bo.getStartTime().compareTo(startDate)>0 ? bo.getStartTime() : startDate;
-            Date minEndDate = bo.getEndTime().compareTo(endDate)<0 ? bo.getEndTime() : endDate;
+            Date maxStartDate = bo.getStartTime().compareTo(startDate) > 0 ? bo.getStartTime() : startDate;
+            Date minEndDate = bo.getEndTime().compareTo(endDate) < 0 ? bo.getEndTime() : endDate;
 
-            int hours = Hours.hoursBetween(new DateTime(maxStartDate),new DateTime(minEndDate)).getHours();
-            BigDecimal days = new BigDecimal(hours).divide(new BigDecimal(24),1, RoundingMode.HALF_UP);
+            int hours = Hours.hoursBetween(new DateTime(maxStartDate), new DateTime(minEndDate)).getHours();
+            BigDecimal days = new BigDecimal(hours).divide(new BigDecimal(24), 1, RoundingMode.HALF_UP);
 
             totalAttendanceNum = totalAttendanceNum.add(days);
         }
 
         return totalAttendanceNum;
     }
+
+
+    @Override
+    public List<BusinessOut> findByPersonIdAndSingleDate(Long personId, Date date) {
+        return businessOutDAO.findByPersonIdAndSingleDate(personId, date);
+    }
 }

+ 2 - 0
common/src/main/java/com/jpsoft/shinestar/modules/business/service/YearRequestForLeaveInfoService.java

@@ -1,6 +1,7 @@
 package com.jpsoft.shinestar.modules.business.service;
 
 import java.math.BigDecimal;
+import java.text.ParseException;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -28,4 +29,5 @@ public interface YearRequestForLeaveInfoService {
 	String leaveSubmit(PersonPopedom personPopedom,String startTime, String endTime, String startTimeQuantum, String endTimeQuantum, String imageUrl, String reason, String days, String formId, String activityId, String draft, String id) throws Exception;
 
 	boolean isHoliday(String startTime, String endTime)throws Exception;
+	boolean isBusinessOutStatus(Long personId,String startTime, String endTime) throws ParseException;
 }

+ 30 - 0
common/src/main/java/com/jpsoft/shinestar/modules/business/service/impl/YearRequestForLeaveInfoServiceImpl.java

@@ -77,6 +77,9 @@ public class YearRequestForLeaveInfoServiceImpl implements YearRequestForLeaveIn
 	@Autowired
 	private HolidayInfoService holidayInfoService;
 
+	@Autowired
+	private BusinessOutService businessOutService;
+
 
 	@Override
 	public YearRequestForLeaveInfo get(String id) {
@@ -619,4 +622,31 @@ public class YearRequestForLeaveInfoServiceImpl implements YearRequestForLeaveIn
 
 		return result;
 	}
+
+
+
+	//请年假的日期范围是否包含在出差的日期
+	@Override
+	public boolean isBusinessOutStatus(Long personId,String startTime, String endTime) throws ParseException {
+		boolean result = false;
+		if (StringUtil.isNotEmpty(startTime)) {
+			String startTimeStr = startTime.substring(0,10);
+			String endTimeStr = endTime.substring(0,10);
+			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
+			LocalDate startDate = LocalDate.parse(startTimeStr);
+			LocalDate endDate = LocalDate.parse(endTimeStr);
+
+			//使用循环遍历日期
+			for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) {
+				List<BusinessOut> businessOutList = businessOutService.findByPersonIdAndSingleDate(personId,sdf.parse(date.toString()));
+				if(businessOutList.size()>0){
+					result = true;
+					break;
+				}
+			}
+		}
+
+		return result;
+	}
 }

+ 19 - 0
common/src/main/resources/mapper/base/BusinessOut.xml

@@ -363,4 +363,23 @@
             order by a.create_time desc
         ]]>
     </select>
+
+    <select id="findByPersonIdAndSingleDate" resultMap="BusinessOutMap">
+        <![CDATA[
+            SELECT a.* FROM
+            base_business_out a
+            LEFT JOIN base_person_popedom b ON a.person_popedom_id = b.id_ AND b.del_flag = 0
+            where
+            b.person_id=#{personId}
+            and
+            a.start_time<=#{date}
+            and
+            a.end_time>=#{date}
+            and
+            a.status_='1'
+            and
+            a.del_flag=0
+            order by a.create_time desc
+        ]]>
+    </select>
 </mapper>

+ 6 - 3
web/src/main/java/com/jpsoft/shinestar/modules/mobile/controller/YearRequestForLeaveInfoApiController.java

@@ -188,9 +188,12 @@ public class YearRequestForLeaveInfoApiController {
             PersonInfo person = personInfoService.get(Long.parseLong(subject));
             PersonPopedom personPopedom = personPopedomService.get(person.getPopedom());
 
-            if (person.getWorkStatus().equals("3")) {
-                //正在出差中
-                throw new Exception("您的工作状态为出差,不能申请年假,请先结束出差再申请!");
+
+            boolean rsBusinessOut = yearRequestForLeaveInfoService.isBusinessOutStatus(person.getId(),startTime,endTime);
+
+            if (rsBusinessOut) {
+                //当前时间范围包含出差日期
+                throw new Exception("当前日期范围包含出差日期,不能申请年假,请重新选择!");
             }
 
             boolean rs = yearRequestForLeaveInfoService.isHoliday(startTime, endTime);