Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

sangwenwei 9 месяцев назад
Родитель
Сommit
18cc9297cb
52 измененных файлов с 4544 добавлено и 223 удалено
  1. 14 10
      src/main/java/com/jeeplus/modules/projectcontentinfo/web/ProjectReportRecordController.java
  2. 6 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/dao/RuralProjectRecordsDao.java
  3. 74 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectRecordsService.java
  4. 13 9
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/ProjectPaperFilingController.java
  5. 18 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectMessageController.java
  6. 15 11
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectMessageNewController.java
  7. 14 10
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectMessageNewTwoController.java
  8. 122 15
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectRecordsController.java
  9. 17 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectMessageAllController.java
  10. 15 11
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectMessageNewController.java
  11. 13 9
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectMessageNewTwoController.java
  12. 111 15
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectRecordsController.java
  13. 21 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectSignatureOldMessageDisposeController.java
  14. 26 16
      src/main/java/com/jeeplus/modules/szCenterservice/service/szCloud/FinanceInvoiceRequest.java
  15. 18 14
      src/main/java/com/jeeplus/modules/workclientinfo/web/WorkClientInfoController.java
  16. 20 15
      src/main/java/com/jeeplus/modules/workcontractinfo/web/WorkContractInfoController.java
  17. 19 15
      src/main/java/com/jeeplus/modules/workcontractrecord/web/WorkContractRecordController.java
  18. 7 1
      src/main/java/com/jeeplus/modules/workfullmanage/service/WorkFullManageService.java
  19. 14 0
      src/main/java/com/jeeplus/modules/workinvoice/dao/WorkInvoiceDao.java
  20. 18 0
      src/main/java/com/jeeplus/modules/workinvoice/entity/WorkInvoice.java
  21. 89 0
      src/main/java/com/jeeplus/modules/workinvoice/service/WorkInvoiceService.java
  22. 16 0
      src/main/java/com/jeeplus/modules/workinvoice/web/WorkInvoiceTwoController.java
  23. 26 1
      src/main/java/com/jeeplus/modules/workprojectnotify/web/WorkProjectNotifyController.java
  24. 2 0
      src/main/resources/jeeplus.properties
  25. 7 0
      src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectRecordsDao.xml
  26. 117 5
      src/main/resources/mappings/modules/workinvoice/WorkInvoiceDao.xml
  27. 8 1
      src/main/webapp/webpage/modules/filialeWorkInvoice/filialeConditionWorkInvoiceAudit.jsp
  28. 8 1
      src/main/webapp/webpage/modules/filialeWorkInvoice/filialeWorkInvoiceAudit.jsp
  29. 8 1
      src/main/webapp/webpage/modules/filialeWorkInvoice/filialeWorkInvoiceAuditEnd.jsp
  30. 14 0
      src/main/webapp/webpage/modules/ruralprojectrecords/cost/projectcontentinfo/adminReportEditForm.jsp
  31. 13 2
      src/main/webapp/webpage/modules/ruralprojectrecords/cost/ruralCostProjectRecordsForm.jsp
  32. 4 0
      src/main/webapp/webpage/modules/ruralprojectrecords/cost/ruralCostProjectRecordsList.jsp
  33. 1466 0
      src/main/webapp/webpage/modules/ruralprojectrecords/cost/ruralCostProjectRecordsUpdateContractForm.jsp
  34. 4 0
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralProjectRecordsList.jsp
  35. 1474 0
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralProjectRecordsUpdateContractForm.jsp
  36. 16 0
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/all/adminReportEditFormAlls.jsp
  37. 6 0
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/projectRecordsMessageModify.jsp
  38. 8 1
      src/main/webapp/webpage/modules/workinvoice/conditionWorkInvoiceAudit.jsp
  39. 17 1
      src/main/webapp/webpage/modules/workinvoice/workInvoiceAllForm.jsp
  40. 17 1
      src/main/webapp/webpage/modules/workinvoice/workInvoiceAllModify.jsp
  41. 56 10
      src/main/webapp/webpage/modules/workinvoice/workInvoiceAudit.jsp
  42. 13 1
      src/main/webapp/webpage/modules/workinvoice/workInvoiceAuditEnd.jsp
  43. 44 9
      src/main/webapp/webpage/modules/workinvoice/workInvoiceExamineAudit.jsp
  44. 48 13
      src/main/webapp/webpage/modules/workinvoice/workInvoiceExamineAuditEnd.jsp
  45. 143 8
      src/main/webapp/webpage/modules/workinvoice/workInvoiceExamineModify.jsp
  46. 95 4
      src/main/webapp/webpage/modules/workinvoice/workInvoiceModify.jsp
  47. 14 1
      src/main/webapp/webpage/modules/workinvoice/workInvoiceNotProjectAudit.jsp
  48. 14 1
      src/main/webapp/webpage/modules/workinvoice/workInvoiceNotProjectAuditEnd.jsp
  49. 95 4
      src/main/webapp/webpage/modules/workinvoice/workInvoiceNotProjectModify.jsp
  50. 96 4
      src/main/webapp/webpage/modules/workinvoice/workInvoiceTwoForm.jsp
  51. 17 2
      src/main/webapp/webpage/modules/workinvoice/workInvoiceTwoModify.jsp
  52. 14 1
      src/main/webapp/webpage/modules/workinvoice/workInvoiceView.jsp

+ 14 - 10
src/main/java/com/jeeplus/modules/projectcontentinfo/web/ProjectReportRecordController.java

@@ -627,16 +627,20 @@ public class ProjectReportRecordController extends BaseController {
 	}
 
 	public void sendProjectInfoDataToCloud(ProjectReportRecord reportData){
-		String path = Global.getConfig("SZ_PATH");
-
-		RuralProjectRecords records = new RuralProjectRecords();
-		records.setId(reportData.getProjectId());
-		records.setPrrId(reportData.getId());
-		records.setProjectReportRecordStatus(Integer.parseInt(reportData.getStatus()));
-		HttpHeaders headers = new HttpHeaders();
-		String url = path+"/ccpmData/data/saveProjectReportOnline";
-		HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records,headers);
-		restTemplate.exchange(url, HttpMethod.POST,httpEntity,RuralProjectRecords.class);
+		String pathFlagStr = Global.getConfig("SZ_PATH_flag");
+		boolean pathFlag = Boolean.parseBoolean(pathFlagStr);
+		if(pathFlag) {
+			String path = Global.getConfig("SZ_PATH");
+
+			RuralProjectRecords records = new RuralProjectRecords();
+			records.setId(reportData.getProjectId());
+			records.setPrrId(reportData.getId());
+			records.setProjectReportRecordStatus(Integer.parseInt(reportData.getStatus()));
+			HttpHeaders headers = new HttpHeaders();
+			String url = path + "/ccpmData/data/saveProjectReportOnline";
+			HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records, headers);
+			restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+		}
 	}
 
 	/**

+ 6 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/dao/RuralProjectRecordsDao.java

@@ -485,4 +485,10 @@ public interface RuralProjectRecordsDao extends CrudDao<RuralProjectRecords> {
 
     //根据项目名称查询项目信息
     RuralProjectRecords findUseableByProjectName(@Param("projectName")String projectName);
+
+    /**
+     * 修改项目合同信息
+     * @param projectRecords
+     */
+    void updateContract(RuralProjectRecords projectRecords);
 }

+ 74 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectRecordsService.java

@@ -999,6 +999,80 @@ public class RuralProjectRecordsService extends CrudService<RuralProjectRecordsD
 		logger.info("保存项目耗时:{}ms;启动流程耗时:{}ms",t4-t1,System.currentTimeMillis()-t4);
 	}
 
+	@Transactional(readOnly = false)
+	public void updateContract(RuralProjectRecords projectRecords, ProjectStatusEnum projectStatus) throws Exception {
+		//判定项目是否存在id(即是否为修改)查询项目的合同信息
+		WorkContractInfo oldWorkContractInfo = null;
+		WorkContractInfo newWorkContractInfo = null;
+		//查询老的合同信息
+		if(StringUtils.isNotBlank(projectRecords.getId())){
+			RuralProjectRecords oldInfo = this.get(projectRecords.getId());
+			if(null != oldInfo.getWorkContractInfo() && StringUtils.isNotBlank(oldInfo.getWorkContractInfo().getId())){
+				oldWorkContractInfo = workContractInfoService.get(oldInfo.getWorkContractInfo().getId());
+			}
+		}
+		//查询新的合同信息
+		if(null != projectRecords.getWorkContractInfo() && StringUtils.isNotBlank(projectRecords.getWorkContractInfo().getId())){
+			newWorkContractInfo = workContractInfoService.get(projectRecords.getWorkContractInfo().getId());
+		}
+
+		WorkContractInfo workContractInfo = null;
+		Office company= new Office();
+		Office office =  new Office();
+        if(StringUtils.isNotBlank((projectRecords.getWorkContractInfo().getId()))){
+            //有合同状态
+			workContractInfo = workContractInfoDao.get(projectRecords.getWorkContractInfo().getId());
+			company.setId(workContractInfo.getCompanyId());
+			office.setId(UserUtils.getUser().getOffice().getId());
+        }else{
+        	//无合同
+			company.setId(UserUtils.getUser().getCompany().getId());
+			office.setId(UserUtils.getUser().getOffice().getId());
+		}
+		projectRecords.setCompany(company);
+		projectRecords.setOffice(office);
+
+		dao.updateContract(projectRecords);
+
+
+		//项目送审之后处理项目合同文件信息
+		//查询咨询合同附件类型id
+		ProjectTemplateInfo projectTemplateInfo = projectTemplateDao.getProjectTemplateInfoByName("咨询合同");
+		//删除该项目咨询合同类型中老合同对应的附件信息
+		WorkClientAttachment attchment = new WorkClientAttachment();
+		attchment.setAttachmentId(projectTemplateInfo.getId());
+		attchment.setProjectId(projectRecords.getId());
+		if(null != oldWorkContractInfo && null != oldWorkContractInfo.getWorkAttachments()){
+			for (WorkClientAttachment info:oldWorkContractInfo.getWorkAttachments()) {
+				attchment.setAttachmentName(info.getAttachmentName());
+				workattachmentService.deleteByAttachIdAndProject(attchment);
+			}
+		}
+		//将新合同对应的附件信息添加到咨询合同中
+		if(null != newWorkContractInfo && null != newWorkContractInfo.getWorkAttachments()){
+			WorkClientAttachment workattachment = new WorkClientAttachment();
+			for (WorkClientAttachment info:newWorkContractInfo.getWorkAttachments()) {
+				workattachment.setType(info.getType());
+				workattachment.setAttachmentName(info.getAttachmentName());
+				workattachment.setUrl(info.getUrl());
+				workattachment.setAttachmentUser(info.getAttachmentUser());
+				workattachment.setAttachmentFlag(info.getAttachmentFlag());
+				workattachment.setAttachmentId(projectTemplateInfo.getId());
+				workattachment.setProjectId(projectRecords.getId());
+				switch (uploadMode){
+					case "1":
+						workattachment.setUrl(workattachment.getUrl().replace(bosUrl,""));
+						break;
+					case "2":
+						workattachment.setUrl(workattachment.getUrl().replace(aliyunUrl,""));
+						break;
+				}
+				workattachment.preInsert();
+				workClientAttachmentDao.insert(workattachment);
+			}
+		}
+	}
+
 	/**
 	 * 管理员修改项目信息
 	 * @param projectRecords

+ 13 - 9
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/ProjectPaperFilingController.java

@@ -186,16 +186,20 @@ public class ProjectPaperFilingController extends BaseController {
     }
 
     public void sendProjectInfoDataToCloud(ProjectPaperFiling paperFiling){
-        String path = Global.getConfig("SZ_PATH");
+        String pathFlagStr = Global.getConfig("SZ_PATH_flag");
+        boolean pathFlag = Boolean.parseBoolean(pathFlagStr);
+        if(pathFlag) {
+            String path = Global.getConfig("SZ_PATH");
 
-        RuralProjectRecords records = new RuralProjectRecords();
-        records.setId(paperFiling.getProjectId());
-        records.setPrrdId(paperFiling.getId());
-        records.setDownProjectReportRecordStatus(paperFiling.getStatus());
-        HttpHeaders headers = new HttpHeaders();
-        String url = path+"/ccpmData/data/saveProjectReportPaper";
-        HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records,headers);
-        restTemplate.exchange(url, HttpMethod.POST,httpEntity,RuralProjectRecords.class);
+            RuralProjectRecords records = new RuralProjectRecords();
+            records.setId(paperFiling.getProjectId());
+            records.setPrrdId(paperFiling.getId());
+            records.setDownProjectReportRecordStatus(paperFiling.getStatus());
+            HttpHeaders headers = new HttpHeaders();
+            String url = path + "/ccpmData/data/saveProjectReportPaper";
+            HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records, headers);
+            restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+        }
     }
 
     /**

+ 18 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectMessageController.java

@@ -65,6 +65,7 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
 import java.util.*;
 
 /**
@@ -624,6 +625,23 @@ public class RuralCostProjectMessageController extends BaseController {
             //获取工程类型
             ProjectEngineeringInfo engineeringInfos=engineeringService.getProjectReportedType(reported.getPorjectUse());
             model.addAttribute("engineeringInfo", engineeringInfos);
+            //判定上报中咨询标的额是否和质量复核中的一致,不一致则调整成质量复核中的值
+            //将质量复核中的咨询标的额转换为万元并四舍五入
+            if(StringUtils.isNotBlank(projectReportData.getConsultFee())){
+                Double ziXunBDE = Double.valueOf(projectReportData.getConsultFee())/10000;
+                BigDecimal ziXunBDEB = BigDecimal.valueOf(ziXunBDE);
+                ziXunBDEB = ziXunBDEB.setScale(2, BigDecimal.ROUND_HALF_UP);
+                String ziXunBDEStr = String.valueOf(ziXunBDEB);
+                if(StringUtils.isNotBlank(reported.getZiXunBDE())){
+                    if(ziXunBDEStr.equals(reported.getZiXunBDE())){
+
+                    }else{
+                        reported.setZiXunBDE(ziXunBDEStr);
+                    }
+                }else{
+                    reported.setZiXunBDE(ziXunBDEStr);
+                }
+            }
         }
 
         //查询总审人员信息

+ 15 - 11
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectMessageNewController.java

@@ -808,17 +808,21 @@ public class RuralCostProjectMessageNewController extends BaseController {
      * @param reportData
      */
     public void sendProjectInfoDataToCloud(ProjectReportData reportData){
-        String path = Global.getConfig("SZ_PATH");
-
-        RuralProjectRecords records = new RuralProjectRecords();
-        records.setId(reportData.getProject().getId());
-        records.setPrdId(reportData.getId());
-        records.setProjectReportStatus(Integer.parseInt(reportData.getStatus()));
-        records.setProjectReportNumber(reportData.getNumber());
-        HttpHeaders headers = new HttpHeaders();
-        String url = path+"/ccpmData/data/saveProjectReview";
-        HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records,headers);
-        restTemplate.exchange(url, HttpMethod.POST,httpEntity,RuralProjectRecords.class);
+        String pathFlagStr = Global.getConfig("SZ_PATH_flag");
+        boolean pathFlag = Boolean.parseBoolean(pathFlagStr);
+        if(pathFlag) {
+            String path = Global.getConfig("SZ_PATH");
+
+            RuralProjectRecords records = new RuralProjectRecords();
+            records.setId(reportData.getProject().getId());
+            records.setPrdId(reportData.getId());
+            records.setProjectReportStatus(Integer.parseInt(reportData.getStatus()));
+            records.setProjectReportNumber(reportData.getNumber());
+            HttpHeaders headers = new HttpHeaders();
+            String url = path + "/ccpmData/data/saveProjectReview";
+            HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records, headers);
+            restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+        }
     }
 
 

+ 14 - 10
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectMessageNewTwoController.java

