Browse Source

移动段提交

9060 6 months ago
parent
commit
9489a962cd

+ 49 - 7
app/workSheetSystem/src/main/java/com/qy/worksheetsystem/controller/PersonWorkController.java

@@ -51,6 +51,38 @@ public class PersonWorkController {
         return b;
     }
 
+    @ApiOperation(value = "获取可填报日期的已填报小时数", notes = "获取可填报日期的已填报小时数,判断每天填报是否超8小时")
+    @RequestMapping(value = "/getAvailableDateInfoByProjectID", method = RequestMethod.GET)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String"),
+            @ApiImplicitParam(name = "beginTime", value = "开始时间yyyy-MM-dd", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "endTime", value = "开始时间yyyy-MM-dd", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "projectID", value = "项目id", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "excludeTimesheetId", value = "报工id", paramType = "query", dataType = "String"),
+    })
+    public MessageResult getAvailableDateInfoByProjectID(@RequestHeader("token") String token, String beginTime,String endTime,String projectID,String excludeTimesheetId) {
+        String number = JWTUtil.getNumber(token);
+        if (StringUtils.isEmpty(number)) {
+            return MessageResult.error("token异常");
+        }
+        int isValid = DateUtil.isValidDate(beginTime, endTime);
+
+        if (isValid== 1) {
+            return MessageResultV2.error("请输入正确的日期时间,日期格式例如2022-01-01");
+        }else if (isValid== 2){
+            return MessageResultV2.error("开始时间不能大于结束时间");
+        }
+        List<Map<String,Object>> list = null;
+        if(StrUtil.isNotBlank(excludeTimesheetId)){
+            list = personWorkService.getAvailableDateInfoByProjectIDAndId(number,projectID,excludeTimesheetId,beginTime,endTime);
+        }else{
+            list = personWorkService.getAvailableDateInfoByProjectID(number,projectID,beginTime,endTime);
+        }
+        MessageResultV2 result = MessageResultV2.success();
+        result.setData(list);
+        return result;
+    }
+
     @ApiOperation(value = "获取可填报日期的已填报小时数", notes = "获取可填报日期的已填报小时数,判断每天填报是否超8小时")
     @RequestMapping(value = "/getAvailableDateInfo", method = RequestMethod.GET)
     @ApiImplicitParams({
@@ -73,9 +105,9 @@ public class PersonWorkController {
         }
         List<Map<String,Object>> list = null;
         if(StrUtil.isNotBlank(excludeTimesheetId)){
-            list =personWorkService.getAvailableDateInfoById(number,excludeTimesheetId,beginTime,endTime);
+            list = personWorkService.getAvailableDateInfoById(number,excludeTimesheetId,beginTime,endTime);
         }else{
-            list =  personWorkService.getAvailableDateInfo(number,beginTime,endTime);
+            list = personWorkService.getAvailableDateInfo(number,beginTime,endTime);
         }
         MessageResultV2 result = MessageResultV2.success();
         result.setData(list);
@@ -119,6 +151,8 @@ public class PersonWorkController {
 
             Date beginDate = format.parse(beginTime);
             Date endDate = format.parse(endTime);
+
+
             Date enterDate = format.parse(person.get("enterDate"));
             if (enterDate.compareTo(beginDate) > 0) {
                 return MessageResultV2.error("不能填报,入职日期之前的日期!");
@@ -157,6 +191,9 @@ public class PersonWorkController {
             JobBooking jobBooking = null;
             if(StrUtil.isNotBlank(eid)){
                jobBooking = personWorkService.getPersonWorkInfoById(number,eid);
+               map.put("jobBooking",jobBooking);
+            }else{
+                return MessageResultV2.error("未找到项目工时单请检查");
             }
             for (WorkHoursReportEntry jobWorkEntry : jobWork.getEntries()){
                 if(StrUtil.isNotBlank(jobWorkEntry.getJobContent())&&StrUtil.length(jobWorkEntry.getJobContent())>500){
@@ -206,11 +243,16 @@ public class PersonWorkController {
             if(StrUtil.isBlank(jobWork.getId())){
                 objectMap = personWorkService.insertWork(map);
             }else {
-                int i = personWorkService.deleteWork(number,jobWork.getId());
-                if(i<1){
-                    return MessageResult.error("更新失败");
+                Integer integer = (Integer) jobBooking.get("isBack");
+                if(null!=integer&&integer==1){
+                    objectMap = personWorkService.updateWork(map);
+                }else {
+                    int i = personWorkService.deleteWork(number, jobWork.getId());
+                    if (i < 1) {
+                        return MessageResult.error("更新失败");
+                    }
+                    objectMap = personWorkService.insertWork(map);
                 }
-                objectMap = personWorkService.insertWork(map);
             }
             if ((boolean)objectMap.get("code")) {
                 if (2==(jobWork.getState())) {
@@ -397,7 +439,7 @@ public class PersonWorkController {
         if (StringUtils.isEmpty(number)) {
             return MessageResult.error("token异常");
         }
-        JobBooking list = personWorkService.getPersonWorkInfoById(number,id);
+        JobBooking list = personWorkService.getPersonWorkInfoByIdToBack(number,id);
         MessageResult result=MessageResult.success();
         result.setData(list);
         return result;

+ 4 - 0
app/workSheetSystem/src/main/java/com/qy/worksheetsystem/controller/YunzhijiaController.java

@@ -3,6 +3,7 @@ package com.qy.worksheetsystem.controller;
 import cn.hutool.core.util.StrUtil;
 import com.qy.worksheetsystem.model.MessageResult;
 import com.qy.worksheetsystem.model.MessageResultV2;
+import com.qy.worksheetsystem.service.ProjectPersonService;
 import com.qy.worksheetsystem.service.YunzhijiaService;
 import com.qy.worksheetsystem.util.JWTUtil;
 import io.swagger.annotations.Api;
@@ -14,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
 import java.util.Map;
 
 /**云之家
@@ -32,6 +34,8 @@ public class YunzhijiaController {
 
     @Autowired
     private YunzhijiaService yunzhijiaService;
+    @Autowired
+    private ProjectPersonService projectPersonService;
     @Value("${HR.ais.effective}")
     private String effective;
     @Value("${HR.ais.password}")

+ 3 - 0
app/workSheetSystem/src/main/java/com/qy/worksheetsystem/model/entity/JobBooking.java

@@ -17,6 +17,9 @@ public class JobBooking extends HashMap {
     private String projectName;
     private String projectId;
     private String WorkingHours;
+    private String createTime;
+    private Integer maxReportDay;
+    private Integer isBack;
     private JobBookPerson person;
     private List<JobBookingEntry> entries;
 

+ 8 - 0
app/workSheetSystem/src/main/java/com/qy/worksheetsystem/model/mapper/PersonWorkMapper.java

@@ -26,9 +26,17 @@ public interface PersonWorkMapper {
 
         List<Map<String,Object>> getPersonWorkSumInfo(String number,String beginTime, String endTime, Boolean state);
         JobBooking getPersonWorkInfoById(String number,String id);
+        JobBooking getPersonWorkInfoByIdToBack(String number,String id);
 
         int deleteWork(String id);
         int deleteWorkEntry(String id);
 
         int checkWorkSibmit(@Param("bill") Map<String, Object> bill);
+
+        int updateBack(String backInt,String id);
+
+        int updateBill(@Param("billList")List<Map<String, Object>> billList);
+
+        int updateWork(@Param("workList")List<Map<String, Object>> workList);
+
 }

+ 88 - 9
app/workSheetSystem/src/main/java/com/qy/worksheetsystem/model/mapper/PersonWorkMapper.xml

@@ -81,11 +81,12 @@
     <!---->
     <select id="getPersonWorkListV2" resultMap="JobBookingEntry">
         select whr.fid "id",to_char(whr.CFFILLINGSTARTDATE,'YYYY-MM-DD') "startDate",
-        to_char(whr.CFFILLINGENDDATE,'YYYY-MM-DD')  "endDate" , whr.FBILLSTATE "state",
+        to_char(whr.CFFILLINGENDDATE,'YYYY-MM-DD')  "endDate" ,
+               (case when nvl(whr.CFIsBack,1)=1 then 0 else whr.FBILLSTATE end) "state",
         p.fid "personId",p.fname_l2 "personName",p.fnumber "personNumber",
         pm.CFPROJECTNAME "projectName",pm.fid "projectId",
         to_char(hre.CFDATA,'YYYY-MM-DD') "workingDate",hre.CFWORKINGHOURS "workingHours",
-        hre.CFNOTES "notes",hre.FSEQ "seq",
+        hre.CFNOTES "notes",hre.FSEQ "seq", whr.CFIsBack as "isBack",
         hre.fid "entryId",whr.FDESCRIPTION "jobContent"
         from
         CT_PRO_WorkHoursReportEntry hre
@@ -97,10 +98,10 @@
         and  hre.CfData BETWEEN to_date(#{beginTime},'YYYY-MM-DD')
         AND  to_date(#{endTime},'YYYY-MM-DD')
         <if test="state==true">
-            and whr.fbillState!=0
+            and whr.fbillState!=0 and nvl(whr.CFIsBack,0)=0
         </if>
         <if test="state==false">
-            and whr.fbillState=0
+            and whr.fbillState in(0,1,2) and nvl(whr.CFIsBack,1)=1
         </if>
         order by "workingDate" desc, "projectId"
     </select>
@@ -123,7 +124,6 @@
         group by whr.fbillState
     </select>
 
-
     <insert id="insertBill" parameterType="java.util.List" >
         insert
         into CT_PRO_WorkHoursReport(
@@ -139,7 +139,7 @@
             SELECT
             #{item.affiliatedProject}, #{item.adminOrg}, #{item.hrOrgUnit},
             #{item.billState}, #{item.number},  SYSDATE,
-            #{item.creator}, SYSDATE, #{item.lastUpdateUser},
+            #{item.creator},  #{item.createTime}, #{item.lastUpdateUser},
             SYSDATE, #{item.CU}, #{item.id},
             'employeeReport', to_date(#{item.fillingStartDate},'YYYY-MM-DD'), to_date(#{item.fillingEndDate},'YYYY-MM-DD'),
             #{item.jobContent},
@@ -163,6 +163,59 @@
             FROM dual
         </foreach>
     </insert>
+
+    <update id="updateBill" parameterType="java.util.List">
+        MERGE INTO CT_PRO_WorkHoursReport taB
+        USING (
+            <foreach collection="billList" item="item" index="index" separator="UNION ALL">
+                SELECT
+                #{item.id} as FID,
+                #{item.affiliatedProject} as CFAffiliatedProjec, #{item.adminOrg} as FAdminOrgUnitId,
+                #{item.hrOrgUnit} as FHROrgUnitID, #{item.billState} as FBillState,
+                #{item.number} as FNumber,  SYSDATE as FBizDate,
+                #{item.lastUpdateUser} as FLastUpdateUserID,SYSDATE as FLastUpdateTime,
+                #{item.CU} as FControlUnitID, 'employeeReport' as CFDataSource,
+                       to_date(#{item.fillingStartDate},'YYYY-MM-DD') as CFFillingStartDate,
+                       to_date(#{item.fillingEndDate},'YYYY-MM-DD') as CFFillingEndDate,
+                #{item.jobContent} as FDESCRIPTION ,
+                #{item.personId} as CFPERSONID, #{item.ptypeId} as CFPROJECTTYPEID,
+                #{item.projectRoleId} as CFPROJECTROLEID, #{item.WorkingHours} as CFWORKINGHOURS
+                FROM dual
+            </foreach>
+        ) soB
+        ON (taB.fid = soB.fid)
+        WHEN MATCHED THEN
+        UPDATE SET
+        taB.CFAffiliatedProjec=soB.CFAffiliatedProjec,taB.FAdminOrgUnitId=soB.FAdminOrgUnitId,
+        taB.FHROrgUnitID=soB.FHROrgUnitID,taB.FBillState=soB.FBillState,
+        taB.FNumber=soB.FNumber,taB.FBizDate=soB.FBizDate,
+        taB.FLastUpdateUserID=soB.FLastUpdateUserID,taB.FLastUpdateTime=soB.FLastUpdateTime,
+        taB.FControlUnitID=soB.FControlUnitID,taB.CFDataSource=soB.CFDataSource,
+        taB.CFFillingStartDate=soB.CFFillingStartDate,taB.CFFillingEndDate=soB.CFFillingEndDate,
+        taB.FDESCRIPTION=soB.FDESCRIPTION,
+        taB.CFPERSONID= soB.CFPERSONID,taB.CFPROJECTTYPEID=soB.CFPROJECTTYPEID,
+        taB.CFPROJECTROLEID=soB.CFPROJECTROLEID,taB.CFWORKINGHOURS=soB.CFWORKINGHOURS
+    </update>
+    <update id="updateWork" parameterType="java.util.List">
+        MERGE INTO CT_PRO_WorkHoursReportEntry taB
+        USING (
+        <foreach collection="workList" item="item" index="index" separator="UNION ALL">
+            SELECT
+            #{item.parent},#{item.employee},
+            #{item.clockTime},#{item.clockLocation},to_date(#{item.clockTime},'YYYY-MM-DD'),
+            #{item.WorkingHours},#{item.notes},
+            #{item.seq}, #{item.fid}
+            FROM dual
+        </foreach>
+        ) soB
+        ON (taB.fid = soB.fid)
+        WHEN MATCHED THEN
+        UPDATE SET
+        taB.FParentID=soB.FParentID,taB.CFEmployeeID=soB.CFEmployeeID,taB.CFClockTime=soB.CFClockTime,
+        taB.CFClockLocation=soB.CFClockLocation,taB.CFData=soB.CFData,taB.CFWorkingHours=soB.CFWorkingHours,
+        taB.CFNotes=soB.CFNotes,taB.FSeq=soB.FSeq
+    </update>
+
     <resultMap id="JobBookingEntry" type="com.qy.worksheetsystem.model.entity.JobBooking" >
         <id column="id" property="id"/>
         <result column="startDate" property="beginTime"/>
@@ -172,6 +225,10 @@
         <result column="projectName" property="projectName"/>
         <result column="projectId" property="projectId"/>
         <result column="jobContent" property="jobContent"/>
+        <result column="createTime" property="createTime"/>
+        <result column="maxReportDay" property="maxReportDay"/>
+        <result column="isBack" property="isBack"/>
+
         <association property="person" javaType="com.qy.worksheetsystem.model.entity.JobBookPerson">
             <id property="personId" column="personId" />
             <result column="personName" property="personName" />
@@ -192,8 +249,10 @@
         p.fid "personId",p.fname_l2 "personName",p.fnumber "personNumber",
         pm.CFPROJECTNAME "projectName",pm.fid "projectId",
         to_char(hre.CFDATA,'YYYY-MM-DD') "workingDate",hre.CFWORKINGHOURS "workingHours",
-        hre.CFNOTES "notes",hre.FSEQ "seq",
-        hre.fid "entryId",whr.FDESCRIPTION "jobContent"
+        hre.CFNOTES "notes",hre.FSEQ "seq",to_char(whr.FCREATETIME,'YYYY-MM-DD') "createTime",
+        hre.fid "entryId",whr.FDESCRIPTION "jobContent",
+        (case when whr.CFIsBack=1 then 0 else pm.CFcpDeadline end)as "maxReportDay",
+        whr.CFIsBack as "isBack"
         from
         CT_PRO_WorkHoursReportEntry hre
         left join CT_PRO_WorkHoursReport whr on whr.fid=hre.FParentID
@@ -202,6 +261,24 @@
         where whr.fid =#{id}
         and whr.CFDATASOURCE='employeeReport'
     </select>
+    <select id="getPersonWorkInfoByIdToBack" resultMap="JobBookingEntry">
+        select whr.fid "id",to_char(whr.CFFILLINGSTARTDATE,'YYYY-MM-DD') "startDate",
+               to_char(whr.CFFILLINGENDDATE,'YYYY-MM-DD')  "endDate" , (case when nvl(whr.CFIsBack,1)=1 then 0 else whr.FBILLSTATE end) "state",
+               p.fid "personId",p.fname_l2 "personName",p.fnumber "personNumber",
+               pm.CFPROJECTNAME "projectName",pm.fid "projectId",
+               to_char(hre.CFDATA,'YYYY-MM-DD') "workingDate",hre.CFWORKINGHOURS "workingHours",
+               hre.CFNOTES "notes",hre.FSEQ "seq",to_char(whr.FCREATETIME,'YYYY-MM-DD') "createTime",
+               hre.fid "entryId",whr.FDESCRIPTION "jobContent",
+               (case when whr.CFIsBack=1 then 0 else pm.CFcpDeadline end)as "maxReportDay",
+               whr.CFIsBack as "isBack"
+        from
+            CT_PRO_WorkHoursReportEntry hre
+                left join CT_PRO_WorkHoursReport whr on whr.fid=hre.FParentID
+                left join CT_PRO_ProjectManagement pm on pm.FID=whr.CFAffiliatedProjec
+                left join t_bd_person p on hre.CFEmployeeID=p.FID
+        where whr.fid =#{id}
+          and whr.CFDATASOURCE='employeeReport'
+    </select>
     <select id="checkWorkSibmit" resultType="java.lang.Integer">
         select count(fid) from CT_PRO_WorkHoursReport
         where CFAFFILIATEDPROJEC=#{affiliatedProject}
@@ -220,5 +297,7 @@
     <delete id="deleteWorkEntry" parameterType="String">
         delete CT_PRO_WorkHoursReportEntry where FPARENTID =#{id}
     </delete>
-
+    <update id="updateBack" parameterType="String">
+        update CT_PRO_WorkHoursReport set CFIsBack=#{backInt} where FPARENTID =#{id}
+    </update>
 </mapper>

+ 1 - 1
app/workSheetSystem/src/main/java/com/qy/worksheetsystem/model/mapper/ProjectMapper.java

@@ -82,7 +82,7 @@ public interface ProjectMapper {
      * @param id
      * @return
      */
-    @Select("select CFProjectName as \"projectName\" ,FNumber as \"number\"  from CT_PRO_ProjectManagement where fid =#{id}")
+    @Select("select CFProjectName as \"projectName\" ,FNumber as \"number\" ,CFcpDeadline as \"maxReportDay\"  from CT_PRO_ProjectManagement where fid =#{id}")
     List<Map<String, String>> getProjectManagementInfoBYId(@Param("id") String id);
 
     /**

+ 6 - 21
app/workSheetSystem/src/main/java/com/qy/worksheetsystem/model/mapper/ProjectMapper.xml

@@ -74,7 +74,8 @@
         projectManagement.CFProjectLevel as "projectLevel" ,
         projectManagement.CFProjectState as "projectState",
         projectManagement.CFBeingChanged as "beingChanged" ,
-        projectManagement.CFChangedManDays as "changedManDays"
+        projectManagement.CFChangedManDays as "changedManDays",
+        projectManagement.CFcpDeadline as "maxReportDay"
         from CT_PRO_MemberManagement memberManagement
         left join CT_PRO_ProjectManagement projectManagement on memberManagement.CFPROJECTMANAGEMENID =
         projectManagement.fid
@@ -100,7 +101,8 @@
                projectManagement.CFExpectedEndTime as "expectedEndTime",
                projectType.fname_l2                as "projectTypeName",
                projectType.fid                     as "projectTypeId",
-               projectType.fnumber                 as "projectTypeNumber"
+               projectType.fnumber                 as "projectTypeNumber",
+               projectManagement.CFcpDeadline as "maxReportDay"
             from CT_PRO_MemberManagement memberManagement
                  left join CT_PRO_ProjectRole projectRole on projectRole.fid = memberManagement.CFProjectRoleID
             left join T_BD_person person on person.fid = memberManagement.CFEmployeeID
@@ -110,31 +112,14 @@
         where projectManagement.fid = #{perobjectId}  order by  projectType.fnumber ,projectRole.fnumber ,projectManagement.CFEXPECTEDENDTIME desc
     </select>
     <select id="getProjectListByState" resultType="java.util.Map">
-        <!--        select fid as "id" ,fnumber as "number" ,CFProjectName as "name" from CT_PRO_ProjectManagement-->
-        <!--                where CFExpectedEndTime-->
-        <!--                <if test="state==1">-->
-        <!--                    &gt;=-->
-        <!--                </if>-->
-        <!--                <if test="state==0">-->
-        <!--                    &lt;=-->
-        <!--                </if>-->
-        <!--                to_date(#{dateTime},'YYYY-MM-DD')-->
-        <!--                  and CFProjectManagerID = (select fid from T_bd_person where fnumber = #{personNumber})-->
-
-        <!--   SELECT CFPROJECTMANAGEMENID as "id" ,-->
-        <!--   CFPROJECTCODE as "funumber" ,-->
-        <!--   CFPROJECTNAME as "name",-->
-        <!--   fid as "memberManagementId"-->
-        <!--   FROM CT_PRO_MemberManagement-->
-        <!--   where CFEMPLOYEEId =(select fid from T_bd_person where fnumber =#{personNumber})-->
         SELECT
         projectManagement.fid as "id",
         projectManagement.FNUMBER as "number",
-        projectManagement.CFPROJECTNAME as "name"
+        projectManagement.CFPROJECTNAME as "name",
+        projectManagement.CFcpDeadline as "maxReportDay"
         FROM CT_PRO_MemberManagement memberManagement
         left join CT_PRO_ProjectManagement projectManagement on memberManagement.CFPROJECTMANAGEMENID =projectManagement.fid
         where CFEMPLOYEEId =(select fid from T_bd_person where fnumber =#{personNumber}) and CFSTATE = 1 and CFPROJECTSTATE in(1)
-
     </select>
 
 </mapper>

+ 10 - 2
app/workSheetSystem/src/main/java/com/qy/worksheetsystem/service/PersonWorkService.java

@@ -19,10 +19,17 @@ public interface PersonWorkService {
     public Map<String,Object> insertWork(Map<String,Object> param);
     @Transactional
     public Map<String,Object> insertWork(Map<String,Object> param,  SHRClient shrClient);
+    @Transactional
+    public Map<String,Object> updateWork(Map<String,Object> param);
 
-    List<Map<String, Object>> getAvailableDateInfoById(String number, String id, String startDate, String endDate);
+    public  List<Map<String, Object>> getAvailableDateInfoById(String number, String id, String startDate, String endDate);
 
     public List<Map<String, Object>> getAvailableDateInfo(String number, String startDate, String endDate);
+
+    public List<Map<String, Object>> getAvailableDateInfoByProjectIDAndId(String number,String projectID, String id, String startDate, String endDate);
+
+    public List<Map<String, Object>> getAvailableDateInfoByProjectID(String number,String projectID, String startDate, String endDate);
+
     List<Map<String,Object>> getPersonWorkList(String number,String beginTime, String endTime, Boolean state);
 
     List<JobBooking>  getPersonWorkListV2(String number, String beginTime, String endTime, Boolean state);
@@ -31,7 +38,8 @@ public interface PersonWorkService {
     List<Map<String,Object>> getPersonWorkSumInfo(String number, String beginTime, String endTime, Boolean state);
 
     JobBooking getPersonWorkInfoById(String number, String id);
-
+    //处理打回状态
+    JobBooking getPersonWorkInfoByIdToBack(String number, String id);
     @Transactional
     int deleteWork(String number, String id);
 

+ 203 - 31
app/workSheetSystem/src/main/java/com/qy/worksheetsystem/service/impl/PersonWorkServiceImpl.java

@@ -20,6 +20,7 @@ import com.qy.worksheetsystem.util.SnowflakeUtils;
 import com.qy.worksheetsystem.vo.WorkHoursReport;
 import com.qy.worksheetsystem.vo.WorkHoursReportEntry;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.http.HttpException;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -82,6 +83,96 @@ public class PersonWorkServiceImpl implements PersonWorkService {
         }
         return result;
     }
+    @Override
+    @Transactional
+    public synchronized Map<String, Object> updateWork(Map<String, Object> param) {
+        List<Map<String, Object>> billList = Lists.newArrayList();
+        List<Map<String, Object>> workList = Lists.newArrayList();
+        int begin = (int) param.get("begin");
+        int end = (int) param.get("end");
+        JobBooking jobBooking = (JobBooking) param.get("jobBooking");
+        String yearMonth = (String) param.get("yearMonth");
+        WorkHoursReport jobWork = (WorkHoursReport) param.get("jobWork");
+        Map<String, String> person = (Map<String, String>) param.get("person");
+        Date beginDate = (Date) param.get("beginDate");
+        Date endDate = (Date) param.get("endDate");
+        Map<String, Map<String, Object>> availableMap = (Map<String, Map<String, Object>>) param.get("availableMap");
+        Map<String, Object> reMap = Maps.newHashMap();
+        try {
+            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+            Integer Hours = 0;
+            for (WorkHoursReportEntry jobWorkEntry : jobWork.getEntries()) {
+                String workingHours = jobWorkEntry.getWorkingHours();
+                BigDecimal Hour = new BigDecimal(workingHours);
+                Hours += Hour.intValue();
+                String projectId = jobWorkEntry.getProjectId();
+                Map<String, String> pros = personService.getProjectManagementInfoBYId(projectId, person.get("id"));
+                if (null == pros && pros.isEmpty()) {
+                    throw new Exception("没有找到项目,请检查");
+                }
+                String number = SnowflakeUtils.getInstance().getSnowflake().nextIdStr();
+                Map<String, Object> map = Maps.newHashMap();
+                String str = "";
+                Map<String, Object> billMap = new HashMap<>();
+                billMap.put("id", jobWork.getId());
+                billMap.put("isBack", 0);
+                billMap.put("affiliatedProject", projectId);
+                billMap.put("fillingStartDate", jobWork.getBeginTime());
+                billMap.put("fillingEndDate", jobWork.getEndTime());
+                billMap.put("adminOrg", person.get("adminOrgId"));
+                billMap.put("hrOrgUnit", person.get("hrOrgUnitID"));
+                billMap.put("billState", jobBooking.get("state"));
+                billMap.put("personId", person.get("id"));
+                billMap.put("ptypeId", pros.get("ptypeId"));
+                billMap.put("projectRoleId", pros.get("projectRoleId"));
+                billMap.put("number", number);
+                billMap.put("CU", person.get("controlUnitID"));
+                billMap.put("lastUpdateUser", person.get("userID"));
+                billMap.put("jobContent", jobWorkEntry.getJobContent());
+                BigDecimal WorkingHoursSum = BigDecimal.ZERO;
+                for (int i = begin; i <= end; i++) {
+                    Map<String, Object> objectMap = Maps.newHashMap();
+                    String iday = "01";
+                    if (i < 10) {
+                        iday = "0" + i;
+                    } else {
+                        iday = i + "";
+                    }
+                    String reportDate = yearMonth + iday;
+                    Map<String, Object> avMap = availableMap.get(reportDate);
+                    BigDecimal availableWorkHous = (BigDecimal) avMap.get("availableWorkHours");
+                    BigDecimal workHours = (BigDecimal) avMap.get("workHours");
+                    objectMap.put("parent", jobWork.getId());
+                    objectMap.put("employee", person.get("id"));
+                    objectMap.put("clockTime", reportDate);
+                    objectMap.put("clockLocation", "移动端");
+                    objectMap.put("data", reportDate);
+                    objectMap.put("WorkingHours", Hour);
+                    objectMap.put("notes", "");
+                    objectMap.put("seq", i);
+                    workList.add(objectMap);
+                }
+                billMap.put("WorkingHours", Hour);
+                billList.add(billMap);
+            }
+
+            int bInt = personWorkMapper.updateBill(billList);
+            int dwInt = personWorkMapper.deleteWorkEntry(jobWork.getId());
+            int wInt = personWorkMapper.insertWork(workList);
+            reMap.put("billList", billList);
+            reMap.put("workList", workList);
+            reMap.put("code", (billList.size() + workList.size()) == (bInt + wInt));
+            return reMap;
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            for (Map<String, Object> bill : billList) {
+                this.deleteWork(person.get("personNumber"), (String) bill.get("id"));
+            }
+            reMap.put("errMsg", e.getMessage());
+            reMap.put("code", false);
+        }
+        return reMap;
+    }
 
     @Override
     @Transactional
@@ -106,13 +197,12 @@ public class PersonWorkServiceImpl implements PersonWorkService {
                 Hours += Hour.intValue();
                 String projectId = jobWorkEntry.getProjectId();
                 Map<String, String> pros = personService.getProjectManagementInfoBYId(projectId, person.get("id"));
-                if (null==pros&&pros.isEmpty()) {
+                if (null == pros && pros.isEmpty()) {
                     throw new Exception("没有找到项目,请检查");
                 }
                 String number = SnowflakeUtils.getInstance().getSnowflake().nextIdStr();
                 Map<String, Object> map = Maps.newHashMap();
                 String str = "";
-
                 Response response = shrClient.executeServiceByLongConnection(url, codingRuleService, map);
                 str = (String) response.getData();
                 if (StrUtil.isNotBlank(str)) {
@@ -125,6 +215,7 @@ public class PersonWorkServiceImpl implements PersonWorkService {
                     }
                 }
 
+
                 Map<String, Object> billMap = new HashMap<>();
                 String billID = personWorkMapper.selectBillKey(String.valueOf(number));
                 billMap.put("id", billID);
@@ -141,6 +232,10 @@ public class PersonWorkServiceImpl implements PersonWorkService {
                 billMap.put("CU", person.get("controlUnitID"));
                 Date createTime = new Date();
                 billMap.put("creator", person.get("userID"));
+                if (StringUtils.isNotBlank((String) param.get("createTime"))) {
+                    createTime = format.parse((String) param.get("createTime"));
+                }
+                billMap.put("createTime", createTime);
                 billMap.put("lastUpdateUser", person.get("userID"));
                 billMap.put("jobContent", jobWorkEntry.getJobContent());
                 BigDecimal WorkingHoursSum = BigDecimal.ZERO;
@@ -222,6 +317,40 @@ public class PersonWorkServiceImpl implements PersonWorkService {
         return list;
     }
 
+    @Override
+    public List<Map<String, Object>> getAvailableDateInfoByProjectIDAndId(String number, String projectID, String id, String startDate, String endDate) {
+        Map<String, String> person = personService.getPersonByJobNo(number);
+        List<Map<String, Object>> list = personWorkMapper.getAvailableDateInfoById(person.get("id"), id, startDate, endDate);
+        for (Map<String, Object> map : list) {
+
+            BigDecimal workHours = (BigDecimal) map.get("workHours");
+            if (null != workHours) {
+                map.put("availableWorkHours", h8.subtract(workHours));
+            } else {
+                map.put("workHours", BigDecimal.ZERO);
+                map.put("availableWorkHours", h8);
+            }
+        }
+        return list;
+    }
+
+    @Override
+    public List<Map<String, Object>> getAvailableDateInfoByProjectID(String number, String projectID, String startDate, String endDate) {
+        Map<String, String> person = personService.getPersonByJobNo(number);
+        List<Map<String, Object>> list = personWorkMapper.getAvailableDateInfo(person.get("id"), startDate, endDate);
+        for (Map<String, Object> map : list) {
+
+            BigDecimal workHours = (BigDecimal) map.get("workHours");
+            if (null != workHours) {
+                map.put("availableWorkHours", h8.subtract(workHours));
+            } else {
+                map.put("workHours", BigDecimal.ZERO);
+                map.put("availableWorkHours", h8);
+            }
+        }
+        return list;
+    }
+
     @Override
     public List<Map<String, Object>> getPersonWorkList(String number, String beginTime, String endTime, Boolean state) {
         List<Map<String, Object>> list = personWorkMapper.getPersonWorkList(number, beginTime, endTime, state);
@@ -291,19 +420,46 @@ public class PersonWorkServiceImpl implements PersonWorkService {
 
         for (JobBookingEntry jobEntry : (List<JobBookingEntry>) e.get("entries")) {
 
-            workingHours =new BigDecimal(jobEntry.getWorkingHours());
+            workingHours = new BigDecimal(jobEntry.getWorkingHours());
 
         }
         e.put("WorkingHours", workingHours.toPlainString());
         return e;
     }
+    @Override
+    public JobBooking getPersonWorkInfoByIdToBack(String number, String id) {
+        JobBooking e = personWorkMapper.getPersonWorkInfoByIdToBack(number, id);
+        BigDecimal workingHours = BigDecimal.ZERO;
+
+        for (JobBookingEntry jobEntry : (List<JobBookingEntry>) e.get("entries")) {
 
+            workingHours = new BigDecimal(jobEntry.getWorkingHours());
+
+        }
+        e.put("WorkingHours", workingHours.toPlainString());
+        return e;
+    }
     @Override
     @Transactional
     public int deleteWork(String number, String id) {
-        int x = personWorkMapper.deleteWorkEntry(id);
-        int i = personWorkMapper.deleteWork(id);
-        return i;
+        Map<String,Object> JobBooking = personWorkMapper.getPersonWorkInfoById(number,id);
+        Integer state = (Integer) JobBooking.get("state");
+        Map<String, Object> map = Maps.newHashMap();
+        if(state==0) {
+            int x = personWorkMapper.deleteWorkEntry(id);
+            int i = personWorkMapper.deleteWork(id);
+
+            map.put("code", (i > 0 ? 1 : 0));
+            map.put("work", i);
+            map.put("workEntry", x);
+        }else {
+
+            map.put("code", 0);
+            map.put("work", 0);
+            map.put("workEntry", 0);
+            map.put("msg", "打回状态不能删除");
+        }
+        return state==0?1:state;
     }
 
     @Override
@@ -334,10 +490,10 @@ public class PersonWorkServiceImpl implements PersonWorkService {
     @Transactional
     public int submitWork(String number, String id) {
         SHRClient shrClient = null;
-        int result =0;
+        int result = 0;
         try {
             shrClient = new SHRClient(url, number);
-            result= this.submitWork(number, id, shrClient);
+            result = this.submitWork(number, id, shrClient);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
         } finally {
@@ -382,10 +538,10 @@ public class PersonWorkServiceImpl implements PersonWorkService {
     @Transactional
     public int revocaWork(String number, String id) {
         SHRClient shrClient = null;
-        int result=0;
+        int result = 0;
         try {
             shrClient = new SHRClient(url, number);
-            result= this.revocaWork(number, id, shrClient);
+            result = this.revocaWork(number, id, shrClient);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
         } finally {
@@ -402,14 +558,26 @@ public class PersonWorkServiceImpl implements PersonWorkService {
     @Override
     @Transactional
     public Map<String, Object> deleteWorkToMap(String number, String id) {
-        int x = personWorkMapper.deleteWorkEntry(id);
-        int i = personWorkMapper.deleteWork(id);
+        Map<String,Object> JobBooking = personWorkMapper.getPersonWorkInfoById(number,id);
+        Integer state = (Integer) JobBooking.get("state");
         Map<String, Object> map = Maps.newHashMap();
-        map.put("code", (i > 0 ? 1 : 0));
-        map.put("work", i);
-        map.put("workEntry", x);
+        if(state==0) {
+            int x = personWorkMapper.deleteWorkEntry(id);
+            int i = personWorkMapper.deleteWork(id);
+
+            map.put("code", (i > 0 ? 1 : 0));
+            map.put("work", i);
+            map.put("workEntry", x);
+        }else {
+
+            map.put("code", 0);
+            map.put("work", 0);
+            map.put("workEntry", 0);
+            map.put("msg", "打回状态不能删除");
+        }
         return map;
     }
+
     @Override
     @Transactional
     public Map<String, Object> submitWorkToMap(String number, String id, SHRClient shrClient) {
@@ -417,33 +585,37 @@ public class PersonWorkServiceImpl implements PersonWorkService {
         map.put("billId", id);//  单据id
         map.put("status", "1");//  单据id
         try {
-            Response response = shrClient.executeServiceByLongConnection(url, serviceName, map);
-            String str = (String) response.getData();
+            //int upInt = personWorkMapper.updateBack("0", id);
             map.put("code", 0);
-            if (StrUtil.isNotBlank(str)) {
-                if (JSONUtil.isTypeJSON(str)) {
-                    JSONObject j = JSONUtil.parseObj(str);
-                    String code = j.getStr("code");
-                    if ("200".equals(code)) {
-                        map.put("code", 1);
+
+                Response response = shrClient.executeServiceByLongConnection(url, serviceName, map);
+                String str = (String) response.getData();
+                if (StrUtil.isNotBlank(str)) {
+                    if (JSONUtil.isTypeJSON(str)) {
+                        JSONObject j = JSONUtil.parseObj(str);
+                        String code = j.getStr("code");
+                        if ("200".equals(code)) {
+                            map.put("code", 1);
+                        }
+                    } else {
+                        map.put("msg", str);
                     }
-                } else {
-                    map.put("msg", str);
                 }
-            }
+
         } catch (Exception e) {
             log.error(e.getMessage(), e);
         }
         return map;
     }
+
     @Override
     @Transactional
     public Map<String, Object> submitWorkToMap(String number, String id) {
-        Map<String, Object> result=null;
+        Map<String, Object> result = null;
         SHRClient shrClient = null;
         try {
             shrClient = new SHRClient(url, number);
-            result= this.submitWorkToMap(number, id, shrClient);
+            result = this.submitWorkToMap(number, id, shrClient);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
         } finally {
@@ -456,6 +628,7 @@ public class PersonWorkServiceImpl implements PersonWorkService {
         }
         return result;
     }
+
     @Override
     @Transactional
     public Map<String, Object> revocaWorkToMap(String number, String id, SHRClient shrClient) {
@@ -491,11 +664,11 @@ public class PersonWorkServiceImpl implements PersonWorkService {
     @Override
     @Transactional
     public Map<String, Object> revocaWorkToMap(String number, String id) {
-        Map<String, Object> result=null;
+        Map<String, Object> result = null;
         SHRClient shrClient = null;
         try {
             shrClient = new SHRClient(url, number);
-            result= this.revocaWorkToMap(number, id, shrClient);
+            result = this.revocaWorkToMap(number, id, shrClient);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
         } finally {
@@ -510,5 +683,4 @@ public class PersonWorkServiceImpl implements PersonWorkService {
     }
 
 
-
 }