|  | @@ -10,10 +10,13 @@ import com.jeeplus.modules.projectrecord.dao.WorkProjectUserDao;
 | 
	
		
			
				|  |  |  import com.jeeplus.modules.projectrecord.entity.ProjectImplementEarly;
 | 
	
		
			
				|  |  |  import com.jeeplus.modules.projectrecord.entity.ProjectPaymentTreeData;
 | 
	
		
			
				|  |  |  import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.projectrecord.service.ProjectImplementEarlyService;
 | 
	
		
			
				|  |  |  import com.jeeplus.modules.projectrecord.service.ProjectRecordsService;
 | 
	
		
			
				|  |  |  import com.jeeplus.modules.projectrecord.service.implementStage.ProjectInterimPaymentService;
 | 
	
		
			
				|  |  |  import com.jeeplus.modules.sys.entity.User;
 | 
	
		
			
				|  |  |  import com.jeeplus.modules.sys.utils.UserUtils;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.workclientinfo.dao.WorkClientAttachmentDao;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.workclientinfo.entity.WorkClientAttachment;
 | 
	
		
			
				|  |  |  import org.apache.shiro.authz.annotation.RequiresPermissions;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Controller;
 | 
	
	
		
			
				|  | @@ -40,9 +43,9 @@ public class ProjectInterimPaymentController {
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private ProjectInterimPaymentService service;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  | -    private ProjectRecordsService projectRecordsService;
 | 
	
		
			
				|  |  | +    private ProjectImplementEarlyService projectImplementEarlyService;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  | -    private WorkProjectUserDao workProjectUserDao;
 | 
	
		
			
				|  |  | +    private WorkClientAttachmentDao workClientAttachmentDao;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 合同列表页面
 | 
	
	
		
			
				|  | @@ -74,102 +77,128 @@ public class ProjectInterimPaymentController {
 | 
	
		
			
				|  |  |          if(UserUtils.isManager()){
 | 
	
		
			
				|  |  |              model.addAttribute("flag","1");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        Page<ConstructionContract> page = contractService.findPage(new Page<ConstructionContract>(request, response), constructionContract);
 | 
	
		
			
				|  |  | -        //无合同状态下,获取委托方的名称
 | 
	
		
			
				|  |  | -        List<ConstructionContract> list = page.getList();
 | 
	
		
			
				|  |  | -        List<ProjectPaymentTreeData> projectRecordTreeDataList = new ArrayList<>();
 | 
	
		
			
				|  |  |          Map<String,List> map = new HashMap<>();
 | 
	
		
			
				|  |  | -        for (int i = 0; i < list.size(); i++) {
 | 
	
		
			
				|  |  | -            ProjectPaymentTreeData projectPaymentTreeData = new ProjectPaymentTreeData();
 | 
	
		
			
				|  |  | -            ConstructionContract contract = list.get(i);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            ProjectRecords records1 = projectRecordsService.get(list.get(i).getProjectId());
 | 
	
		
			
				|  |  | -            List<User> users = workProjectUserDao.queryProjectUsers(records1.getId(), "1");
 | 
	
		
			
				|  |  | -            records1.setProjectLeaders(users);
 | 
	
		
			
				|  |  | -            records1.setLeaderNameStr(Collections3.extractToString(users, "name", ","));
 | 
	
		
			
				|  |  | -            records1.setLeaderIds(Collections3.extractToString(users, "id", ","));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            //遍历项目负责人信息
 | 
	
		
			
				|  |  | -            List<User> masterUserList = records1.getProjectLeaders();
 | 
	
		
			
				|  |  | -            List<String> masterList = new ArrayList<>();
 | 
	
		
			
				|  |  | -            Set masterIdSet = new HashSet();
 | 
	
		
			
				|  |  | -            for (User masterUser:masterUserList) {
 | 
	
		
			
				|  |  | -                masterList.add(masterUser.getName());
 | 
	
		
			
				|  |  | -                masterIdSet.add(masterUser.getId());
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +        ProjectImplementEarly projectRecords = new ProjectImplementEarly();
 | 
	
		
			
				|  |  | +        Page<ProjectImplementEarly> recordPage = projectImplementEarlyService.findProjectPage(new Page<ProjectImplementEarly>(request, response), projectRecords);
 | 
	
		
			
				|  |  | +        //获取项目信息
 | 
	
		
			
				|  |  | +        List<ProjectImplementEarly> recordList = recordPage.getList();
 | 
	
		
			
				|  |  | +        //新建树形列表集合
 | 
	
		
			
				|  |  | +        List<ProjectPaymentTreeData> projectRecordTreeDataList = new ArrayList<>();
 | 
	
		
			
				|  |  | +        if(recordList.size()>0){
 | 
	
		
			
				|  |  | +            for (ProjectImplementEarly record:recordList) {
 | 
	
		
			
				|  |  | +                //将项目信息放入树形列表集合中
 | 
	
		
			
				|  |  | +                ProjectPaymentTreeData recordTreeData = new ProjectPaymentTreeData();
 | 
	
		
			
				|  |  | +                //将界面需要展示数据放入类中
 | 
	
		
			
				|  |  | +                recordTreeData.setId(record.getId());
 | 
	
		
			
				|  |  | +                recordTreeData.setCnumber(record.getProjectId());
 | 
	
		
			
				|  |  | +                recordTreeData.setProjectName(record.getProjectName());
 | 
	
		
			
				|  |  | +                recordTreeData.setProjectId(record.getProjectId());
 | 
	
		
			
				|  |  | +                recordTreeData.setCreateDate(record.getCreateDate());
 | 
	
		
			
				|  |  | +                recordTreeData.setCreateId(record.getCreateBy().getId());
 | 
	
		
			
				|  |  | +                recordTreeData.setContractName(record.getContractName());
 | 
	
		
			
				|  |  | +                //父节点的pid设置为0
 | 
	
		
			
				|  |  | +                recordTreeData.setPid("0");
 | 
	
		
			
				|  |  | +                //将项目设置为第一级数据
 | 
	
		
			
				|  |  | +                recordTreeData.setCondition(1);
 | 
	
		
			
				|  |  | +                //将项目信息放入
 | 
	
		
			
				|  |  | +                projectRecordTreeDataList.add(recordTreeData);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                //处理合同信息数据
 | 
	
		
			
				|  |  | +                ConstructionContract conditionContract = new ConstructionContract();
 | 
	
		
			
				|  |  | +                conditionContract.setProjectId(record.getId());
 | 
	
		
			
				|  |  | +                //获取合同信息
 | 
	
		
			
				|  |  | +                List<ConstructionContract> contractList = contractService.getConstructionContractList(conditionContract);
 | 
	
		
			
				|  |  | +                if(contractList.size()>0){
 | 
	
		
			
				|  |  | +                    //遍历项目中的合同信息
 | 
	
		
			
				|  |  | +                    for (ConstructionContract contract:contractList) {
 | 
	
		
			
				|  |  | +                        //将合同信息放入树形列表集合中
 | 
	
		
			
				|  |  | +                        ProjectPaymentTreeData contractTreeData = new ProjectPaymentTreeData();
 | 
	
		
			
				|  |  | +                        contractTreeData.setId(contract.getId());
 | 
	
		
			
				|  |  | +                        contractTreeData.setCnumber(contract.getCnumber());
 | 
	
		
			
				|  |  | +                        contractTreeData.setProjectName(contract.getProjectName());
 | 
	
		
			
				|  |  | +                        contractTreeData.setProjectId(contract.getProjectId());
 | 
	
		
			
				|  |  | +                        contractTreeData.setCreateDate(contract.getCreateDate());
 | 
	
		
			
				|  |  | +                        contractTreeData.setCreateId(contract.getCreateBy().getId());
 | 
	
		
			
				|  |  | +                        contractTreeData.setContractName(contract.getContractName());
 | 
	
		
			
				|  |  | +                        //父节点的pid设置为0
 | 
	
		
			
				|  |  | +                        contractTreeData.setPid(record.getId());
 | 
	
		
			
				|  |  | +                        //将项目设置为第二级数据
 | 
	
		
			
				|  |  | +                        contractTreeData.setCondition(2);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        //遍历项目负责人信息
 | 
	
		
			
				|  |  | +                        List<User> masterUserList = record.getProjectLeaders();
 | 
	
		
			
				|  |  | +                        List<String> masterList = new ArrayList<>();
 | 
	
		
			
				|  |  | +                        Set masterIdSet = new HashSet();
 | 
	
		
			
				|  |  | +                        for (User masterUser:masterUserList) {
 | 
	
		
			
				|  |  | +                            masterList.add(masterUser.getName());
 | 
	
		
			
				|  |  | +                            masterIdSet.add(masterUser.getId());
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                        //Set转List
 | 
	
		
			
				|  |  | +                        List<String> masterIdList = new ArrayList<>(masterIdSet);
 | 
	
		
			
				|  |  | +                        for (String masterId : masterIdList) {
 | 
	
		
			
				|  |  | +                            if(masterId.equals(UserUtils.getUser().getId())){
 | 
	
		
			
				|  |  | +                                contractTreeData.setOperationSign(1);
 | 
	
		
			
				|  |  | +                                break;
 | 
	
		
			
				|  |  | +                            }else{
 | 
	
		
			
				|  |  | +                                contractTreeData.setOperationSign(0);
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        //将项目信息放入
 | 
	
		
			
				|  |  | +                        projectRecordTreeDataList.add(contractTreeData);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            //将界面需要展示数据放入类中
 | 
	
		
			
				|  |  | -            projectPaymentTreeData.setId(contract.getId());
 | 
	
		
			
				|  |  | -            projectPaymentTreeData.setCnumber(contract.getCnumber());
 | 
	
		
			
				|  |  | -            projectPaymentTreeData.setProjectName(contract.getProjectName());
 | 
	
		
			
				|  |  | -            projectPaymentTreeData.setProjectId(contract.getProjectId());
 | 
	
		
			
				|  |  | -            projectPaymentTreeData.setCreateDate(contract.getCreateDate());
 | 
	
		
			
				|  |  | -            projectPaymentTreeData.setCreateId(contract.getCreateBy().getId());
 | 
	
		
			
				|  |  | -            projectPaymentTreeData.setContractName(contract.getContractName());
 | 
	
		
			
				|  |  | -            //父节点的pid设置为0
 | 
	
		
			
				|  |  | -            projectPaymentTreeData.setPid("0");
 | 
	
		
			
				|  |  | -            //Set转List
 | 
	
		
			
				|  |  | -            List<String> masterIdList = new ArrayList<>(masterIdSet);
 | 
	
		
			
				|  |  | -            //如果当前登录人为合同创建人则允许其添加子节点信息
 | 
	
		
			
				|  |  | -            for (String masterId : masterIdList) {
 | 
	
		
			
				|  |  | -                if(masterId.equals(UserUtils.getUser().getId())){
 | 
	
		
			
				|  |  | -                    projectPaymentTreeData.setOperationSign(1);
 | 
	
		
			
				|  |  | -                    break;
 | 
	
		
			
				|  |  | -                }else{
 | 
	
		
			
				|  |  | -                    projectPaymentTreeData.setOperationSign(0);
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            //项目负责人list数据转String
 | 
	
		
			
				|  |  | -            String projectLeader = masterList.toString().replaceAll("(?:\\[|null|\\]| +)", "");
 | 
	
		
			
				|  |  | -            projectPaymentTreeData.setProjectLeader(projectLeader);
 | 
	
		
			
				|  |  | -            projectPaymentTreeData.setLoginId(UserUtils.getUser().getId());
 | 
	
		
			
				|  |  | -            projectRecordTreeDataList.add(projectPaymentTreeData);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            //根据项目id查询相关的项目阶段内容
 | 
	
		
			
				|  |  | -            List<ProjectPaymentTreeData> treeDataList = service.findPage(contract.getId());
 | 
	
		
			
				|  |  | -            if(0 != treeDataList.size()){
 | 
	
		
			
				|  |  | -                //截至上期末
 | 
	
		
			
				|  |  | -                Double totalFinishCost = 0D;  //累计完成价款
 | 
	
		
			
				|  |  | -                Double totalPayCost = 0D;     //累计支付价款
 | 
	
		
			
				|  |  | -                Double payRatio = 0D;         //支付比例
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                for (ProjectPaymentTreeData data:treeDataList) {
 | 
	
		
			
				|  |  | -                    data.setCnumber(contract.getTrueAmt().toString());
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    data.setTotalFinishCost(totalFinishCost);
 | 
	
		
			
				|  |  | -                    data.setTotalPayCost(totalPayCost);
 | 
	
		
			
				|  |  | -                    data.setPayRatio(payRatio);
 | 
	
		
			
				|  |  | -                    //截止上期末的已累计完成价款 = 之前所有的加上本期的完成价款
 | 
	
		
			
				|  |  | -                    totalFinishCost += data.getCompletePrice();
 | 
	
		
			
				|  |  | -                    //截止上期末的累计支付价款 = 之前所有的加上本期的支付价款
 | 
	
		
			
				|  |  | -                    totalPayCost += data.getActualPay();
 | 
	
		
			
				|  |  | -                    //判定截止上期末的已累计完成价款是否为0 如果不为0 则进行计算支付比例
 | 
	
		
			
				|  |  | -                    if(contract.getTrueAmt() !=0){
 | 
	
		
			
				|  |  | -                        payRatio = formatDouble(totalFinishCost/contract.getTrueAmt()*100);
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                    //截至本期末数据信息
 | 
	
		
			
				|  |  | -                    data.setNowTotalFinishCost(totalFinishCost);
 | 
	
		
			
				|  |  | -                    data.setNowTotalPayCost(totalPayCost);
 | 
	
		
			
				|  |  | -                    data.setNowPayRatio(payRatio);
 | 
	
		
			
				|  |  | +                        //处理合同中的工程进度款信息数据
 | 
	
		
			
				|  |  | +                        List<ProjectPaymentTreeData> treeDataList = service.findPage(contract.getId());
 | 
	
		
			
				|  |  | +                        if(0 != treeDataList.size()){
 | 
	
		
			
				|  |  | +                            //截至上期末
 | 
	
		
			
				|  |  | +                            Double totalFinishCost = 0D;  //累计完成价款
 | 
	
		
			
				|  |  | +                            Double totalPayCost = 0D;     //累计支付价款
 | 
	
		
			
				|  |  | +                            Double payRatio = 0D;         //支付比例
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                    data.setPid(contract.getId());
 | 
	
		
			
				|  |  | +                            for (ProjectPaymentTreeData data:treeDataList) {
 | 
	
		
			
				|  |  | +                                data.setCnumber(contract.getTrueAmt().toString());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                    //如果当前登录人为项目登记者或项目负责人则允许其添加子节点信息
 | 
	
		
			
				|  |  | -                    for (String masterId : masterIdList) {
 | 
	
		
			
				|  |  | -                        if(masterId.equals(UserUtils.getUser().getId())){
 | 
	
		
			
				|  |  | -                            data.setOperationSign(1);
 | 
	
		
			
				|  |  | -                            break;
 | 
	
		
			
				|  |  | -                        }else{
 | 
	
		
			
				|  |  | -                            data.setOperationSign(0);
 | 
	
		
			
				|  |  | +                                data.setTotalFinishCost(totalFinishCost);
 | 
	
		
			
				|  |  | +                                data.setTotalPayCost(totalPayCost);
 | 
	
		
			
				|  |  | +                                data.setPayRatio(payRatio);
 | 
	
		
			
				|  |  | +                                //截止上期末的已累计完成价款 = 之前所有的加上本期的完成价款
 | 
	
		
			
				|  |  | +                                totalFinishCost += data.getCompletePrice();
 | 
	
		
			
				|  |  | +                                //截止上期末的累计支付价款 = 之前所有的加上本期的支付价款
 | 
	
		
			
				|  |  | +                                totalPayCost += data.getActualPay();
 | 
	
		
			
				|  |  | +                                //判定截止上期末的已累计完成价款是否为0 如果不为0 则进行计算支付比例
 | 
	
		
			
				|  |  | +                                if(contract.getTrueAmt() !=0){
 | 
	
		
			
				|  |  | +                                    payRatio = formatDouble(totalFinishCost/contract.getTrueAmt()*100);
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                //截至本期末数据信息
 | 
	
		
			
				|  |  | +                                data.setNowTotalFinishCost(totalFinishCost);
 | 
	
		
			
				|  |  | +                                data.setNowTotalPayCost(totalPayCost);
 | 
	
		
			
				|  |  | +                                data.setNowPayRatio(payRatio);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                data.setPid(contract.getId());
 | 
	
		
			
				|  |  | +                                //将项目设置为第三级数据
 | 
	
		
			
				|  |  | +                                data.setCondition(3);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                //如果当前登录人为项目登记者或项目负责人则允许其添加子节点信息
 | 
	
		
			
				|  |  | +                                for (String masterId : masterIdList) {
 | 
	
		
			
				|  |  | +                                    if(masterId.equals(UserUtils.getUser().getId())){
 | 
	
		
			
				|  |  | +                                        data.setOperationSign(1);
 | 
	
		
			
				|  |  | +                                        break;
 | 
	
		
			
				|  |  | +                                    }else{
 | 
	
		
			
				|  |  | +                                        data.setOperationSign(0);
 | 
	
		
			
				|  |  | +                                    }
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                            //将所有工程进度款信息券放入树形列表中
 | 
	
		
			
				|  |  | +                            projectRecordTreeDataList.addAll(treeDataList);
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            projectRecordTreeDataList.addAll(treeDataList);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          map.put("data",projectRecordTreeDataList);
 | 
	
	
		
			
				|  | @@ -193,9 +222,16 @@ public class ProjectInterimPaymentController {
 | 
	
		
			
				|  |  |      public String form(ProjectPaymentTreeData projectPaymentTreeData,Model model) {
 | 
	
		
			
				|  |  |          if (projectPaymentTreeData!=null&&StringUtils.isNotBlank(projectPaymentTreeData.getId())) {
 | 
	
		
			
				|  |  |              projectPaymentTreeData = service.get(projectPaymentTreeData.getId());
 | 
	
		
			
				|  |  | +            projectPaymentTreeData.setMasterUser(UserUtils.get(projectPaymentTreeData.getCreateBy().getId()).getName());
 | 
	
		
			
				|  |  | +            WorkClientAttachment attchment = new WorkClientAttachment();
 | 
	
		
			
				|  |  | +            attchment.setAttachmentId(projectPaymentTreeData.getId());
 | 
	
		
			
				|  |  | +            List<WorkClientAttachment> attachments = workClientAttachmentDao.findList(attchment);
 | 
	
		
			
				|  |  | +            projectPaymentTreeData.setWorkAttachments(attachments);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          }else {
 | 
	
		
			
				|  |  |              projectPaymentTreeData.setCreateBy(UserUtils.getUser());
 | 
	
		
			
				|  |  |              projectPaymentTreeData.setCreateDate(new Date());
 | 
	
		
			
				|  |  | +            projectPaymentTreeData.setMasterUser(UserUtils.getUser().getName());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          model.addAttribute("projectPaymentTreeData", projectPaymentTreeData);
 | 
	
		
			
				|  |  |          return "modules/projectrecord/implementStage/projectInterimPaymentForm";
 |