@@ -900,15 +900,19 @@ public class RuralCostProjectMessageNewTwoController extends BaseController {
     }
 
     public void sendProjectInfoDataToCloud(ProjectReportRecord reportData){
-        String path = Global.getConfig("SZ_PATH");
-
-        RuralProjectRecords records = new RuralProjectRecords();
-        records.setId(reportData.getProjectId());
-        records.setPrrId(reportData.getId());
-        records.setProjectReportRecordStatus(Integer.parseInt(reportData.getStatus()));
-        HttpHeaders headers = new HttpHeaders();
-        String url = path+"/ccpmData/data/saveProjectReportOnline";
-        HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records,headers);
-        restTemplate.exchange(url, HttpMethod.POST,httpEntity,RuralProjectRecords.class);
+        String pathFlagStr = Global.getConfig("SZ_PATH_flag");
+        boolean pathFlag = Boolean.parseBoolean(pathFlagStr);
+        if(pathFlag) {
+            String path = Global.getConfig("SZ_PATH");
+
+            RuralProjectRecords records = new RuralProjectRecords();
+            records.setId(reportData.getProjectId());
+            records.setPrrId(reportData.getId());
+            records.setProjectReportRecordStatus(Integer.parseInt(reportData.getStatus()));
+            HttpHeaders headers = new HttpHeaders();
+            String url = path + "/ccpmData/data/saveProjectReportOnline";
+            HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records, headers);
+            restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+        }
     }
 }

+ 122 - 15
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectRecordsController.java

@@ -288,6 +288,73 @@ public class RuralCostProjectRecordsController extends BaseController {
 	}
 
 	/**
+	 * 查看,增加,编辑项目表单页面
+	 */
+	@RequiresPermissions(value={"ruralProject:ruralCostProjectRecords:add","ruralProject:ruralCostProjectRecords:edit"},logical=Logical.OR)
+	@RequestMapping(value = "updateContractForm")
+	public String updateContractForm(RuralProjectRecords projectRecords, Model model) {
+		if (projectRecords!=null&&StringUtils.isNotBlank(projectRecords.getId())) {
+			projectRecords = projectRecordsService.get(projectRecords.getId());
+
+			//根据归属部门Id查询归属部门名称显示
+			String belongingDepartmentName = projectRecordsService.getBelongingDepartmentNameByBelongingDepartment(projectRecords.getBelongingDepartment());
+			model.addAttribute("belongingDepartmentName",belongingDepartmentName);
+
+            projectRecordsService.queryProjectDetail(projectRecords);
+			//获取工程类型
+			ProjectEngineeringInfo engineeringInfos=engineeringService.get(projectRecords.getEngineeringType());
+			model.addAttribute("engineeringInfo", engineeringInfos);
+			projectRecords.setCreateReportFlag(false);
+			//获取项目计划信息
+			ProjectPlanInfo projectPlanInfo = new ProjectPlanInfo();
+			//将项目id放入项目计划表中
+			projectPlanInfo.setProjectId(projectRecords.getId());
+			//获取项目计划信息
+			List<ProjectPlanInfo> projectPlanList = projectPlanService.getProjectPlanList(projectPlanInfo);
+			if(projectPlanList.size()>0){
+				String startDate = projectPlanList.get(0).getEndDate();
+				String endDate = projectPlanList.get(projectPlanList.size()-1).getBeginDate();
+				model.addAttribute("projectStartDate", startDate);
+				model.addAttribute("projectEndDate", endDate);
+			}else{
+				model.addAttribute("projectStartDate", "");
+				model.addAttribute("projectEndDate", "");
+			}
+
+            /*//处理所在地信息
+            StringBuffer areaName = new StringBuffer();
+			if(StringUtils.isNotBlank(projectRecords.getProvince())){
+				areaName.append(projectRecords.getProvince());
+			}
+            if(StringUtils.isNotBlank(projectRecords.getCity())){
+				areaName.append("-").append(projectRecords.getCity());
+			}
+            if(StringUtils.isNotBlank(projectRecords.getCounty())){
+				areaName.append("-").append(projectRecords.getCounty());
+			}
+			projectRecords.getArea().setName(areaName.toString());*/
+		}else {
+		    projectRecords.setCreateBy(UserUtils.getUser());
+		    projectRecords.setCreateDate(new Date());
+			projectRecords.setLeaderIds(UserUtils.getUser().getId());
+			projectRecords.setLeaderNameStr(UserUtils.getUser().getName());
+			projectRecords.setCreateReportFlag(true);
+			model.addAttribute("projectStartDate", "");
+			model.addAttribute("projectEndDate", "");
+			String belongingDepartmentName = UserUtils.getUser().getOffice().toString();
+			String belongingDepartmentParentId = UserUtils.getUser().getOffice().getParentId();
+			//如果父级id为工程五部则不予显示
+			if(!belongingDepartmentParentId.equals("ee4e055e2f074aef934d283880983a38")){
+				model.addAttribute("belongingDepartmentName",belongingDepartmentName);
+			}
+        }
+
+
+		model.addAttribute("ruralProjectRecords", projectRecords);
+		return "modules/ruralprojectrecords/cost/ruralCostProjectRecordsUpdateContractForm";
+	}
+
+	/**
 	 * 查看
 	 * @param projectRecords
 	 * @param model
@@ -445,25 +512,65 @@ public class RuralCostProjectRecordsController extends BaseController {
 	}
 
 	/**
+	 * 修改项目关联合同
+	 */
+	@RequiresPermissions(value={"ruralProject:ruralCostProjectRecords:add","ruralProject:ruralCostProjectRecords:edit"},logical=Logical.OR)
+	@RequestMapping(value = "updateContract")
+	public String updateContract(RuralProjectRecords projectRecords, Model model, RedirectAttributes redirectAttributes
+						,@RequestParam(value = "belongingDepartmentName") String belongingDepartmentName) throws Exception {
+		if (!beanValidator(model, projectRecords)){
+			return form(projectRecords, model);
+		}
+		try {
+            if (!projectRecords.getIsNewRecord()) {//编辑表单保存
+                RuralProjectRecords t = projectRecordsService.get(projectRecords.getId());//从数据库取出记录的值
+				String oldSubmitMoney = t.getSubmitMoney();
+					MyBeanUtils.copyBeanNotNull2Bean(projectRecords, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+
+				projectRecordsService.updateContract(t, ProjectStatusEnum.SIGNED);//保存
+            }
+			addMessage(redirectAttributes, "保存项目成功");
+        }catch (Exception e){
+		    logger.error("保存项目异常:",e);
+            addMessage(redirectAttributes, "保存项目异常:"+e.getMessage());
+        }
+		//判断项目创建人所属部门是否是苏州分公司
+		RuralProjectRecords records=projectRecordsService.findUseableByProjectName(projectRecords.getProjectName());
+		Office info = officeDao.getByName("苏州分公司");
+		List<Office> officeList = officeDao.getChildrenOfficeById(info.getId());
+		for (Office office1 : officeList) {
+			if (office1.getId().equals(records.getOffice().getId())){
+				//将该数据保存到ccpm cloud项目中
+				sendProjectInfoDataToCloud(records);
+			}
+		}
+		return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralCostProjectRecords/?repage";
+	}
+
+	/**
 	 * 将该项目信息保存到cloud项目中
 	 * @param ruralProjectRecords
 	 */
 	public void sendProjectInfoDataToCloud(RuralProjectRecords ruralProjectRecords){
-		String path = Global.getConfig("SZ_PATH");
-
-		RuralProjectRecords records = new RuralProjectRecords();
-		records.setId(ruralProjectRecords.getId());
-		records.setProjectId(ruralProjectRecords.getProjectId());
-		records.setProjectName(ruralProjectRecords.getProjectName());
-		records.setProjectType(ruralProjectRecords.getProjectType());
-		records.setArea(ruralProjectRecords.getArea());
-		WorkContractInfo workContractInfo = new WorkContractInfo();
-		workContractInfo.setId(ruralProjectRecords.getWorkContractInfo().getId());
-		records.setWorkContractInfo(workContractInfo);
-		HttpHeaders headers = new HttpHeaders();
-		String url = path+"/ccpmData/data/saveProjectInfo";
-		HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records,headers);
-		restTemplate.exchange(url, HttpMethod.POST,httpEntity,RuralProjectRecords.class);
+		String pathFlagStr = Global.getConfig("SZ_PATH_flag");
+		boolean pathFlag = Boolean.parseBoolean(pathFlagStr);
+		if(pathFlag) {
+			String path = Global.getConfig("SZ_PATH");
+
+			RuralProjectRecords records = new RuralProjectRecords();
+			records.setId(ruralProjectRecords.getId());
+			records.setProjectId(ruralProjectRecords.getProjectId());
+			records.setProjectName(ruralProjectRecords.getProjectName());
+			records.setProjectType(ruralProjectRecords.getProjectType());
+			records.setArea(ruralProjectRecords.getArea());
+			WorkContractInfo workContractInfo = new WorkContractInfo();
+			workContractInfo.setId(ruralProjectRecords.getWorkContractInfo().getId());
+			records.setWorkContractInfo(workContractInfo);
+			HttpHeaders headers = new HttpHeaders();
+			String url = path + "/ccpmData/data/saveProjectInfo";
+			HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records, headers);
+			restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+		}
 	}
 
 

+ 17 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectMessageAllController.java

@@ -446,6 +446,23 @@ public class RuralProjectMessageAllController extends BaseController {
             //获取工程类型
             ProjectEngineeringInfo engineeringInfos=engineeringService.getProjectReportedType(reported.getPorjectUse());
             model.addAttribute("engineeringInfo", engineeringInfos);
+            //判定上报中咨询标的额是否和质量复核中的一致,不一致则调整成质量复核中的值
+            //将质量复核中的咨询标的额转换为万元并四舍五入
+            if(StringUtils.isNotBlank(projectReportData.getConsultFee())){
+                Double ziXunBDE = Double.valueOf(projectReportData.getConsultFee())/10000;
+                BigDecimal ziXunBDEB = BigDecimal.valueOf(ziXunBDE);
+                ziXunBDEB = ziXunBDEB.setScale(2, BigDecimal.ROUND_HALF_UP);
+                String ziXunBDEStr = String.valueOf(ziXunBDEB);
+                if(StringUtils.isNotBlank(reported.getZiXunBDE())){
+                    if(ziXunBDEStr.equals(reported.getZiXunBDE())){
+
+                    }else{
+                        reported.setZiXunBDE(ziXunBDEStr);
+                    }
+                }else{
+                    reported.setZiXunBDE(ziXunBDEStr);
+                }
+            }
         }
 
         //查询总审人员信息

+ 15 - 11
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectMessageNewController.java

@@ -1049,17 +1049,21 @@ public class RuralProjectMessageNewController extends BaseController {
      * @param reportData
      */
     public void sendProjectInfoDataToCloud(ProjectReportData reportData){
-        String path = Global.getConfig("SZ_PATH");
-
-        RuralProjectRecords records = new RuralProjectRecords();
-        records.setId(reportData.getProject().getId());
-        records.setPrdId(reportData.getId());
-        records.setProjectReportStatus(Integer.parseInt(reportData.getStatus()));
-        records.setProjectReportNumber(reportData.getNumber());
-        HttpHeaders headers = new HttpHeaders();
-        String url = path+"/ccpmData/data/saveProjectReview";
-        HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records,headers);
-        restTemplate.exchange(url, HttpMethod.POST,httpEntity,RuralProjectRecords.class);
+        String pathFlagStr = Global.getConfig("SZ_PATH_flag");
+        boolean pathFlag = Boolean.parseBoolean(pathFlagStr);
+        if(pathFlag) {
+            String path = Global.getConfig("SZ_PATH");
+
+            RuralProjectRecords records = new RuralProjectRecords();
+            records.setId(reportData.getProject().getId());
+            records.setPrdId(reportData.getId());
+            records.setProjectReportStatus(Integer.parseInt(reportData.getStatus()));
+            records.setProjectReportNumber(reportData.getNumber());
+            HttpHeaders headers = new HttpHeaders();
+            String url = path + "/ccpmData/data/saveProjectReview";
+            HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records, headers);
+            restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+        }
     }
 
     @RequestMapping(value = "revoke")

+ 13 - 9
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectMessageNewTwoController.java

@@ -442,16 +442,20 @@ public class RuralProjectMessageNewTwoController  extends BaseController {
     }
 
     public void sendProjectInfoDataToCloud1(ProjectReportDataTwo reportData){
-        String path = Global.getConfig("SZ_PATH");
+        String pathFlagStr = Global.getConfig("SZ_PATH_flag");
+        boolean pathFlag = Boolean.parseBoolean(pathFlagStr);
+        if(pathFlag) {
+            String path = Global.getConfig("SZ_PATH");
 
-        RuralProjectRecords records = new RuralProjectRecords();
-        records.setId(reportData.getProject().getId());
-        records.setPrdtId(reportData.getId());
-        records.setProjectReportStatusTwo(Integer.parseInt(reportData.getStatus()));
-        HttpHeaders headers = new HttpHeaders();
-        String url = path+"/ccpmData/data/saveProjectReportTwo";
-        HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records,headers);
-        restTemplate.exchange(url, HttpMethod.POST,httpEntity,RuralProjectRecords.class);
+            RuralProjectRecords records = new RuralProjectRecords();
+            records.setId(reportData.getProject().getId());
+            records.setPrdtId(reportData.getId());
+            records.setProjectReportStatusTwo(Integer.parseInt(reportData.getStatus()));
+            HttpHeaders headers = new HttpHeaders();
+            String url = path + "/ccpmData/data/saveProjectReportTwo";
+            HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records, headers);
+            restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+        }
     }
 
     /**

+ 111 - 15
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectRecordsController.java

@@ -401,26 +401,122 @@ public class RuralProjectRecordsController extends BaseController {
 		return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralProjectRecords/?repage";
 	}
 
+
+	/**
+	 * 查看,增加,编辑项目表单页面
+	 */
+	@RequiresPermissions(value={"ruralProject:ruralCostProjectRecords:add","ruralProject:ruralCostProjectRecords:edit"},logical=Logical.OR)
+	@RequestMapping(value = "updateContractForm")
+	public String updateContractForm(RuralProjectRecords projectRecords, Model model) {
+		if (projectRecords!=null&&StringUtils.isNotBlank(projectRecords.getId())) {
+			projectRecords = projectRecordsService.get(projectRecords.getId());
+
+			//根据归属部门Id查询归属部门名称显示
+			String belongingDepartmentName = projectRecordsService.getBelongingDepartmentNameByBelongingDepartment(projectRecords.getBelongingDepartment());
+			model.addAttribute("belongingDepartmentName",belongingDepartmentName);
+
+			projectRecordsService.queryProjectDetail(projectRecords);
+			//获取工程类型
+			ProjectEngineeringInfo engineeringInfos=engineeringService.get(projectRecords.getEngineeringType());
+			model.addAttribute("engineeringInfo", engineeringInfos);
+			projectRecords.setCreateReportFlag(false);
+			//获取项目计划信息
+			ProjectPlanInfo projectPlanInfo = new ProjectPlanInfo();
+			//将项目id放入项目计划表中
+			projectPlanInfo.setProjectId(projectRecords.getId());
+			//获取项目计划信息
+			List<ProjectPlanInfo> projectPlanList = projectPlanService.getProjectPlanList(projectPlanInfo);
+			if(projectPlanList.size()>0){
+				String startDate = projectPlanList.get(0).getEndDate();
+				String endDate = projectPlanList.get(projectPlanList.size()-1).getBeginDate();
+				model.addAttribute("projectStartDate", startDate);
+				model.addAttribute("projectEndDate", endDate);
+			}else{
+				model.addAttribute("projectStartDate", "");
+				model.addAttribute("projectEndDate", "");
+			}
+		}else {
+			projectRecords.setCreateBy(UserUtils.getUser());
+			projectRecords.setCreateDate(new Date());
+			projectRecords.setLeaderIds(UserUtils.getUser().getId());
+			projectRecords.setLeaderNameStr(UserUtils.getUser().getName());
+			projectRecords.setCreateReportFlag(true);
+			model.addAttribute("projectStartDate", "");
+			model.addAttribute("projectEndDate", "");
+			String belongingDepartmentName = UserUtils.getUser().getOffice().toString();
+			String belongingDepartmentParentId = UserUtils.getUser().getOffice().getParentId();
+			//如果父级id为工程五部则不予显示
+			if(!belongingDepartmentParentId.equals("ee4e055e2f074aef934d283880983a38")){
+				model.addAttribute("belongingDepartmentName",belongingDepartmentName);
+			}
+		}
+
+
+		model.addAttribute("ruralProjectRecords", projectRecords);
+		return "modules/ruralprojectrecords/ruralProjectRecordsUpdateContractForm";
+	}
+
+
+	/**
+	 * 修改项目关联合同
+	 */
+	@RequiresPermissions(value={"ruralProject:ruralCostProjectRecords:add","ruralProject:ruralCostProjectRecords:edit"},logical=Logical.OR)
+	@RequestMapping(value = "updateContract")
+	public String updateContract(RuralProjectRecords projectRecords, Model model, RedirectAttributes redirectAttributes
+			,@RequestParam(value = "belongingDepartmentName") String belongingDepartmentName) throws Exception {
+		if (!beanValidator(model, projectRecords)){
+			return form(projectRecords, model);
+		}
+		try {
+			if (!projectRecords.getIsNewRecord()) {//编辑表单保存
+				RuralProjectRecords t = projectRecordsService.get(projectRecords.getId());//从数据库取出记录的值
+				String oldSubmitMoney = t.getSubmitMoney();
+				MyBeanUtils.copyBeanNotNull2Bean(projectRecords, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+
+				projectRecordsService.updateContract(t, ProjectStatusEnum.SIGNED);//保存
+			}
+			addMessage(redirectAttributes, "保存项目成功");
+		}catch (Exception e){
+			logger.error("保存项目异常:",e);
+			addMessage(redirectAttributes, "保存项目异常:"+e.getMessage());
+		}
+		//判断项目创建人所属部门是否是苏州分公司
+		RuralProjectRecords records=projectRecordsService.findUseableByProjectName(projectRecords.getProjectName());
+		Office info = officeDao.getByName("苏州分公司");
+		List<Office> officeList = officeDao.getChildrenOfficeById(info.getId());
+		for (Office office1 : officeList) {
+			if (office1.getId().equals(records.getOffice().getId())){
+				//将该数据保存到ccpm cloud项目中
+				sendProjectInfoDataToCloud(records);
+			}
+		}
+		return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralProjectRecords/?repage";
+	}
+
 	/**
 	 * 将该项目信息保存到cloud项目中
 	 * @param ruralProjectRecords
 	 */
 	public void sendProjectInfoDataToCloud(RuralProjectRecords ruralProjectRecords){
-		String path = Global.getConfig("SZ_PATH");
-
-		RuralProjectRecords records = new RuralProjectRecords();
-		records.setId(ruralProjectRecords.getId());
-		records.setProjectId(ruralProjectRecords.getProjectId());
-		records.setProjectName(ruralProjectRecords.getProjectName());
-		records.setProjectType(ruralProjectRecords.getProjectType());
-		records.setArea(ruralProjectRecords.getArea());
-		WorkContractInfo workContractInfo = new WorkContractInfo();
-		workContractInfo.setId(ruralProjectRecords.getWorkContractInfo().getId());
-		records.setWorkContractInfo(workContractInfo);
-		HttpHeaders headers = new HttpHeaders();
-		String url = path+"/ccpmData/data/saveProjectInfo";
-		HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records,headers);
-		restTemplate.exchange(url, HttpMethod.POST,httpEntity,RuralProjectRecords.class);
+		String pathFlagStr = Global.getConfig("SZ_PATH_flag");
+		boolean pathFlag = Boolean.parseBoolean(pathFlagStr);
+		if(pathFlag) {
+			String path = Global.getConfig("SZ_PATH");
+
+			RuralProjectRecords records = new RuralProjectRecords();
+			records.setId(ruralProjectRecords.getId());
+			records.setProjectId(ruralProjectRecords.getProjectId());
+			records.setProjectName(ruralProjectRecords.getProjectName());
+			records.setProjectType(ruralProjectRecords.getProjectType());
+			records.setArea(ruralProjectRecords.getArea());
+			WorkContractInfo workContractInfo = new WorkContractInfo();
+			workContractInfo.setId(ruralProjectRecords.getWorkContractInfo().getId());
+			records.setWorkContractInfo(workContractInfo);
+			HttpHeaders headers = new HttpHeaders();
+			String url = path + "/ccpmData/data/saveProjectInfo";
+			HttpEntity<RuralProjectRecords> httpEntity = new HttpEntity<>(records, headers);
+			restTemplate.exchange(url, HttpMethod.POST, httpEntity, RuralProjectRecords.class);
+		}
 	}
 
 	/**

+ 21 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectSignatureOldMessageDisposeController.java

@@ -751,4 +751,25 @@ public class RuralProjectSignatureOldMessageDisposeController extends BaseContro
         return map;
     }
 
+    /**
+     * 报表处理
+     * @return
+     */
+    @RequestMapping(value = "/invoiceUpdateRedNumberByNumber")
+    @ResponseBody
+    @Transactional(readOnly = false)
+    public Map<String,Object> invoiceUpdateRedNumberByNumber(MultipartFile file){
+        Map<String,Object> map = new HashMap<>();
+        try {
+            ImportExcel ei = new ImportExcel(file, 0, 0);
+            List<TemporaryInvoiceInfo> invoiceInfoList = ei.getNewDataList(TemporaryInvoiceInfo.class);
+            workInvoiceService.getAndDisposeInvoiceRedInfo(invoiceInfoList);
+
+        } catch (Exception e){
+
+        }
+        map.put("msgMonth","月度报表处理完成");
+        return map;
+    }
+
 }

+ 26 - 16
src/main/java/com/jeeplus/modules/szCenterservice/service/szCloud/FinanceInvoiceRequest.java

@@ -34,11 +34,15 @@ public class FinanceInvoiceRequest {
         Map<String, Object> paramMap = new HashMap<>();
         paramMap.put("id", id);
         paramMap.put("processDefKey", processDefKey);
-        String path=Global.getConfig("SZ_PATH");
-        String url = szRestTemplateService.getUrl(path,"/transpond/detailFinance",paramMap);
-        ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.GET, null, String.class);
         String res = null;
-        res = exchange.getBody();
+        String pathFlagStr = Global.getConfig("SZ_PATH_flag");
+        boolean pathFlag = Boolean.parseBoolean(pathFlagStr);
+        if(pathFlag) {
+            String path = Global.getConfig("SZ_PATH");
+            String url = szRestTemplateService.getUrl(path, "/transpond/detailFinance", paramMap);
+            ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.GET, null, String.class);
+            res = exchange.getBody();
+        }
         return res ;
     }
 
@@ -53,18 +57,24 @@ public class FinanceInvoiceRequest {
         bodyMap.put("comment", workInvoice.getComment());
         bodyMap.put("processDefKey", workInvoice.getType());
         bodyMap.put("workInvoice",workInvoice);
-        String path=Global.getConfig("SZ_PATH");
-        String url = path + "/transpond/auditDistribute";
-        HttpHeaders headers = new HttpHeaders();
-        User user = UserUtils.getUser();
-        String cookie = szRestTemplateService.ccpmValidatePassword(user);
-        headers.add("cookie", cookie);
-        headers.add("Accept", MediaType.ALL_VALUE);
-        headers.add("domain","127.0.0.17");
-        headers.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
-        HttpEntity<Object> httpEntity = new HttpEntity<>(bodyMap,headers);
-        Object res = restTemplate.exchange(url, HttpMethod.POST, httpEntity, Object.class);
-        return res;
+
+        String pathFlagStr = Global.getConfig("SZ_PATH_flag");
+        boolean pathFlag = Boolean.parseBoolean(pathFlagStr);
+        if(pathFlag) {
+            String path = Global.getConfig("SZ_PATH");
+            String url = path + "/transpond/auditDistribute";
+            HttpHeaders headers = new HttpHeaders();
+            User user = UserUtils.getUser();
+            String cookie = szRestTemplateService.ccpmValidatePassword(user);
+            headers.add("cookie", cookie);
+            headers.add("Accept", MediaType.ALL_VALUE);
+            headers.add("domain", "127.0.0.17");
+            headers.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
+            HttpEntity<Object> httpEntity = new HttpEntity<>(bodyMap, headers);
+            Object res = restTemplate.exchange(url, HttpMethod.POST, httpEntity, Object.class);
+            return res;
+        }
+        return "";
     }
 
 

+ 18 - 14
src/main/java/com/jeeplus/modules/workclientinfo/web/WorkClientInfoController.java

@@ -253,20 +253,24 @@ public class WorkClientInfoController extends BaseController {
 	}
 
 	private void sendDataToCloud(WorkClientInfo workClientInfo) {
-		String path = Global.getConfig("SZ_PATH");
-		WorkClientInfo info = new WorkClientInfo();
-		info.setId(workClientInfo.getId());
-		info.setName(workClientInfo.getName());
-		info.setHasUscc(workClientInfo.getHasUscc());
-		info.setUscCode(workClientInfo.getUscCode());
-		info.setRegisterAddress(workClientInfo.getRegisterAddress());
-		info.setTelephone(workClientInfo.getTelephone());
-		info.setCompanyIndustry(workClientInfo.getCompanyIndustry());
-		info.setWorkClientBankList(workClientInfo.getWorkClientBankList());
-		HttpHeaders headers = new HttpHeaders();
-		String url = path+"/ccpmData/data/saveClient";
-		HttpEntity<WorkClientInfo> httpEntity = new HttpEntity<>(info,headers);
- 		restTemplate.exchange(url, HttpMethod.POST,httpEntity,WorkClientInfo.class);
+		String pathFlagStr = Global.getConfig("SZ_PATH_flag");
+		boolean pathFlag = Boolean.parseBoolean(pathFlagStr);
+		if(pathFlag) {
+			String path = Global.getConfig("SZ_PATH");
+			WorkClientInfo info = new WorkClientInfo();
+			info.setId(workClientInfo.getId());
+			info.setName(workClientInfo.getName());
+			info.setHasUscc(workClientInfo.getHasUscc());
+			info.setUscCode(workClientInfo.getUscCode());
+			info.setRegisterAddress(workClientInfo.getRegisterAddress());
+			info.setTelephone(workClientInfo.getTelephone());
+			info.setCompanyIndustry(workClientInfo.getCompanyIndustry());
+			info.setWorkClientBankList(workClientInfo.getWorkClientBankList());
+			HttpHeaders headers = new HttpHeaders();
+			String url = path + "/ccpmData/data/saveClient";
+			HttpEntity<WorkClientInfo> httpEntity = new HttpEntity<>(info, headers);
+			restTemplate.exchange(url, HttpMethod.POST, httpEntity, WorkClientInfo.class);
+		}
 	}
 
 	/**

+ 20 - 15
src/main/java/com/jeeplus/modules/workcontractinfo/web/WorkContractInfoController.java

@@ -1196,25 +1196,30 @@ public class WorkContractInfoController extends BaseController {
      * @param contractInfo
      */
     public void sendContractInfoDataToCloud(WorkContractInfo contractInfo){
-        String path = Global.getConfig("SZ_PATH");
+        String pathFlagStr = Global.getConfig("SZ_PATH_flag");
+        boolean pathFlag = Boolean.parseBoolean(pathFlagStr);
+        if(pathFlag){
+            String path = Global.getConfig("SZ_PATH");
 
-        WorkContractInfo info = new WorkContractInfo();
-        info.setId(contractInfo.getId());
-        info.setName(contractInfo.getName());
-        info.setRecordNum(contractInfo.getFileNum());
+            WorkContractInfo info = new WorkContractInfo();
+            info.setId(contractInfo.getId());
+            info.setName(contractInfo.getName());
+            info.setRecordNum(contractInfo.getFileNum());
 
-        WorkClientInfo workClientInfo = new WorkClientInfo();
-        workClientInfo.setId(contractInfo.getClient().getId());
-        info.setClient(workClientInfo);
+            WorkClientInfo workClientInfo = new WorkClientInfo();
+            workClientInfo.setId(contractInfo.getClient().getId());
+            info.setClient(workClientInfo);
 
-        info.setContractState(contractInfo.getContractState());
-        info.setRecordNum(contractInfo.getFileNum());
-        info.setContractRecordState(contractInfo.getContractRecordState());
+            info.setContractState(contractInfo.getContractState());
+            info.setRecordNum(contractInfo.getFileNum());
+            info.setContractRecordState(contractInfo.getContractRecordState());
+
+            HttpHeaders headers = new HttpHeaders();
+            String url = path+"/ccpmData/data/saveContractInfo";
+            HttpEntity<WorkContractInfo> httpEntity = new HttpEntity<>(info,headers);
+            restTemplate.exchange(url, HttpMethod.POST,httpEntity,WorkContractInfo.class);
+        }
 
-        HttpHeaders headers = new HttpHeaders();
-        String url = path+"/ccpmData/data/saveContractInfo";
-        HttpEntity<WorkContractInfo> httpEntity = new HttpEntity<>(info,headers);
-        restTemplate.exchange(url, HttpMethod.POST,httpEntity,WorkContractInfo.class);
     }
 
    /* public WorkContractInfo getSort(WorkContractInfo workContractInfo){

+ 19 - 15
src/main/java/com/jeeplus/modules/workcontractrecord/web/WorkContractRecordController.java

@@ -218,25 +218,29 @@ public class WorkContractRecordController extends BaseController {
 	 * @param contractInfo
 	 */
 	public void sendContractInfoDataToCloud(WorkContractInfo contractInfo){
-		String path = Global.getConfig("SZ_PATH");
+		String pathFlagStr = Global.getConfig("SZ_PATH_flag");
+		boolean pathFlag = Boolean.parseBoolean(pathFlagStr);
+		if(pathFlag) {
+			String path = Global.getConfig("SZ_PATH");
 
-		WorkContractInfo info = new WorkContractInfo();
-		info.setId(contractInfo.getId());
-		info.setName(contractInfo.getName());
-		info.setRecordNum(contractInfo.getFileNum());
+			WorkContractInfo info = new WorkContractInfo();
+			info.setId(contractInfo.getId());
+			info.setName(contractInfo.getName());
+			info.setRecordNum(contractInfo.getFileNum());
 
-		WorkClientInfo workClientInfo = new WorkClientInfo();
-		workClientInfo.setId(contractInfo.getClient().getId());
-		info.setClient(workClientInfo);
+			WorkClientInfo workClientInfo = new WorkClientInfo();
+			workClientInfo.setId(contractInfo.getClient().getId());
+			info.setClient(workClientInfo);
 
-		info.setContractState(contractInfo.getContractState());
-		info.setRecordNum(contractInfo.getFileNum());
-		info.setContrractRecordStatus(contractInfo.getContrractRecordStatus());
+			info.setContractState(contractInfo.getContractState());
+			info.setRecordNum(contractInfo.getFileNum());
+			info.setContrractRecordStatus(contractInfo.getContrractRecordStatus());
 
-		HttpHeaders headers = new HttpHeaders();
-		String url = path+"/ccpmData/data/saveContractInfo";
-		HttpEntity<WorkContractInfo> httpEntity = new HttpEntity<>(info,headers);
-		restTemplate.exchange(url, HttpMethod.POST,httpEntity,WorkContractInfo.class);
+			HttpHeaders headers = new HttpHeaders();
+			String url = path + "/ccpmData/data/saveContractInfo";
+			HttpEntity<WorkContractInfo> httpEntity = new HttpEntity<>(info, headers);
+			restTemplate.exchange(url, HttpMethod.POST, httpEntity, WorkContractInfo.class);
+		}
 	}
 	/**
 	 * 保存合同归档

+ 7 - 1
src/main/java/com/jeeplus/modules/workfullmanage/service/WorkFullManageService.java

@@ -874,7 +874,13 @@ public class WorkFullManageService extends CrudService<WorkFullManageDao, WorkFu
 			String endingDateStr = dateStr(projectReportSignatureInfo.getAgreedEndDate());
 			data.put("consultOperationalPeriod",startDateStr + "至" + endingDateStr);
 		}else{
-			data.put("consultOperationalPeriod","");
+			if(null != ruralProjectRecords && null != ruralProjectRecords.getStartDate() && null != ruralProjectRecords.getEndingDate()){
+				String startDateStr = dateStr(ruralProjectRecords.getStartDate());
+				String endingDateStr = dateStr(ruralProjectRecords.getEndingDate());
+				data.put("consultOperationalPeriod",startDateStr + "至" + endingDateStr);
+			}else{
+				data.put("consultOperationalPeriod","");
+			}
 		}
 
 		if(null != currentConsultant && org.apache.commons.lang3.StringUtils.isNotBlank(currentConsultant.getZixunyuanName())){

+ 14 - 0
src/main/java/com/jeeplus/modules/workinvoice/dao/WorkInvoiceDao.java

@@ -215,9 +215,23 @@ public interface WorkInvoiceDao extends CrudDao<WorkInvoice> {
 	WorkInvoice getByNumber(String number);
 
 	/**
+	 * 根据发票申请编号查询数据信息(最近的一条有效数据)
+	 * @param workInvoice
+	 * @return
+	 */
+	List<WorkInvoice> getByInvoiceList(WorkInvoice workInvoice);
+
+	/**
 	 * 修改红冲数据关联数据信息
 	 * @param workInvoice
 	 * @return
 	 */
 	Integer updateInvoceOnRed(WorkInvoice workInvoice);
+
+	/**
+	 * 根据发票编号查询其所有发票号
+	 * @param invoiceId
+	 * @return
+	 */
+	String getInvoiceNumberStr(String invoiceId);
 }

+ 18 - 0
src/main/java/com/jeeplus/modules/workinvoice/entity/WorkInvoice.java

@@ -50,6 +50,7 @@ public class WorkInvoice extends ActEntity<WorkInvoice> {
 	private User drawer;		// 开票经办人(暂时弃用)
 	private Office office;		// 所属部门
 	private Integer invoiceNumber;		// 发票编号(暂时弃用)
+	private String invoiceNumberStr;		// 发票编号
 	private Date invoiceDate;		// 开票日期
 	private Date takeDate;          //领票日期
 	private String drawerName;      //开票人(发票管理员名称)
@@ -102,6 +103,7 @@ public class WorkInvoice extends ActEntity<WorkInvoice> {
 
 	private String newDrawer;    		//开票人状态
 	private String newDrawerId;    		//开票人id
+	private String idCard;    		//开票人身份证号
 	private String newDrawerName;    	//开票人名称
 	private String actualDrawerId;    		//实际开票人id
 	private String actualDrawerEmailAddress;    		//实际开票人邮箱
@@ -438,6 +440,14 @@ public class WorkInvoice extends ActEntity<WorkInvoice> {
 		this.invoiceNumber = invoiceNumber;
 	}
 
+	public String getInvoiceNumberStr() {
+		return invoiceNumberStr;
+	}
+
+	public void setInvoiceNumberStr(String invoiceNumberStr) {
+		this.invoiceNumberStr = invoiceNumberStr;
+	}
+
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	@ExcelField(title="开票日期", align=2, sort=15)
 	public Date getInvoiceDate() {
@@ -929,4 +939,12 @@ public class WorkInvoice extends ActEntity<WorkInvoice> {
 	public void setRedNotStatusList(List<String> redNotStatusList) {
 		this.redNotStatusList = redNotStatusList;
 	}
+
+	public String getIdCard() {
+		return idCard;
+	}
+
+	public void setIdCard(String idCard) {
+		this.idCard = idCard;
+	}
 }

+ 89 - 0
src/main/java/com/jeeplus/modules/workinvoice/service/WorkInvoiceService.java

@@ -212,6 +212,10 @@ public class WorkInvoiceService extends CrudService<WorkInvoiceDao, WorkInvoice>
 		return workInvoice;
 	}
 
+	public String getInvoiceNumberStr(String invoiceId) {
+		return dao.getInvoiceNumberStr(invoiceId);
+	}
+
 	/**
 	 * 根据开票id查询关联项目
 	 * @param workInvoice
@@ -545,6 +549,37 @@ public class WorkInvoiceService extends CrudService<WorkInvoiceDao, WorkInvoice>
 	}
 
 	/**
+	 * 获取关联项目名称list
+	 * @param workInvoice
+	 * @return
+	 */
+	public List<String> getProjectNameListOnRed(WorkInvoice workInvoice){
+		//项目名称获取
+		List<String> projectNameList = Lists.newArrayList();
+		if(null != workInvoice.getWorkInvoiceProjectRelationList()){
+			for (WorkInvoiceProjectRelation projectRelation : workInvoice.getWorkInvoiceProjectRelationList()) {
+				//处理开票是非项目还是项目开票
+				if(StringUtils.isNotBlank(projectRelation.getProjectId())){
+					if (WorkInvoiceReceipt.DEL_FLAG_NORMAL.equals(projectRelation.getDelFlag())) {
+						ProjectRecords projectRecords = projectRecordsService.getRuralMasters(projectRelation.getProjectId());
+						if (null != projectRecords) {
+							projectNameList.add(projectRecords.getProjectName());
+						}
+
+					}
+				}else{
+					if(projectNameList.contains("非项目发票")){
+						continue;
+					}
+					projectNameList.add(projectRelation.getDetails().replaceAll("\\r|\\n*",""));
+				}
+
+			}
+		}
+		return projectNameList;
+	}
+
+	/**
 	 * 提交存储
 	 * @param workInvoice
 	 * @param variables
@@ -3994,4 +4029,58 @@ public class WorkInvoiceService extends CrudService<WorkInvoiceDao, WorkInvoice>
 		}
 	}
 
+
+	public void getAndDisposeInvoiceRedInfo(List<TemporaryInvoiceInfo> list){
+		for (TemporaryInvoiceInfo info : list) {
+			if(StringUtils.isNotBlank(info.getNumber())){
+				//根据申请编号查询最近的一条有效的发票数据
+				//根据关联申请编号查询最近的一条有效的发票数据
+				WorkInvoice invoice = workInvoiceDao.getByNumber(info.getNumber());
+
+				invoice.setWorkInvoiceProjectRelationList(this.getProjectRelation(invoice));
+				List<String> projectNameList = this.getProjectNameListOnRed(invoice);
+				String projectNameStr = String.join(",", projectNameList);
+				if(projectNameStr.contains("\r")){
+					projectNameStr = projectNameStr.replaceAll("\r"," ");
+				}
+				if(projectNameStr.contains("\n")){
+					projectNameStr = projectNameStr.replaceAll("\n"," ");
+				}
+				invoice.setProjectName(projectNameStr);
+
+				if(null != invoice){
+					//获取开票金额并确认小于零
+					if(invoice.getMoney()<0){
+						//将金额转换为整数,并和 项目名称、开票单位、经办人、开票金额、开票内容进行对比,如果能查出来数据,且唯一,则认位其是对应的红冲数据,否则不进行调整
+						double positiveMoney = Math.abs(invoice.getMoney());
+						WorkInvoice selectInvoice = new WorkInvoice();
+						selectInvoice.setMoney(positiveMoney);
+						WorkClientInfo clientInfo = new WorkClientInfo();
+						clientInfo.setName(invoice.getClient().getName());
+						selectInvoice.setClient(clientInfo);
+						selectInvoice.setSubmitterId(invoice.getCreateBy().getId());
+						selectInvoice.setBillingContent(invoice.getBillingContent());
+						selectInvoice.setProjectName(invoice.getProjectName());
+						List<WorkInvoice> relevanceInvoiceList = workInvoiceDao.getByInvoiceList(selectInvoice);
+						if(relevanceInvoiceList.size() == 1){
+							invoice.setRedInvoiceFlag(1);
+							invoice.setRedInvoiceRelevancyId(relevanceInvoiceList.get(0).getId());
+							invoice.setRedInvoiceRelevancyNumber(relevanceInvoiceList.get(0).getNumber());
+							workInvoiceDao.updateInvoceOnRed(invoice);
+						}
+
+					}
+					//将关联的发票申请编号填入需要修改的发票数据中并保存
+					/*WorkInvoice relevanceInvoice = workInvoiceDao.getByNumber(info.getRedNumber());
+					if(null != relevanceInvoice){
+						invoice.setRedInvoiceFlag(1);
+						invoice.setRedInvoiceRelevancyId(relevanceInvoice.getId());
+						invoice.setRedInvoiceRelevancyNumber(relevanceInvoice.getNumber());
+						workInvoiceDao.updateInvoceOnRed(invoice);
+					}*/
+				}
+			}
+		}
+	}
+
 }

+ 16 - 0
src/main/java/com/jeeplus/modules/workinvoice/web/WorkInvoiceTwoController.java

@@ -1725,4 +1725,20 @@ public class WorkInvoiceTwoController extends BaseController {
 		return yearList;
 	}
 
+
+
+	/**
+	 * 根据发票id查询开票的发票编号
+	 * @param invoiceId
+	 * @return
+	 */
+	@RequestMapping(value = "getInvoiceNumberStr")
+	@ResponseBody
+	public String getInvoiceNumberStr(String invoiceId) {
+		HashMap<Object, Object> map = Maps.newHashMap();
+		String invoiceNumberStr = workInvoiceService.getInvoiceNumberStr(invoiceId);
+		map.put("data",invoiceNumberStr);
+		return JsonMapper.toJsonString(map);
+	}
+
 }

+ 26 - 1
src/main/java/com/jeeplus/modules/workprojectnotify/web/WorkProjectNotifyController.java

@@ -2256,6 +2256,12 @@ public class WorkProjectNotifyController extends BaseController {
 					} else {
 						workInvoice.setHome("home");
 					}
+
+					//查询关联红冲发票的开票号
+					if("1".equals(workInvoice.getRedInvoiceFlag()) && StringUtils.isNotBlank(workInvoice.getRedInvoiceRelevancyId())){
+						String invoiceNumberStr = workInvoiceService.getInvoiceNumberStr(workInvoice.getRedInvoiceRelevancyId());
+						workInvoice.setInvoiceNumberStr(invoiceNumberStr);
+					}
 					workInvoice.setAct(getByAct(workInvoice.getProcessInstanceId()));
 					String taskDefKey = workInvoice.getAct().getTaskDefKey();
 					model.addAttribute("workInvoice", workInvoice);
@@ -2323,6 +2329,13 @@ public class WorkProjectNotifyController extends BaseController {
 					} else {
 						workInvoice.setHome("home");
 					}
+
+					//查询关联红冲发票的开票号
+					if("1".equals(workInvoice.getRedInvoiceFlag()) && StringUtils.isNotBlank(workInvoice.getRedInvoiceRelevancyId())){
+						String invoiceNumberStr = workInvoiceService.getInvoiceNumberStr(workInvoice.getRedInvoiceRelevancyId());
+						workInvoice.setInvoiceNumberStr(invoiceNumberStr);
+					}
+
 					workInvoice.setAct(getByAct(workInvoice.getProcessInstanceId()));
 					String taskDefKey = workInvoice.getAct().getTaskDefKey();
 					model.addAttribute("workInvoice", workInvoice);
@@ -2383,6 +2396,13 @@ public class WorkProjectNotifyController extends BaseController {
 					} else {
 						workInvoice.setHome("home");
 					}
+
+					//查询关联红冲发票的开票号
+					if("1".equals(workInvoice.getRedInvoiceFlag()) && StringUtils.isNotBlank(workInvoice.getRedInvoiceRelevancyId())){
+						String invoiceNumberStr = workInvoiceService.getInvoiceNumberStr(workInvoice.getRedInvoiceRelevancyId());
+						workInvoice.setInvoiceNumberStr(invoiceNumberStr);
+					}
+
 					//获取发票开户银行信息
 					String bankName = workInvoiceService.getBankNameByNameOrId(workInvoice.getBank());
 					if (StringUtils.isNotBlank(bankName)) {
@@ -5000,7 +5020,7 @@ public class WorkProjectNotifyController extends BaseController {
 						Iterator<RuralReportConsultant> itView = consultants.iterator();
 						while (itView.hasNext()) {
 							RuralReportConsultant consultant = itView.next();
-							if (consultant.getZixunyuan().equals(projectReportData.getBzshbUserId())) {
+							if (consultant.getZixunyuan().equals(projectReportData.getBzshbUserId()) && "技术负责人".equals(consultant.getRole())) {
 								itView.remove();
 							}
 						}
@@ -10821,6 +10841,11 @@ public class WorkProjectNotifyController extends BaseController {
 				break;
 			}
 		}
+		//查询关联红冲发票的开票号
+		if("1".equals(workInvoice.getRedInvoiceFlag())){
+			String invoiceNumberStr = workInvoiceService.getInvoiceNumberStr(workInvoice.getRedInvoiceRelevancyId());
+			workInvoice.setInvoiceNumberStr(invoiceNumberStr);
+		}
 		workInvoice.setAct(getByAct(workInvoice.getProcessInstanceId()));
 		String taskDefKey = workInvoice.getAct().getTaskDefKey();
 		model.addAttribute("workInvoice", workInvoice);

+ 2 - 0
src/main/resources/jeeplus.properties

@@ -377,6 +377,8 @@ signature_project_approval_work = 3245192847945704016
 
 #其他系统的地址
 CPA_PATH:   http://localhost:2800
+#苏州分公司是否同步数据
+SZ_PATH_flag: false
 #苏州分公司 发票
 SZ_PATH: http://localhost:9527
 #flowable

+ 7 - 0
src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectRecordsDao.xml

@@ -1573,6 +1573,13 @@
 			</choose>
 		WHERE id = #{id}
 	</update>
+	<update id="updateContract">
+	UPDATE rural_project_records SET
+	update_by = #{updateBy.id},
+	update_date = #{updateDate},
+	contract_id = #{workContractInfo.id}
+	WHERE id = #{id}
+	</update>
 	<update id="updateDate">
 		UPDATE rural_project_records SET
 			start_date =  #{startDate},

+ 117 - 5
src/main/resources/mappings/modules/workinvoice/WorkInvoiceDao.xml

@@ -72,7 +72,8 @@
 		a.cancellation_state as "cancellationState",
 		a.red_invoice_flag as "redInvoiceFlag",
 		a.red_invoice_relevancy_id as "redInvoiceRelevancyId",
-		a.red_invoice_relevancy_number as "redInvoiceRelevancyNumber"
+		a.red_invoice_relevancy_number as "redInvoiceRelevancyNumber",
+		a.id_card as "idCard"
 	</sql>
 
 	<sql id="newWorkInvoiceColumns">
@@ -139,7 +140,8 @@
 		a.electronic_invoice_flag as "electronicInvoiceFlag",
 		a.red_invoice_flag as "redInvoiceFlag",
 		a.red_invoice_relevancy_id as "redInvoiceRelevancyId",
-		a.red_invoice_relevancy_number as "redInvoiceRelevancyNumber"
+		a.red_invoice_relevancy_number as "redInvoiceRelevancyNumber",
+		a.id_card as "idCard"
 	</sql>
 
 	<sql id="workInvoiceJoins">
@@ -231,7 +233,8 @@
 		acu.name as "accountCheckingUserName",
 		a.red_invoice_flag as "redInvoiceFlag",
 		a.red_invoice_relevancy_id as "redInvoiceRelevancyId",
-		a.red_invoice_relevancy_number as "redInvoiceRelevancyNumber"
+		a.red_invoice_relevancy_number as "redInvoiceRelevancyNumber",
+		a.id_card as "idCard"
 	</sql>
 
 	<resultMap type="WorkInvoice" id="InvoiceMap">
@@ -276,6 +279,7 @@
 		<result property="accountCheckingUserId" column="accountCheckingUserId"/>
 		<result property="areaId" column="area.id"/>
 		<result property="accountCheckingUserName" column="accountCheckingUserName"/>
+		<result property="idCard" column="idCard"/>
 		<association property="client" javaType="com.jeeplus.modules.workclientinfo.entity.WorkClientInfo">
 			<id property="id" column="clientId" />
 			<result property="name" column="clientName"/>
@@ -1846,7 +1850,8 @@
 			actual_drawer_id,
 			red_invoice_flag,
 			red_invoice_relevancy_id,
-			red_invoice_relevancy_number
+			red_invoice_relevancy_number,
+			id_card
 		) VALUES (
 			#{id},
 			#{number},
@@ -1895,7 +1900,8 @@
 		    #{actualDrawerId},
 		    #{redInvoiceFlag},
 		    #{redInvoiceRelevancyId},
-		    #{redInvoiceRelevancyNumber}
+		    #{redInvoiceRelevancyNumber},
+		    #{idCard}
 		)
 	</insert>
 
@@ -1954,6 +1960,7 @@
 			,red_invoice_flag = #{redInvoiceFlag}
 			,red_invoice_relevancy_id = #{redInvoiceRelevancyId}
 			,red_invoice_relevancy_number = #{redInvoiceRelevancyNumber}
+			,id_card = #{idCard}
 		WHERE id = #{id}
 	</update>
 	<update id="updateDate">
@@ -3081,5 +3088,110 @@
 		WHERE id = #{id}
 	</update>
 
+	<select id="getByInvoiceList" resultType="WorkInvoice">
+		SELECT
+		DISTINCT(a.id) AS "id",
+		a.number AS "number",
+		a.process_instance_id AS "processInstanceId",
+		a.client_id AS "client.id",
+		a.project_id AS "project.id",
+		a.project_name AS "projectName",
+		a.money AS "money",
+		a.money AS "moneyStr",
+		a.invoice_type AS "invoiceType",
+		(case when a.invoice_type = '1' then '专票' when a.invoice_type = '2' then '普票' else '' end) as invoiceTypeStr,
+		a.charge_type AS "chargeType",
+		a.content AS "content",
+		a.drawer_id AS "drawer.id",
+		a.office_id AS "office.id",
+		a.invoice_number AS "invoiceNumber",
+		a.invoice_date AS "invoiceDate",
+		a.drawer_name AS "drawerName",
+		a.take_date AS "takeDate",
+		a.invoice_remarks AS "invoiceRemarks",
+		a.is_invoice AS "isInvoice",
+		a.is_charge AS "isCharge",
+		a.is_invalid AS "isInvalid",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.remarks AS "remarks",
+		a.del_flag AS "delFlag",
+		a.orUnicode AS "orUnicode",
+		a.address AS "address",
+		a.telephone AS "telephone",
+		a.bank AS "bank",
+		a.bank_number AS "bankNumber",
+		a.cancle_reason AS "cancaleReason",
+		su.name AS "createBy.name",
+		so.show_name AS "office.name",
+		w.name AS "client.name",
+		a.invoice_state AS "invoiceState",
+		w.usc_code AS "client.uscCode",
+		w.fax AS "client.fax",
+		w.or_unicode AS "client.orUnicode",
+		w.telephone AS "client.telephone",
+		a.company_id AS "companyId",
+		a.cancle_reason AS "cancleReason",
+		w.address AS "client.address",
+		a.officee_id AS "officeId",
+		a.province AS "province",
+		a.ext AS "ext",
+		a.billing_content as "billingContent",
+		a.receipt_money_date as "receiptMoneyDate",
+		(case when a.receipt_money = '0' then '否' when a.receipt_money = '1' then '是' when a.receipt_money = '2' then '部分收款' else '否' end) as receiptMoney,
+		a.cancellation_remark as "cancellationRemark",
+		a.account_checking_user_id as "accountCheckingUserId",
+		a.area_id as "area.id",
+		a.new_drawer_id as "newDrawerId",
+		a.new_drawer as "newDrawer",
+		a.actual_drawer_email_address as "actualDrawerEmailAddress",
+		a.actual_drawer_id as "actualDrawerId",
+		a.electronic_invoice_flag as "electronicInvoiceFlag",
+		a.cancellation_process_instance_id as "cancellationProcessInstanceId",
+		a.cancellation_state as "cancellationState",
+		a.red_invoice_flag as "redInvoiceFlag",
+		a.red_invoice_relevancy_id as "redInvoiceRelevancyId",
+		a.red_invoice_relevancy_number as "redInvoiceRelevancyNumber"
+		FROM work_invoice a
+		LEFT JOIN sys_user su ON su.id = a.create_by
+		LEFT JOIN work_client_info w ON  w.id = a.client_id
+		LEFT join sys_office so on so.id = a.office_id
+		left join work_invoice_project_relation wipr on a.id = wipr.invoice_id
+		left join rural_project_records rpr on rpr.id = wipr.project_id
+		<where>
+			a.del_flag = 0
+			<if test="client != null and client.name != null and client.name != ''">
+				AND w.name = #{client.name}
+			</if>
+			<if test="money != null and money != ''">
+				AND a.money = #{money}
+			</if>
+			<if test="(submitterId != null and submitterId != '') or (submitterName != null and submitterName != '')">
+				AND a.create_by = #{submitterId}
+			</if>
+			<if test="invoiceType != null and invoiceType != ''">
+				AND a.invoice_type = #{invoiceType}
+			</if>
+			<if test="chargeType != null and chargeType != ''">
+				AND a.charge_type = #{chargeType}
+			</if>
+			<if test="billingContent != null and billingContent != ''">
+				AND a.billing_content = #{billingContent}
+			</if>
+			<if test="projectName != null and projectName != ''">
+				and (wipr.details = #{projectName}
+				or rpr.project_name = #{projectName}
+				)
+			</if>
+			AND a.receipt_money = 0
+		</where>
+	</select>
+
+	<select id="getInvoiceNumberStr" resultType="java.lang.String">
+		select group_concat(number) from work_invoice_detail where invoice_id = #{invoiceId}
+	</select>
+
 
 </mapper>

+ 8 - 1
src/main/webapp/webpage/modules/filialeWorkInvoice/filialeConditionWorkInvoiceAudit.jsp

@@ -228,7 +228,14 @@
 			<div class="layui-item layui-col-sm6 count2">
 				<label class="layui-form-label">姓名:</label>
 				<div class="layui-input-block">
-					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.newDrawerName}"/>
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.newDrawerId}"/>
+				</div>
+			</div>
+
+			<div class="layui-item layui-col-sm6 count2">
+				<label class="layui-form-label">身份证号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.idCard}"/>
 				</div>
 			</div>
 			<div class="layui-item layui-col-sm6">

+ 8 - 1
src/main/webapp/webpage/modules/filialeWorkInvoice/filialeWorkInvoiceAudit.jsp

@@ -471,7 +471,14 @@
 				<div class="layui-item layui-col-sm6 count2">
 					<label class="layui-form-label">姓名:</label>
 					<div class="layui-input-block">
-						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.newDrawerName}"/>
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.newDrawerId}"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm6 count2">
+					<label class="layui-form-label">身份证号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.idCard}"/>
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6">

+ 8 - 1
src/main/webapp/webpage/modules/filialeWorkInvoice/filialeWorkInvoiceAuditEnd.jsp

@@ -611,7 +611,14 @@
 			<div class="layui-item layui-col-sm6 count2">
 				<label class="layui-form-label">姓名:</label>
 				<div class="layui-input-block">
-					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.newDrawerName}"/>
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.newDrawerId}"/>
+				</div>
+			</div>
+
+			<div class="layui-item layui-col-sm6 count2">
+				<label class="layui-form-label">身份证号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.idCard}"/>
 				</div>
 			</div>
 			<div class="layui-item layui-col-sm6">

+ 14 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/cost/projectcontentinfo/adminReportEditForm.jsp

@@ -678,6 +678,13 @@
 			}
 			if(af !=''){
 				$("#consultFee").val(af)
+				//将咨询标的额整理成万元并赋值给上报中的咨询标的额
+				// 将元转换为万元
+				let wan = af / 10000;
+
+				// 四舍五入保留两位小数
+				wan = Math.round(wan * 100) / 100;
+				$("#ZiXunBDE").val(wan);
 			}
 		}
 
@@ -710,6 +717,13 @@
 			}
 			if(af !=''){
 				$("#consultFee").val(af)
+				//将咨询标的额整理成万元并赋值给上报中的咨询标的额
+				// 将元转换为万元
+				let wan = af / 10000;
+
+				// 四舍五入保留两位小数
+				wan = Math.round(wan * 100) / 100;
+				$("#ZiXunBDE").val(wan);
 			}
 			$("#buildingFee").val("");
 			$("#installFee").val("");

+ 13 - 2
src/main/webapp/webpage/modules/ruralprojectrecords/cost/ruralCostProjectRecordsForm.jsp

@@ -161,8 +161,18 @@
                         return flags;
                     }
                 }
-                $("#inputForm").submit();
-                return true;
+                var subbmitFlag = $("#subbmitFlag").val();
+                subbmitFlag ++;
+                $("#subbmitFlag").val(subbmitFlag)
+                console.log(subbmitFlag)
+
+                if(1 === subbmitFlag){
+                    $("#inputForm").submit();
+                    return true;
+                }else{
+                    parent.layer.msg("请勿重复提交!", {icon: 5});
+                    return false;
+                }
             }else{
                 parent.layer.msg("信息未填写完整!", {icon: 5});
             }
@@ -905,6 +915,7 @@
             <form:hidden path="id"/>
             <form:hidden path="workContractInfo.client.id" id="contractClientId" value="${workContractInfo.client.id}"/>
             <input type="hidden" id="flagFile" value="">
+            <input type="hidden" id="subbmitFlag" value="0">
             <input type="hidden" id="createReportFlag" name="createReportFlag" value="${ruralProjectRecords.createReportFlag}">
             <input type="hidden" id="emergencyProjectFlag" name="emergencyProject" value="${ruralProjectRecords.emergencyProject}">
 

+ 4 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/cost/ruralCostProjectRecordsList.jsp

@@ -703,6 +703,10 @@
 							xml+="<a href=\"#\" onclick=\"openDialogView('文件上传', '${ctx}/ruralProject/ruralCostProjectRecords/formAccessory?id=" + d.id + "','95%', '95%')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" > 上传文件</a>";
 							/*xml+="<a href=\"#\" onclick=\"btnImport('" + d.id + "')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" > 导入压缩文件</a>";*/
 						}
+						//针对无合同项目添加修改合同的功能
+						if(!d.conId){
+						xml+="<a href=\"#\" onclick=\"openDialogre('修改合同', '${ctx}/ruralProject/ruralCostProjectRecords/updateContractForm?id=" + d.id +"','95%', '95%','','提交,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 合同修改</a>";
+						}
 						if(d.reportDataFlag != undefined && d.reportDataFlag =="1")
 						{
 							xml+="<a href=\"${ctx}/ruralProject/ruralCostProjectRecords/createReportDataId?id=" + d.id + "&projectType=2"+"\" onclick=\"return confirmx('确认要生成报告号吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-orange\"> 生成报告号</a>";

Разница между файлами не показана из-за своего большого размера
+ 1466 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/cost/ruralCostProjectRecordsUpdateContractForm.jsp


+ 4 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/ruralProjectRecordsList.jsp

@@ -570,6 +570,10 @@
                         {
 							xml+="<a href=\"#\" onclick=\"openDialogView('文件上传', '${ctx}/ruralProject/ruralProjectRecords/formAccessory?id=" + d.id + "','95%', '95%')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" > 上传文件</a>";
                         }
+						//针对无合同项目添加修改合同的功能
+						if(!d.conId){
+							xml+="<a href=\"#\" onclick=\"openDialogre('修改合同', '${ctx}/ruralProject/ruralProjectRecords/updateContractForm?id=" + d.id +"','95%', '95%','','提交,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 合同修改</a>";
+						}
 						if(d.reportDataFlag != undefined && d.reportDataFlag =="1")
 						{
 							xml+="<a href=\"${ctx}/ruralProject/ruralCostProjectRecords/createReportDataId?id=" + d.id + "&projectType=1"+"\" onclick=\"return confirmx('确认要生成报告号吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-orange\"> 生成报告号</a>";

Разница между файлами не показана из-за своего большого размера
+ 1474 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/ruralProjectRecordsUpdateContractForm.jsp


+ 16 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/all/adminReportEditFormAlls.jsp

@@ -156,6 +156,7 @@
 						//咨询标的额
 						var ZiXunBDE = $("#ZiXunBDE").val();
 						var GCGMValue = $("#GCGMValue").val();
+						console.log('ZiXunBDE',ZiXunBDE)
 
 						if(GCGMValue == 0){
 							parent.layer.msg("建筑面积或规模必须大于0!", {icon: 5});
@@ -685,6 +686,13 @@
 			}
 			if(af !=''){
 				$("#consultFee").val(af)
+				//将咨询标的额整理成万元并赋值给上报中的咨询标的额
+				// 将元转换为万元
+				let wan = af / 10000;
+
+				// 四舍五入保留两位小数
+				wan = Math.round(wan * 100) / 100;
+				$("#ZiXunBDE").val(wan);
 			}
 		}
 		function getApprovalFee() {
@@ -705,6 +713,14 @@
 			}
 			if(af !=''){
 				$("#consultFee").val(af)
+				//将咨询标的额整理成万元并赋值给上报中的咨询标的额
+				// 将元转换为万元
+				let wan = af / 10000;
+
+				// 四舍五入保留两位小数
+				wan = Math.round(wan * 100) / 100;
+				$("#ZiXunBDE").val(wan);
+
 			}
 			$("#buildingFee").val("");
 			$("#installFee").val("");

+ 6 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/projectRecordsMessageModify.jsp

@@ -497,6 +497,12 @@
             bornTemplete(list, idx+1, tpl, row, idx);
         }
 
+        function delRow(obj, prefix){
+            var id = $(prefix+"_id");
+            var delFlag = $(prefix+"_delFlag");
+            $(obj).parent().parent().remove();
+        }
+
         function bornTemplete(list, idx, tpl, row, idx1){
             $(list).append(Mustache.render(tpl, {
                 idx: idx, delBtn: true, row: row,

+ 8 - 1
src/main/webapp/webpage/modules/workinvoice/conditionWorkInvoiceAudit.jsp

@@ -228,7 +228,14 @@
 			<div class="layui-item layui-col-sm6 count2">
 				<label class="layui-form-label">姓名:</label>
 				<div class="layui-input-block">
-					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.newDrawerName}"/>
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.newDrawerId}"/>
+				</div>
+			</div>
+
+			<div class="layui-item layui-col-sm6 count2">
+				<label class="layui-form-label">身份证号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.idCard}"/>
 				</div>
 			</div>
 			<div class="layui-item layui-col-sm6">

+ 17 - 1
src/main/webapp/webpage/modules/workinvoice/workInvoiceAllForm.jsp

@@ -406,7 +406,17 @@
 
 
 		function setInvoiceValue (obj){
-
+			$.ajax({
+				type:'post',
+				url:'${ctx}/workinvoiceTwo/workinvoiceTwo/getInvoiceNumberStr',
+				data:{
+					"invoiceId":obj
+				},
+				success:function(data){
+					var d = JSON.parse(data);
+					$("#invoiceNumberStr").val(d.data);
+				}
+			})
 		}
 
 		function moneyChange(obj){
@@ -1198,6 +1208,12 @@
 										   labelValue="${workInvoice.redInvoiceRelevancyNumber}" cssClass="form-control judgment layui-input" fieldLabels="单位" fieldKeys="number" searchLabel="红字发票" searchKey="number" ></sys:selectinvoice>
 					</div>
 				</div>
+				<div class="layui-item layui-col-sm6 redInvoice">
+					<label class="layui-form-label">关联发票号:</label>
+					<div class="layui-input-block">
+						<input id="invoiceNumberStr" htmlEscape="false" readonly="true" class="form-control layui-input" value=""/>
+					</div>
+				</div>
 				<div class="layui-item layui-col-sm12 with-textarea">
 					<label class="layui-form-label double-line"><span class="require-item contractType">*</span>开票内容要求:</label>
 					<div class="layui-input-block">

+ 17 - 1
src/main/webapp/webpage/modules/workinvoice/workInvoiceAllModify.jsp

@@ -355,7 +355,17 @@
 
 
 		function setInvoiceValue (obj){
-
+			$.ajax({
+				type:'post',
+				url:'${ctx}/workinvoiceTwo/workinvoiceTwo/getInvoiceNumberStr',
+				data:{
+					"invoiceId":obj
+				},
+				success:function(data){
+					var d = JSON.parse(data);
+					$("#invoiceNumberStr").val(d.data);
+				}
+			})
 		}
 
 		function moneyChange(obj){
@@ -1123,6 +1133,12 @@
 										   labelValue="${workInvoice.redInvoiceRelevancyNumber}" cssClass="form-control judgment layui-input" fieldLabels="单位" fieldKeys="number" searchLabel="红字发票" searchKey="number" ></sys:selectinvoice>
 					</div>
 				</div>
+				<div class="layui-item layui-col-sm6 redInvoice">
+					<label class="layui-form-label">关联发票号:</label>
+					<div class="layui-input-block">
+						<input id="invoiceNumberStr" htmlEscape="false" readonly="true" class="form-control layui-input" value=""/>
+					</div>
+				</div>
 				<div class="layui-item layui-col-sm12 with-textarea">
 					<label class="layui-form-label">开票内容要求:</label>
 					<div class="layui-input-block">

+ 56 - 10
src/main/webapp/webpage/modules/workinvoice/workInvoiceAudit.jsp

@@ -50,6 +50,16 @@
 					}
 				}
 			});
+
+			var radioVal = '${workInvoice.newDrawer}';
+			//专票必填
+			if(radioVal == 1){
+				$(".count2").hide();
+				$(".count1").show();
+			}else if(radioVal == 2){
+				$(".count1").hide();
+				$(".count2").show();
+			}
 		});
 	</script>
 </head>
@@ -113,54 +123,84 @@
 		</div>
 		<div class="form-group layui-row first lw14">
 			<div class="form-group-label"><h2>发票详情</h2></div>
+				<%--<div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+                    <div class="layui-input-block">
+                        <input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoice.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+                    </div>
+                </div>--%>
 			<div class="layui-item layui-col-sm6">
-				<label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+				<label class="layui-form-label"><span class="require-item" style=" font-weight: bold;">*<c:choose><c:when test="${workInvoice.invoiceType eq '2'}">发票类型:</c:when></c:choose></span><c:choose><c:when test="${workInvoice.invoiceType eq '1'}">发票类型:</c:when></c:choose></label>
 				<div class="layui-input-block">
-					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoice.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+					<input htmlEscape="false" readonly="true" id="invoiceType"  class="form-control layui-input" <c:choose><c:when test="${workInvoice.invoiceType eq '2'}"> style=" font-weight: bold;color: red;" </c:when></c:choose> value="<c:choose><c:when test="${workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
 				</div>
 			</div>
 			<div class="layui-item layui-col-sm6">
-				<label class="layui-form-label"><span class="require-item">*</span>票类型:</label>
+				<label class="layui-form-label"><span class="require-item">*</span>票类型:</label>
 				<div class="layui-input-block">
-					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+					<input htmlEscape="false" readonly="true" id="newDrawer"  class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.newDrawer eq '1'}">企业开票</c:when><c:when test="${workInvoice.newDrawer eq '2'}">个人开票</c:when></c:choose>"/>
 				</div>
 			</div>
 			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label double-line">发票申请编号:</label>
+				<div class="layui-input-block">
+					<div class="input-group">
+						<form:input path="number" htmlEscape="false" readonly="true"   class="form-control layui-input"/>
+						<span class="input-group-btn">
+								<label class="form-status"><c:choose><c:when test="${ empty workInvoice.invoiceState}">新添</c:when><c:otherwise>${fns:getDictLabel(workInvoice.invoiceState, 'audit_state','')}</c:otherwise>	</c:choose></label>
+							</span>
+					</div>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6 count1">
 				<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
 				<div class="layui-input-block">
 					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.client.name}"/>
 				</div>
 			</div>
-			<div class="layui-item layui-col-sm6">
+			<div class="layui-item layui-col-sm6 count1">
 				<label class="layui-form-label">纳税人识别号:</label>
 				<div class="layui-input-block">
-					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.orUnicode}"/>
+					<input htmlEscape="false" readonly="true" id="orUnicode"   class="form-control layui-input" value="${workInvoice.orUnicode}"/>
 				</div>
 			</div>
-			<div class="layui-item layui-col-sm6">
+			<div class="layui-item layui-col-sm6 count1">
 				<label class="layui-form-label">地址:</label>
 				<div class="layui-input-block">
 					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.address}"/>
 				</div>
 			</div>
-			<div class="layui-item layui-col-sm6">
+			<div class="layui-item layui-col-sm6 count1">
 				<label class="layui-form-label">电话:</label>
 				<div class="layui-input-block">
 					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.telephone}"/>
 				</div>
 			</div>
-			<div class="layui-item layui-col-sm6">
+			<div class="layui-item layui-col-sm6 count1">
 				<label class="layui-form-label">开户银行:</label>
 				<div class="layui-input-block">
 					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bank}"/>
 				</div>
 			</div>
-			<div class="layui-item layui-col-sm6">
+			<div class="layui-item layui-col-sm6 count1">
 				<label class="layui-form-label">银行账号:</label>
 				<div class="layui-input-block">
 					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bankNumber}"/>
 				</div>
 			</div>
+
+			<div class="layui-item layui-col-sm6 count2">
+				<label class="layui-form-label">姓名:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.newDrawerId}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6 count2">
+				<label class="layui-form-label">身份证号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.idCard}"/>
+				</div>
+			</div>
 			<div class="layui-item layui-col-sm6">
 				<label class="layui-form-label">收款类型:</label>
 				<div class="layui-input-block">
@@ -194,6 +234,12 @@
 					<input id="redInvoiceRelevancyNumber" name="redInvoiceRelevancyNumber" htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.redInvoiceRelevancyNumber}"/>
 				</div>
 			</div>
+			<div class="layui-item layui-col-sm6 redInvoice">
+				<label class="layui-form-label">关联发票号:</label>
+				<div class="layui-input-block">
+					<input id="invoiceNumberStr" htmlEscape="false" readonly="true" class="form-control layui-input" value=""/>
+				</div>
+			</div>
 			<div class="layui-item layui-col-sm6">
 				<label class="layui-form-label">开票内容要求:</label>
 				<div class="layui-input-block">

+ 13 - 1
src/main/webapp/webpage/modules/workinvoice/workInvoiceAuditEnd.jsp

@@ -659,7 +659,13 @@
 			<div class="layui-item layui-col-sm6 count2">
 				<label class="layui-form-label">姓名:</label>
 				<div class="layui-input-block">
-					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.newDrawerName}"/>
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.newDrawerId}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6 count2">
+				<label class="layui-form-label">身份证号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.idCard}"/>
 				</div>
 			</div>
 			<div class="layui-item layui-col-sm6">
@@ -695,6 +701,12 @@
 					<input id="redInvoiceRelevancyNumber" name="redInvoiceRelevancyNumber" htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.redInvoiceRelevancyNumber}"/>
 				</div>
 			</div>
+			<div class="layui-item layui-col-sm6 redInvoice">
+				<label class="layui-form-label">关联发票号:</label>
+				<div class="layui-input-block">
+					<input id="invoiceNumberStr" htmlEscape="false" readonly="true" class="form-control layui-input" value=""/>
+				</div>
+			</div>
 			<div class="layui-item layui-col-sm12">
 				<label class="layui-form-label">开票内容要求:</label>
 				<div class="layui-input-block">

+ 44 - 9
src/main/webapp/webpage/modules/workinvoice/workInvoiceExamineAudit.jsp

@@ -81,6 +81,16 @@
 				var d=this.length-endStr.length;
 				return (d>=0&&this.lastIndexOf(endStr)==d)
 			}
+
+			var radioVal = '${workInvoice.newDrawer}';
+			//专票必填
+			if(radioVal == 1){
+				$(".count2").hide();
+				$(".count1").show();
+			}else if(radioVal == 2){
+				$(".count1").hide();
+				$(".count2").show();
+			}
 		});
 
 		function addRow(list, idx, tpl, row,flag){
@@ -488,13 +498,19 @@
                         </div>
                     </div>--%>
 				<div class="layui-item layui-col-sm6">
-					<label class="layui-form-label"><span class="require-item">*</span>发票类型:</label>
+					<label class="layui-form-label"><span class="require-item" style=" font-weight: bold;">*<c:choose><c:when test="${workInvoice.invoiceType eq '2'}">发票类型:</c:when></c:choose></span><c:choose><c:when test="${workInvoice.invoiceType eq '1'}">发票类型:</c:when></c:choose></label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" id="invoiceType"  class="form-control layui-input" <c:choose><c:when test="${workInvoice.invoiceType eq '2'}"> style=" font-weight: bold;color: red;" </c:when></c:choose> value="<c:choose><c:when test="${workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>开票类型:</label>
 					<div class="layui-input-block">
-						<input htmlEscape="false" readonly="true" id="invoiceType"  class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+						<input htmlEscape="false" readonly="true" id="newDrawer"  class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.newDrawer eq '1'}">企业开票</c:when><c:when test="${workInvoice.newDrawer eq '2'}">个人开票</c:when></c:choose>"/>
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6">
-					<label class="layui-form-label">发票申请编号:</label>
+					<label class="layui-form-label double-line">发票申请编号:</label>
 					<div class="layui-input-block">
 						<div class="input-group">
 							<form:input path="number" htmlEscape="false" readonly="true"   class="form-control layui-input"/>
@@ -504,42 +520,55 @@
 						</div>
 					</div>
 				</div>
-				<div class="layui-item layui-col-sm6">
+				<div class="layui-item layui-col-sm6 count1">
 					<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
 					<div class="layui-input-block">
 						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.client.name}"/>
 					</div>
 				</div>
-				<div class="layui-item layui-col-sm6">
+				<div class="layui-item layui-col-sm6 count1">
 					<label class="layui-form-label">纳税人识别号:</label>
 					<div class="layui-input-block">
 						<input htmlEscape="false" readonly="true" id="orUnicode"   class="form-control layui-input" value="${workInvoice.orUnicode}"/>
 					</div>
 				</div>
-				<div class="layui-item layui-col-sm6">
+				<div class="layui-item layui-col-sm6 count1">
 					<label class="layui-form-label">地址:</label>
 					<div class="layui-input-block">
 						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.address}"/>
 					</div>
 				</div>
-				<div class="layui-item layui-col-sm6">
+				<div class="layui-item layui-col-sm6 count1">
 					<label class="layui-form-label">电话:</label>
 					<div class="layui-input-block">
 						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.telephone}"/>
 					</div>
 				</div>
-				<div class="layui-item layui-col-sm6">
+				<div class="layui-item layui-col-sm6 count1">
 					<label class="layui-form-label">开户银行:</label>
 					<div class="layui-input-block">
 						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bank}"/>
 					</div>
 				</div>
-				<div class="layui-item layui-col-sm6">
+				<div class="layui-item layui-col-sm6 count1">
 					<label class="layui-form-label">银行账号:</label>
 					<div class="layui-input-block">
 						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bankNumber}"/>
 					</div>
 				</div>
+
+				<div class="layui-item layui-col-sm6 count2">
+					<label class="layui-form-label">姓名:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.newDrawerId}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 count2">
+					<label class="layui-form-label">身份证号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.idCard}"/>
+					</div>
+				</div>
 				<div class="layui-item layui-col-sm6">
 					<label class="layui-form-label">收款类型:</label>
 					<div class="layui-input-block">
@@ -573,6 +602,12 @@
 						<input id="redInvoiceRelevancyNumber" name="redInvoiceRelevancyNumber" htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.redInvoiceRelevancyNumber}"/>
 					</div>
 				</div>
+				<div class="layui-item layui-col-sm6 redInvoice">
+					<label class="layui-form-label">关联发票号:</label>
+					<div class="layui-input-block">
+						<input id="invoiceNumberStr" htmlEscape="false" readonly="true" class="form-control layui-input" value=""/>
+					</div>
+				</div>
 				<div class="layui-item layui-col-sm12">
 					<label class="layui-form-label">开票内容要求:</label>
 					<div class="layui-input-block">

+ 48 - 13
src/main/webapp/webpage/modules/workinvoice/workInvoiceExamineAuditEnd.jsp

@@ -119,6 +119,16 @@
                 var d=this.length-endStr.length;
                 return (d>=0&&this.lastIndexOf(endStr)==d)
             }
+
+			var radioVal = '${workInvoice.newDrawer}';
+			//专票必填
+			if(radioVal == 1){
+				$(".count2").hide();
+				$(".count1").show();
+			}else if(radioVal == 2){
+				$(".count1").hide();
+				$(".count2").show();
+			}
 		});
 
         function addRow(list, idx, tpl, row,flag){
@@ -519,20 +529,26 @@
 		</div>
 		<div class="form-group layui-row first lw14">
 			<div class="form-group-label"><h2>发票详情</h2></div>
-			<%--<div class="layui-item layui-col-sm6">
-				<label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+				<%--<div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+                    <div class="layui-input-block">
+                        <input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoice.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+                    </div>
+                </div>--%>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item" style=" font-weight: bold;">*<c:choose><c:when test="${workInvoice.invoiceType eq '2'}">发票类型:</c:when></c:choose></span><c:choose><c:when test="${workInvoice.invoiceType eq '1'}">发票类型:</c:when></c:choose></label>
 				<div class="layui-input-block">
-					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoice.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+					<input htmlEscape="false" readonly="true" id="invoiceType"  class="form-control layui-input" <c:choose><c:when test="${workInvoice.invoiceType eq '2'}"> style=" font-weight: bold;color: red;" </c:when></c:choose> value="<c:choose><c:when test="${workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
 				</div>
-			</div>--%>
+			</div>
 			<div class="layui-item layui-col-sm6">
-				<label class="layui-form-label"><span class="require-item">*</span>发票类型:</label>
+				<label class="layui-form-label"><span class="require-item">*</span>票类型:</label>
 				<div class="layui-input-block">
-					<input htmlEscape="false" readonly="true" id="invoiceType"  class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+					<input htmlEscape="false" readonly="true" id="newDrawer"  class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.newDrawer eq '1'}">企业开票</c:when><c:when test="${workInvoice.newDrawer eq '2'}">个人开票</c:when></c:choose>"/>
 				</div>
 			</div>
 			<div class="layui-item layui-col-sm6">
-				<label class="layui-form-label">发票申请编号:</label>
+				<label class="layui-form-label double-line">发票申请编号:</label>
 				<div class="layui-input-block">
 					<div class="input-group">
 						<form:input path="number" htmlEscape="false" readonly="true"   class="form-control layui-input"/>
@@ -542,42 +558,55 @@
 					</div>
 				</div>
 			</div>
-			<div class="layui-item layui-col-sm6">
+			<div class="layui-item layui-col-sm6 count1">
 				<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
 				<div class="layui-input-block">
 					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.client.name}"/>
 				</div>
 			</div>
-			<div class="layui-item layui-col-sm6">
+			<div class="layui-item layui-col-sm6 count1">
 				<label class="layui-form-label">纳税人识别号:</label>
 				<div class="layui-input-block">
 					<input htmlEscape="false" readonly="true" id="orUnicode"   class="form-control layui-input" value="${workInvoice.orUnicode}"/>
 				</div>
 			</div>
-			<div class="layui-item layui-col-sm6">
+			<div class="layui-item layui-col-sm6 count1">
 				<label class="layui-form-label">地址:</label>
 				<div class="layui-input-block">
 					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.address}"/>
 				</div>
 			</div>
-			<div class="layui-item layui-col-sm6">
+			<div class="layui-item layui-col-sm6 count1">
 				<label class="layui-form-label">电话:</label>
 				<div class="layui-input-block">
 					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.telephone}"/>
 				</div>
 			</div>
-			<div class="layui-item layui-col-sm6">
+			<div class="layui-item layui-col-sm6 count1">
 				<label class="layui-form-label">开户银行:</label>
 				<div class="layui-input-block">
 					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bank}"/>
 				</div>
 			</div>
-			<div class="layui-item layui-col-sm6">
+			<div class="layui-item layui-col-sm6 count1">
 				<label class="layui-form-label">银行账号:</label>
 				<div class="layui-input-block">
 					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bankNumber}"/>
 				</div>
 			</div>
+
+			<div class="layui-item layui-col-sm6 count2">
+				<label class="layui-form-label">姓名:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.newDrawerId}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6 count2">
+				<label class="layui-form-label">身份证号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.idCard}"/>
+				</div>
+			</div>
 			<div class="layui-item layui-col-sm6">
 				<label class="layui-form-label">收款类型:</label>
 				<div class="layui-input-block">
@@ -611,6 +640,12 @@
 					<input id="redInvoiceRelevancyNumber" name="redInvoiceRelevancyNumber" htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.redInvoiceRelevancyNumber}"/>
 				</div>
 			</div>
+			<div class="layui-item layui-col-sm6 redInvoice">
+				<label class="layui-form-label">关联发票号:</label>
+				<div class="layui-input-block">
+					<input id="invoiceNumberStr" htmlEscape="false" readonly="true" class="form-control layui-input" value=""/>
+				</div>
+			</div>
 			<div class="layui-item layui-col-sm12">
 				<label class="layui-form-label">开票内容要求:</label>
 				<div class="layui-input-block">

+ 143 - 8
src/main/webapp/webpage/modules/workinvoice/workInvoiceExamineModify.jsp

@@ -38,6 +38,20 @@
 					}
 				}
 
+				var newDrawer=$('input:radio[name="newDrawer"]:checked').val();
+				if(null == newDrawer || undefined == newDrawer || '' == newDrawer){
+					parent.layer.msg("请选择开票类型",{icon:0});
+					return false;
+				}
+				if (newDrawer != 2) {
+				} else {
+					var idCard = $("#idCard").val();
+					if(!submitValidateIDCard(idCard)){
+						layer.msg("身份证号不正确,请重新输入",{icon:2});
+						return false;
+					}
+				}
+
 
 				var money = $("#money").val();
 				var redInvoice=$('input:radio[name="redInvoiceFlag"]:checked').val();
@@ -112,6 +126,19 @@
 					form.render();
 				})
 
+
+				form.on('radio(newDrawerRadio)',function (event) {
+					var radioVal = $(this).val();
+					if(radioVal == 1 || radioVal == 1){
+						$(".count2").hide();
+						$(".count1").show();
+					}else if(radioVal == 2 || radioVal == 2){
+						$(".count1").hide();
+						$(".count2").show();
+					}
+					form.render();
+				})
+
 			});
 
 			var redInvoiceFlag = '${workInvoice.redInvoiceFlag}';//后端获取值
@@ -201,6 +228,19 @@
 			$("#attachment_btn").click(function () {
 				$("#attachment_file").click();
 			});
+
+
+			var newDrawerRadio = '${workInvoice.newDrawer}';//后端获取值
+			if(undefined == newDrawerRadio || null == newDrawerRadio || '' == newDrawerRadio || newDrawerRadio == "1"){
+				document.getElementsByName("newDrawer")[0].checked = true;
+				$(".count2").hide();
+				$(".count1").show();
+			}else{
+				document.getElementsByName("newDrawer")[1].checked = true;
+				$(".count1").hide();
+				$(".count2").show();
+			}
+
         });
         function setValuee(obj){
             $.ajax({
@@ -228,7 +268,17 @@
 
 
 		function setInvoiceValue (obj){
-
+			$.ajax({
+				type:'post',
+				url:'${ctx}/workinvoiceTwo/workinvoiceTwo/getInvoiceNumberStr',
+				data:{
+					"invoiceId":obj
+				},
+				success:function(data){
+					var d = JSON.parse(data);
+					$("#invoiceNumberStr").val(d.data);
+				}
+			})
 		}
 
 		function moneyChange(obj){
@@ -750,6 +800,58 @@
 				obj.value = obj.value.replace(reg, regStrs[i][1]);
 			}
 		}
+		function validateIDCard(idCard) {
+			// 15位和18位身份证正则表达式
+			const idCardPattern = /^(^[1-9]\d{7}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}$)|(^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X|x)$)$/;
+
+			// 判断身份证号格式是否正确
+			if (!idCardPattern.test(idCard)) {
+				layer.msg("身份证号不正确,请重新输入",{icon:2});
+				return false;
+			}
+
+			// 如果是18位身份证,需要验证最后一位校验码
+			if (idCard.length === 18) {
+				if(!validateChecksum(idCard)){
+					layer.msg("身份证号不正确,请重新输入",{icon:2});
+					return false;
+				}
+			}
+		}
+		function submitValidateIDCard(idCard) {
+			// 15位和18位身份证正则表达式
+			const idCardPattern = /^(^[1-9]\d{7}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}$)|(^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X|x)$)$/;
+
+			// 判断身份证号格式是否正确
+			if (!idCardPattern.test(idCard)) {
+				return false;
+			}
+
+			// 如果是18位身份证,需要验证最后一位校验码
+			if (idCard.length === 18) {
+				if(!validateChecksum(idCard)){
+					return false;
+				}
+			}
+			return true
+		}
+
+		function validateChecksum(idCard) {
+			const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; // 加权因子
+			const checksumDigits = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; // 校验码
+
+			// 计算加权和
+			let sum = 0;
+			for (let i = 0; i < 17; i++) {
+				sum += parseInt(idCard[i]) * weights[i];
+			}
+
+			// 计算校验码
+			const checkDigit = checksumDigits[sum % 11];
+
+			// 比较身份证号的最后一位与计算的校验码
+			return checkDigit === idCard[17].toUpperCase();
+		}
 	</script>
 </head>
 <body>
@@ -879,6 +981,13 @@
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>开票类型:</label>
+					<div class="layui-input-block">
+						<input type="radio" name="newDrawer" lay-filter="newDrawerRadio" title="企业开票" value="1">
+						<input type="radio" name="newDrawer" lay-filter="newDrawerRadio" title="个人开票" value="2">
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 count1">
 					<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
 					<div class="layui-input-block readOnlyFFF with-icon">
 						<sys:gridselect url="${ctx}/workinvoice/workInvoice/selectclient" id="client" name="client.id"  value="${workInvoice.client.id}"  title="选择开票单位" labelName="workInvoice.client.name"
@@ -886,34 +995,54 @@
 						</td>
 					</div>
 				</div>
-				<div class="layui-item layui-col-sm6">
+				<div class="layui-item layui-col-sm6 count1">
 					<label class="layui-form-label"><span class="require-item invoicetype">*</span>纳税人识别号:</label>
 					<div class="layui-input-block">
 						<form:input id="orUnicode" path="orUnicode" placeholder="请输入纳税人识别码" htmlEscape="false"    class="form-control isUscCode layui-input"/>
 					</div>
 				</div>
-				<div class="layui-item layui-col-sm6">
+				<div class="layui-item layui-col-sm6 count1">
 					<label class="layui-form-label"><span class="require-item invoicetype">*</span>注册地址:</label>
 					<div class="layui-input-block">
 						<form:input id="address" path="address" placeholder="请输入注册地址" htmlEscape="false"    class="form-control layui-input"/>
 					</div>
 				</div>
-				<div class="layui-item layui-col-sm6">
+				<div class="layui-item layui-col-sm6 count1">
 					<label class="layui-form-label"><span class="require-item invoicetype">*</span>电话:</label>
 					<div class="layui-input-block">
 						<form:input id="telephone" path="telephone" placeholder="请输入电话" htmlEscape="false"    class="form-control isTel layui-input"/>
 					</div>
 				</div>
-				<div class="layui-item layui-col-sm6">
+				<div class="layui-item layui-col-sm6 count1">
 					<label class="layui-form-label"><span class="require-item invoicetype">*</span>开户银行:</label>
 					<div class="layui-input-block">
-						<form:input id ="bank"  path="bank" htmlEscape="false" placeholder="请输入开户银行"  class="form-control layui-input"/>
+						<select id="bank" name="bank" value="${workInvoice.bank}" lay-filter="bankFilter"></select>
+						<span id="bankRemarks" class="spanzj" style="color:red;"></span>
+							<%--<form:input id ="bank"  path="bank" htmlEscape="false" placeholder="请输入开户银行"  class="form-control layui-input"/>--%>
 					</div>
 				</div>
-				<div class="layui-item layui-col-sm6">
+				<div class="layui-item layui-col-sm6 count1">
 					<label class="layui-form-label"><span class="require-item invoicetype">*</span>银行账号:</label>
 					<div class="layui-input-block">
-						<form:input id="bankNumber" path="bankNumber" htmlEscape="false" placeholder="请输入银行账号"  class="form-control layui-input"/>
+						<form:input id="bankNumber" path="bankNumber" htmlEscape="false" readonly="true" placeholder="请输入银行账号"  class="form-control number layui-input"/>
+					</div>
+				</div>
+				<div class="layui-form-item count2">
+					<div class="layui-item layui-col-sm6">
+						<label class="layui-form-label"><span class="require-item">*</span>姓名:</label>
+						<div class="layui-input-block">
+							<form:input id="newDrawerId" path="newDrawerId" htmlEscape="false"  placeholder="请输入姓名"  class="form-control layui-input"/>
+
+								<%--<sys:treeselect id="newDrawer" name="newDrawerId" value="${workInvoice.newDrawerId}" labelName="newDrawerName" labelValue="${workInvoice.newDrawerName}"
+                                                cssStyle="background-color: #fff" title="用户" url="/sys/office/treeDataAll?type=3" cssClass="form-control judgment layui-input" allowClear="true" notAllowSelectParent="true"/>--%>
+						</div>
+					</div>
+
+					<div class="layui-item layui-col-sm6">
+						<label class="layui-form-label"><span class="require-item">*</span>身份证号:</label>
+						<div class="layui-input-block">
+							<form:input path="idCard" htmlEscape="false" onchange="validateIDCard(this.value);" class="form-control idCard layui-input required"/>
+						</div>
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6">
@@ -953,6 +1082,12 @@
 										   labelValue="${workInvoice.redInvoiceRelevancyNumber}" cssClass="form-control judgment layui-input" fieldLabels="单位" fieldKeys="number" searchLabel="红字发票" searchKey="number" ></sys:selectinvoice>
 					</div>
 				</div>
+				<div class="layui-item layui-col-sm6 redInvoice">
+					<label class="layui-form-label">关联发票号:</label>
+					<div class="layui-input-block">
+						<input id="invoiceNumberStr" htmlEscape="false" readonly="true" class="form-control layui-input" value=""/>
+					</div>
+				</div>
 				<div class="layui-item layui-col-sm12 with-textarea">
 					<label class="layui-form-label">开票内容要求:</label>
 					<div class="layui-input-block">

+ 95 - 4
src/main/webapp/webpage/modules/workinvoice/workInvoiceModify.jsp

@@ -38,6 +38,20 @@
 					}
 				}
 
+				var newDrawer=$('input:radio[name="newDrawer"]:checked').val();
+				if(null == newDrawer || undefined == newDrawer || '' == newDrawer){
+					parent.layer.msg("请选择开票类型",{icon:0});
+					return false;
+				}
+				if (newDrawer != 2) {
+				} else {
+					var idCard = $("#idCard").val();
+					if(!submitValidateIDCard(idCard)){
+						layer.msg("身份证号不正确,请重新输入",{icon:2});
+						return false;
+					}
+				}
+
 				var invoiceType=$('input:radio[name="invoiceType"]:checked').val();
 				if(invoiceType == 1){
 					var bank = $("#bank").val();
@@ -368,7 +382,17 @@
 
 
 		function setInvoiceValue (obj){
-
+			$.ajax({
+				type:'post',
+				url:'${ctx}/workinvoiceTwo/workinvoiceTwo/getInvoiceNumberStr',
+				data:{
+					"invoiceId":obj
+				},
+				success:function(data){
+					var d = JSON.parse(data);
+					$("#invoiceNumberStr").val(d.data);
+				}
+			})
 		}
 
 		function moneyChange(obj){
@@ -909,6 +933,58 @@
 				obj.value = obj.value.replace(reg, regStrs[i][1]);
 			}
 		}
+		function validateIDCard(idCard) {
+			// 15位和18位身份证正则表达式
+			const idCardPattern = /^(^[1-9]\d{7}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}$)|(^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X|x)$)$/;
+
+			// 判断身份证号格式是否正确
+			if (!idCardPattern.test(idCard)) {
+				layer.msg("身份证号不正确,请重新输入",{icon:2});
+				return false;
+			}
+
+			// 如果是18位身份证,需要验证最后一位校验码
+			if (idCard.length === 18) {
+				if(!validateChecksum(idCard)){
+					layer.msg("身份证号不正确,请重新输入",{icon:2});
+					return false;
+				}
+			}
+		}
+		function submitValidateIDCard(idCard) {
+			// 15位和18位身份证正则表达式
+			const idCardPattern = /^(^[1-9]\d{7}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}$)|(^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X|x)$)$/;
+
+			// 判断身份证号格式是否正确
+			if (!idCardPattern.test(idCard)) {
+				return false;
+			}
+
+			// 如果是18位身份证,需要验证最后一位校验码
+			if (idCard.length === 18) {
+				if(!validateChecksum(idCard)){
+					return false;
+				}
+			}
+			return true
+		}
+
+		function validateChecksum(idCard) {
+			const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; // 加权因子
+			const checksumDigits = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; // 校验码
+
+			// 计算加权和
+			let sum = 0;
+			for (let i = 0; i < 17; i++) {
+				sum += parseInt(idCard[i]) * weights[i];
+			}
+
+			// 计算校验码
+			const checkDigit = checksumDigits[sum % 11];
+
+			// 比较身份证号的最后一位与计算的校验码
+			return checkDigit === idCard[17].toUpperCase();
+		}
 	</script>
 </head>
 <body>
@@ -1086,9 +1162,18 @@
 				<div class="layui-form-item count2">
 					<div class="layui-item layui-col-sm6">
 						<label class="layui-form-label"><span class="require-item">*</span>姓名:</label>
-						<div class="layui-input-block  with-icon">
-							<sys:treeselect id="newDrawer" name="newDrawerId" value="${workInvoice.newDrawerId}" labelName="newDrawerName" labelValue="${workInvoice.newDrawerName}"
-											cssStyle="background-color: #fff" title="用户" url="/sys/office/treeDataAll?type=3" cssClass="form-control judgment layui-input" allowClear="true" notAllowSelectParent="true"/>
+						<div class="layui-input-block">
+							<form:input id="newDrawerId" path="newDrawerId" htmlEscape="false"  placeholder="请输入姓名"  class="form-control layui-input"/>
+
+								<%--<sys:treeselect id="newDrawer" name="newDrawerId" value="${workInvoice.newDrawerId}" labelName="newDrawerName" labelValue="${workInvoice.newDrawerName}"
+                                                cssStyle="background-color: #fff" title="用户" url="/sys/office/treeDataAll?type=3" cssClass="form-control judgment layui-input" allowClear="true" notAllowSelectParent="true"/>--%>
+						</div>
+					</div>
+
+					<div class="layui-item layui-col-sm6">
+						<label class="layui-form-label"><span class="require-item">*</span>身份证号:</label>
+						<div class="layui-input-block">
+							<form:input path="idCard" htmlEscape="false" onchange="validateIDCard(this.value);" class="form-control idCard layui-input required"/>
 						</div>
 					</div>
 				</div>
@@ -1130,6 +1215,12 @@
 										   labelValue="${workInvoice.redInvoiceRelevancyNumber}" cssClass="form-control judgment layui-input" fieldLabels="单位" fieldKeys="number" searchLabel="红字发票" searchKey="number" ></sys:selectinvoice>
 					</div>
 				</div>
+				<div class="layui-item layui-col-sm6 redInvoice">
+					<label class="layui-form-label">关联发票号:</label>
+					<div class="layui-input-block">
+						<input id="invoiceNumberStr" htmlEscape="false" readonly="true" class="form-control layui-input" value=""/>
+					</div>
+				</div>
 
 				<div class="layui-item layui-col-sm12 with-textarea">
 					<label class="layui-form-label">开票内容要求:</label>

+ 14 - 1
src/main/webapp/webpage/modules/workinvoice/workInvoiceNotProjectAudit.jsp

@@ -596,7 +596,14 @@
 				<div class="layui-item layui-col-sm6 count2">
 					<label class="layui-form-label">姓名:</label>
 					<div class="layui-input-block">
-						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.newDrawerName}"/>
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.newDrawerId}"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm6 count2">
+					<label class="layui-form-label">身份证号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.idCard}"/>
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6">
@@ -632,6 +639,12 @@
 						<input id="redInvoiceRelevancyNumber" name="redInvoiceRelevancyNumber" htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.redInvoiceRelevancyNumber}"/>
 					</div>
 				</div>
+				<div class="layui-item layui-col-sm6 redInvoice">
+					<label class="layui-form-label">关联发票号:</label>
+					<div class="layui-input-block">
+						<input id="invoiceNumberStr" htmlEscape="false" readonly="true" class="form-control layui-input" value=""/>
+					</div>
+				</div>
 				<div class="layui-item layui-col-sm12">
 					<label class="layui-form-label">开票内容要求:</label>
 					<div class="layui-input-block">

+ 14 - 1
src/main/webapp/webpage/modules/workinvoice/workInvoiceNotProjectAuditEnd.jsp

@@ -640,7 +640,14 @@
 			<div class="layui-item layui-col-sm6 count2">
 				<label class="layui-form-label">姓名:</label>
 				<div class="layui-input-block">
-					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.newDrawerName}"/>
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.newDrawerId}"/>
+				</div>
+			</div>
+
+			<div class="layui-item layui-col-sm6 count2">
+				<label class="layui-form-label">身份证号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.idCard}"/>
 				</div>
 			</div>
 			<div class="layui-item layui-col-sm6">
@@ -676,6 +683,12 @@
 					<input id="redInvoiceRelevancyNumber" name="redInvoiceRelevancyNumber" htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.redInvoiceRelevancyNumber}"/>
 				</div>
 			</div>
+			<div class="layui-item layui-col-sm6 redInvoice">
+				<label class="layui-form-label">关联发票号:</label>
+				<div class="layui-input-block">
+					<input id="invoiceNumberStr" htmlEscape="false" readonly="true" class="form-control layui-input" value=""/>
+				</div>
+			</div>
 			<div class="layui-item layui-col-sm12">
 				<label class="layui-form-label">开票内容要求:</label>
 				<div class="layui-input-block">

+ 95 - 4
src/main/webapp/webpage/modules/workinvoice/workInvoiceNotProjectModify.jsp

@@ -38,6 +38,20 @@
 					}
 				}
 
+				var newDrawer=$('input:radio[name="newDrawer"]:checked').val();
+				if(null == newDrawer || undefined == newDrawer || '' == newDrawer){
+					parent.layer.msg("请选择开票类型",{icon:0});
+					return false;
+				}
+				if (newDrawer != 2) {
+				} else {
+					var idCard = $("#idCard").val();
+					if(!submitValidateIDCard(idCard)){
+						layer.msg("身份证号不正确,请重新输入",{icon:2});
+						return false;
+					}
+				}
+
 
 				var money = $("#money").val();
 				var redInvoice=$('input:radio[name="redInvoiceFlag"]:checked').val();
@@ -353,7 +367,17 @@
 
 
 		function setInvoiceValue (obj){
-
+			$.ajax({
+				type:'post',
+				url:'${ctx}/workinvoiceTwo/workinvoiceTwo/getInvoiceNumberStr',
+				data:{
+					"invoiceId":obj
+				},
+				success:function(data){
+					var d = JSON.parse(data);
+					$("#invoiceNumberStr").val(d.data);
+				}
+			})
 		}
 
 		function moneyChange(obj){
@@ -894,6 +918,58 @@
 				obj.value = obj.value.replace(reg, regStrs[i][1]);
 			}
 		}
+		function validateIDCard(idCard) {
+			// 15位和18位身份证正则表达式
+			const idCardPattern = /^(^[1-9]\d{7}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}$)|(^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X|x)$)$/;
+
+			// 判断身份证号格式是否正确
+			if (!idCardPattern.test(idCard)) {
+				layer.msg("身份证号不正确,请重新输入",{icon:2});
+				return false;
+			}
+
+			// 如果是18位身份证,需要验证最后一位校验码
+			if (idCard.length === 18) {
+				if(!validateChecksum(idCard)){
+					layer.msg("身份证号不正确,请重新输入",{icon:2});
+					return false;
+				}
+			}
+		}
+		function submitValidateIDCard(idCard) {
+			// 15位和18位身份证正则表达式
+			const idCardPattern = /^(^[1-9]\d{7}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}$)|(^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X|x)$)$/;
+
+			// 判断身份证号格式是否正确
+			if (!idCardPattern.test(idCard)) {
+				return false;
+			}
+
+			// 如果是18位身份证,需要验证最后一位校验码
+			if (idCard.length === 18) {
+				if(!validateChecksum(idCard)){
+					return false;
+				}
+			}
+			return true
+		}
+
+		function validateChecksum(idCard) {
+			const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; // 加权因子
+			const checksumDigits = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; // 校验码
+
+			// 计算加权和
+			let sum = 0;
+			for (let i = 0; i < 17; i++) {
+				sum += parseInt(idCard[i]) * weights[i];
+			}
+
+			// 计算校验码
+			const checkDigit = checksumDigits[sum % 11];
+
+			// 比较身份证号的最后一位与计算的校验码
+			return checkDigit === idCard[17].toUpperCase();
+		}
 	</script>
 </head>
 <body>
@@ -1075,9 +1151,18 @@
 				<div class="layui-form-item count2">
 					<div class="layui-item layui-col-sm6">
 						<label class="layui-form-label"><span class="require-item">*</span>姓名:</label>
-						<div class="layui-input-block  with-icon">
-							<sys:treeselect id="newDrawer" name="newDrawerId" value="${workInvoice.newDrawerId}" labelName="newDrawerName" labelValue="${workInvoice.newDrawerName}"
-											cssStyle="background-color: #fff" title="用户" url="/sys/office/treeDataAll?type=3" cssClass="form-control judgment layui-input" allowClear="true" notAllowSelectParent="true"/>
+						<div class="layui-input-block">
+							<form:input id="newDrawerId" path="newDrawerId" htmlEscape="false"  placeholder="请输入姓名"  class="form-control layui-input"/>
+
+								<%--<sys:treeselect id="newDrawer" name="newDrawerId" value="${workInvoice.newDrawerId}" labelName="newDrawerName" labelValue="${workInvoice.newDrawerName}"
+                                                cssStyle="background-color: #fff" title="用户" url="/sys/office/treeDataAll?type=3" cssClass="form-control judgment layui-input" allowClear="true" notAllowSelectParent="true"/>--%>
+						</div>
+					</div>
+
+					<div class="layui-item layui-col-sm6">
+						<label class="layui-form-label"><span class="require-item">*</span>身份证号:</label>
+						<div class="layui-input-block">
+							<form:input path="idCard" htmlEscape="false" onchange="validateIDCard(this.value);" class="form-control idCard layui-input required"/>
 						</div>
 					</div>
 				</div>
@@ -1118,6 +1203,12 @@
 										   labelValue="${workInvoice.redInvoiceRelevancyNumber}" cssClass="form-control judgment layui-input" fieldLabels="单位" fieldKeys="number" searchLabel="红字发票" searchKey="number" ></sys:selectinvoice>
 					</div>
 				</div>
+				<div class="layui-item layui-col-sm6 redInvoice">
+					<label class="layui-form-label">关联发票号:</label>
+					<div class="layui-input-block">
+						<input id="invoiceNumberStr" htmlEscape="false" readonly="true" class="form-control layui-input" value=""/>
+					</div>
+				</div>
 				<div class="layui-item layui-col-sm12 with-textarea">
 					<label class="layui-form-label">开票内容要求:</label>
 					<div class="layui-input-block">

+ 96 - 4
src/main/webapp/webpage/modules/workinvoice/workInvoiceTwoForm.jsp

@@ -79,6 +79,20 @@
 						return false;
 					}
 
+					var newDrawer=$('input:radio[name="newDrawer"]:checked').val();
+					if(null == newDrawer || undefined == newDrawer || '' == newDrawer){
+						parent.layer.msg("请选择开票类型",{icon:0});
+						return false;
+					}
+					if (newDrawer != 2) {
+					} else {
+						var idCard = $("#idCard").val();
+						if(!submitValidateIDCard(idCard)){
+							layer.msg("身份证号不正确,请重新输入",{icon:2});
+							return false;
+						}
+					}
+
 					var money = $("#money").val();
 					var redInvoice=$('input:radio[name="redInvoiceFlag"]:checked').val();
 					if(money < 0 && redInvoice == 0){
@@ -448,7 +462,17 @@
         }
 
 		function setInvoiceValue (obj){
-
+			$.ajax({
+				type:'post',
+				url:'${ctx}/workinvoiceTwo/workinvoiceTwo/getInvoiceNumberStr',
+				data:{
+					"invoiceId":obj
+				},
+				success:function(data){
+					var d = JSON.parse(data);
+					$("#invoiceNumberStr").val(d.data);
+				}
+			})
 		}
 
 		function moneyChange(obj){
@@ -1033,6 +1057,59 @@
 				obj.value = obj.value.replace(reg, regStrs[i][1]);
 			}
 		}
+		function validateIDCard(idCard) {
+			// 15位和18位身份证正则表达式
+			const idCardPattern = /^(^[1-9]\d{7}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}$)|(^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X|x)$)$/;
+
+			// 判断身份证号格式是否正确
+			if (!idCardPattern.test(idCard)) {
+				layer.msg("身份证号不正确,请重新输入",{icon:2});
+				return false;
+			}
+
+			// 如果是18位身份证,需要验证最后一位校验码
+			if (idCard.length === 18) {
+				if(!validateChecksum(idCard)){
+					layer.msg("身份证号不正确,请重新输入",{icon:2});
+					return false;
+				}
+			}
+		}
+		function submitValidateIDCard(idCard) {
+			// 15位和18位身份证正则表达式
+			const idCardPattern = /^(^[1-9]\d{7}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}$)|(^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X|x)$)$/;
+
+			// 判断身份证号格式是否正确
+			if (!idCardPattern.test(idCard)) {
+				return false;
+			}
+
+			// 如果是18位身份证,需要验证最后一位校验码
+			if (idCard.length === 18) {
+				if(!validateChecksum(idCard)){
+					return false;
+				}
+			}
+			return true
+		}
+
+		function validateChecksum(idCard) {
+			const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; // 加权因子
+			const checksumDigits = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; // 校验码
+
+			// 计算加权和
+			let sum = 0;
+			for (let i = 0; i < 17; i++) {
+				sum += parseInt(idCard[i]) * weights[i];
+			}
+
+			// 计算校验码
+			const checkDigit = checksumDigits[sum % 11];
+
+			// 比较身份证号的最后一位与计算的校验码
+			return checkDigit === idCard[17].toUpperCase();
+		}
+
 	</script>
 </head>
 <body>
@@ -1209,9 +1286,18 @@
 				<div class="layui-form-item count2">
 					<div class="layui-item layui-col-sm6">
 						<label class="layui-form-label"><span class="require-item">*</span>姓名:</label>
-						<div class="layui-input-block  with-icon">
-							<sys:treeselect id="newDrawer" name="newDrawerId" value="${workInvoice.newDrawerId}" labelName="newDrawerName" labelValue="${workInvoice.newDrawerName}"
-											cssStyle="background-color: #fff" title="用户" url="/sys/office/treeDataAll?type=3" cssClass="form-control judgment layui-input" allowClear="true" notAllowSelectParent="true"/>
+						<div class="layui-input-block">
+							<form:input id="newDrawerId" path="newDrawerId" htmlEscape="false"  placeholder="请输入姓名"  class="form-control layui-input"/>
+
+							<%--<sys:treeselect id="newDrawer" name="newDrawerId" value="${workInvoice.newDrawerId}" labelName="newDrawerName" labelValue="${workInvoice.newDrawerName}"
+											cssStyle="background-color: #fff" title="用户" url="/sys/office/treeDataAll?type=3" cssClass="form-control judgment layui-input" allowClear="true" notAllowSelectParent="true"/>--%>
+						</div>
+					</div>
+
+					<div class="layui-item layui-col-sm6">
+						<label class="layui-form-label"><span class="require-item">*</span>身份证号:</label>
+						<div class="layui-input-block">
+							<form:input path="idCard" htmlEscape="false" onchange="validateIDCard(this.value);" class="form-control idCard layui-input required"/>
 						</div>
 					</div>
 				</div>
@@ -1256,6 +1342,12 @@
 										labelValue="${workInvoice.redInvoiceRelevancyNumber}" cssClass="form-control judgment layui-input" fieldLabels="单位" fieldKeys="number" searchLabel="红字发票" searchKey="number" ></sys:selectinvoice>
 					</div>
 				</div>
+				<div class="layui-item layui-col-sm6 redInvoice">
+					<label class="layui-form-label">关联发票号:</label>
+					<div class="layui-input-block">
+						<input id="invoiceNumberStr" htmlEscape="false" readonly="true" class="form-control layui-input" value=""/>
+					</div>
+				</div>
 
 				<div class="layui-item layui-col-sm12 with-textarea">
 					<label class="layui-form-label double-line"><span class="require-item contractType">*</span>开票内容要求:</label>

+ 17 - 2
src/main/webapp/webpage/modules/workinvoice/workInvoiceTwoModify.jsp

@@ -365,7 +365,17 @@
 
 
 		function setInvoiceValue (obj){
-
+			$.ajax({
+				type:'post',
+				url:'${ctx}/workinvoiceTwo/workinvoiceTwo/getInvoiceNumberStr',
+				data:{
+					"invoiceId":obj
+				},
+				success:function(data){
+					var d = JSON.parse(data);
+					$("#invoiceNumberStr").val(d.data);
+				}
+			})
 		}
 
 		function moneyChange(obj){
@@ -1130,7 +1140,12 @@
 										   labelValue="${workInvoice.redInvoiceRelevancyNumber}" cssClass="form-control judgment layui-input" fieldLabels="单位" fieldKeys="number" searchLabel="红字发票" searchKey="number" ></sys:selectinvoice>
 					</div>
 				</div>
-
+				<div class="layui-item layui-col-sm6 redInvoice">
+					<label class="layui-form-label">关联发票号:</label>
+					<div class="layui-input-block">
+						<input id="invoiceNumberStr" htmlEscape="false" readonly="true" class="form-control layui-input" value=""/>
+					</div>
+				</div>
 				<div class="layui-item layui-col-sm12 with-textarea">
 					<label class="layui-form-label">开票内容要求:</label>
 					<div class="layui-input-block">

+ 14 - 1
src/main/webapp/webpage/modules/workinvoice/workInvoiceView.jsp

@@ -191,7 +191,14 @@
 				<div class="layui-item layui-col-sm6 count2">
 					<label class="layui-form-label">姓名:</label>
 					<div class="layui-input-block">
-						<input htmlEscape="false" readonly="true"   style="background-color: #f1f1f1" class="form-control layui-input" value="${workInvoice.newDrawerName}"/>
+						<input htmlEscape="false" readonly="true"   style="background-color: #f1f1f1" class="form-control layui-input" value="${workInvoice.newDrawerId}"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm6 count2">
+					<label class="layui-form-label">身份证号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   style="background-color: #f1f1f1" class="form-control layui-input" value="${workInvoice.idCard}"/>
 					</div>
 				</div>
 
@@ -228,6 +235,12 @@
 						<input id="redInvoiceRelevancyNumber"  style="background-color: #f1f1f1" name="redInvoiceRelevancyNumber" htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.redInvoiceRelevancyNumber}"/>
 					</div>
 				</div>
+				<div class="layui-item layui-col-sm6 redInvoice">
+					<label class="layui-form-label">关联发票号:</label>
+					<div class="layui-input-block">
+						<input id="invoiceNumberStr" htmlEscape="false" readonly="true" class="form-control layui-input" value=""/>
+					</div>
+				</div>
 				<div class="layui-item layui-col-sm12">
 					<label class="layui-form-label">开票内容要求:</label>
 					<div class="layui-input-block">