package com.fuzamei.service; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.fuzamei.constant.OperationTypeId; import com.fuzamei.constant.Role; import com.fuzamei.constant.StatusId; import com.fuzamei.dao.BusinessDeclareDao; import com.fuzamei.entity.BusinessCheck; import com.fuzamei.entity.BusinessDeclare; import com.fuzamei.entity.UserDetail; import com.fuzamei.utils.PageDTO; @Service public class BusinessDeclareService { @Autowired private BusinessDeclareDao businessDeclareDao; private static final int ROW_NUM = 10; // 分页每页显示数据的数量 /** * * @Title: insertInformationIntoTableByBranchBank * @Description: TODO(对从controller层传进来的数据先进行校验,然后再通过dao层往数据库进行录入) * @param @param map 设定文件 * @return void 返回类型 * @author ylx * @date 2017年12月19日 下午1:43:33 * @throws */ @Transactional(rollbackFor=Exception.class) public void insertInformationIntoTableByBranchBank(Map map) { long currentTime = System.currentTimeMillis();//获取当前系统时间 UserDetail userDetail = (UserDetail) map.get("userDetail");//获取用户信息对象 //--------------------------------------------------------------------------------------------------------------- Map mapToDaoForBusinessDeclare = new LinkedHashMap(); //这个map是将数据插入业务申报表中的 mapToDaoForBusinessDeclare.put("businessId", map.get("businessId")); //业务申报id mapToDaoForBusinessDeclare.put("bank", map.get("bank")); //申报支行名称 mapToDaoForBusinessDeclare.put("businessName", map.get("businessName")); //业务名称 mapToDaoForBusinessDeclare.put("busineeApprovalId", map.get("busineeApprovalId")); //业务核准表id号 mapToDaoForBusinessDeclare.put("responsibleInvestigationId", map.get("responsibleInvestigationId"));//尽职调查报告id号 mapToDaoForBusinessDeclare.put("productApprovalId", map.get("productApprovalId")); //产品核准表id号 mapToDaoForBusinessDeclare.put("basicDataId", map.get("basicDataId")); //基础性资料id号 mapToDaoForBusinessDeclare.put("declareTime", currentTime); //申报时间以系统当前时间为准 mapToDaoForBusinessDeclare.put("statusId",StatusId.TO_BE_CHECKED_BY_SECONDARY_BRANCH_BANK); //刚刚申请的时候状态应该是【待二级分行审核】,这里以1表示,到时候可能还会进行修。。TODO mapToDaoForBusinessDeclare.put("hash", "to be calaulated"); //hash值先写死=====================================================>>待定TODO businessDeclareDao.insertBusinessDeclareInformationToDaoByBranchBank(mapToDaoForBusinessDeclare); //将业务申请的数据插入数据库 //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Map mapToDaoForAttachmentOfBusineeApproval = new LinkedHashMap(); //这个map是将数据插入【业务核准表】中 mapToDaoForAttachmentOfBusineeApproval.put("attachmentId", map.get("busineeApprovalId")); //业务核准表id号就是附件的id号 mapToDaoForAttachmentOfBusineeApproval.put("attachmentName", map.get("busineeApprovalName")); //业务核准表文件名就当是附件名 mapToDaoForAttachmentOfBusineeApproval.put("url", map.get("urlOfBusineeApproval")); //业务核准表的url地址就是附件url地址 mapToDaoForAttachmentOfBusineeApproval.put("userId", userDetail.getUser_id()); //上传人的id号写活♥ mapToDaoForAttachmentOfBusineeApproval.put("createTime", currentTime); //创建时间以插入业务申请表的时间为准 businessDeclareDao.insertAttachmentInformationToDaoByBranchBank(mapToDaoForAttachmentOfBusineeApproval); //将附件---【业务核准表】---申请的数据插入数据库 //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Map mapToDaoForAttachmentOfResponsibleInvestigation = new LinkedHashMap(); //这个map是将数据插入尽职调查表中的 mapToDaoForAttachmentOfResponsibleInvestigation.put("attachmentId", map.get("responsibleInvestigationId")); //尽职调查表id号就是附件的id号 mapToDaoForAttachmentOfResponsibleInvestigation.put("attachmentName", map.get("responsibleInvestigationName")); //尽职调查表文件名就当是附件名 mapToDaoForAttachmentOfResponsibleInvestigation.put("url", map.get("urlOfResponsibleInvestigation")); //尽职调查表的url地址就是附件url地址 mapToDaoForAttachmentOfResponsibleInvestigation.put("userId", userDetail.getUser_id()); //上传人的id号先写死,到时候还需要根据请求查询上传人的id号。。。。。。TODO mapToDaoForAttachmentOfResponsibleInvestigation.put("createTime", currentTime); //创建时间以插入尽职调查表的时间为准 businessDeclareDao.insertAttachmentInformationToDaoByBranchBank(mapToDaoForAttachmentOfResponsibleInvestigation); //将附件---【尽职调查表】---申请的数据插入数据库 //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Map mapToDaoForAttachmentOfProductApproval = new LinkedHashMap(); //这个map是将数据插入产品核准表中的 mapToDaoForAttachmentOfProductApproval.put("attachmentId", map.get("productApprovalId")); //产品核准表id号就是附件的id号 mapToDaoForAttachmentOfProductApproval.put("attachmentName", map.get("productApprovalName")); //产品核准表文件名就当是附件名 mapToDaoForAttachmentOfProductApproval.put("url", map.get("urlOfProductApproval")); //产品核准表的url地址就是附件url地址 mapToDaoForAttachmentOfProductApproval.put("userId", userDetail.getUser_id()); //上传人的id号先写死,到时候还需要根据请求查询上传人的id号。。。。。。TODO mapToDaoForAttachmentOfProductApproval.put("createTime", currentTime); //创建时间以插入产品核准表的时间为准 businessDeclareDao.insertAttachmentInformationToDaoByBranchBank(mapToDaoForAttachmentOfProductApproval); //将附件---【产品核准表】---申请的数据插入数据库 //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Map mapToDaoForAttachmentOfBasicData = new LinkedHashMap(); //这个map是将数据插入基础性资料中的 mapToDaoForAttachmentOfBasicData.put("attachmentId", map.get("basicDataId")); //基础性资料id号就是附件的id号 mapToDaoForAttachmentOfBasicData.put("attachmentName", map.get("basicDataName")); //基础性资料文件名就当是附件名 mapToDaoForAttachmentOfBasicData.put("url", map.get("urlOfBasicData")); //基础性资料的url地址就是附件url地址 mapToDaoForAttachmentOfBasicData.put("userId", userDetail.getUser_id()); //上传人的id号先写死,到时候还需要根据请求查询上传人的id号。。。。。。TODO mapToDaoForAttachmentOfBasicData.put("createTime", currentTime); //创建时间以插入基础性资料的时间为准 businessDeclareDao.insertAttachmentInformationToDaoByBranchBank(mapToDaoForAttachmentOfBasicData); //将附件---【基础性资料】---申请的数据插入数据库 //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Map mapToDaoForBusinessCheck = new LinkedHashMap(); //这个map是将数据插入【审核记录】中的二级分行刚刚上传也要在审核记录中插入一条数据 mapToDaoForBusinessCheck.put("organizationName", userDetail.getOrganization_name()); //经办支行提交写死审核部门为--经办支行-- mapToDaoForBusinessCheck.put("checkPerson", userDetail.getPerson_name()); //经办支行的某个人,先写死 mapToDaoForBusinessCheck.put("checkResult", StatusId.AGREE); //经办支行提交肯定通过 mapToDaoForBusinessCheck.put("checkOpinion", "--"); //审核意见空着 mapToDaoForBusinessCheck.put("businessId", map.get("businessId")); //业务id从前面获取 mapToDaoForBusinessCheck.put("checkTime", currentTime);//获取的是当前时间 mapToDaoForBusinessCheck.put("task", StatusId.LAUNCHING); //需要通过status表获取状态信息,10表示发起,经办支行刚开始一定是发起状态 //将封装到map的审核意见数据传入dao层中将结果导入【业务审核总表】中-------->insert操作 businessDeclareDao.businessDeclareCheckedBy(mapToDaoForBusinessCheck); //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //此外,还要将业务申报的这个操作信息插入到操作记录表中【】 Map mapToOperationHistory = new LinkedHashMap(); mapToOperationHistory.put("operatorTypeId", OperationTypeId.BUSINESS_APPLY); //刚刚创立业务申报,操作类型为业务申报1001 mapToOperationHistory.put("operatorAccount", userDetail.getAccount()); //操作账号写活♥ mapToOperationHistory.put("operatorRole", Role.TRAN_BRANCH_BANK); //创建这个操作的角色只能是经办支行 mapToOperationHistory.put("operatorPerson", userDetail.getPerson_name()); //操作人写活♥ mapToOperationHistory.put("operatorTime", currentTime); //操作时间为当前操作时间 mapToOperationHistory.put("hash", "to be calculated"); //如何计算操作的hash值===========================================>>。。。。。。TODO businessDeclareDao.insertOperationHistoryInformationToDaoByBranchBank(mapToOperationHistory);//将操作记录信息插入到操作记录表中 } /** * * @Title: queryBusinessDeclareInformation * @Description: TODO(从客户端传过来的数据,进行校验,再将数据传递给Dao层进行查询) * @param @param map * @param @return 设定文件 * @return PageDTO 返回类型 * @author ylx * @date 2017年12月19日 下午4:05:22 * @throws */ public PageDTO queryBusinessDeclareInformation(Map map) { PageDTO pageDTO = new PageDTO(); UserDetail userDetail = (UserDetail) map.get("userDetail"); List roleList = userDetail.getRole_name(); //经办支行和二级支行可以查看所有的信息 if(roleList.contains(Role.TRAN_BRANCH_BANK)||roleList.contains(Role.SEC_BRANCH_BANK)){ List informationList=businessDeclareDao.queryBusinessDeclareInformation(map); int count=businessDeclareDao.findAllInfromations(); pageDTO.setRows(informationList); pageDTO.setTotal(count); return pageDTO; } if(roleList.contains(Role.BUSINESS_DEP_OF_PBB)){ //省分行营业部能看到的信息只有二级分行审核通过以后的信息才会显示,未通过或者是发起状态的都不会显示 //而且分页的话查询所有信息的条数也是按照之前的条件进行查询的 List informationList=businessDeclareDao.queryBusinessDeclareInformationByPBB(map); int count=businessDeclareDao.findAllInfromationsByPBB(); pageDTO.setRows(informationList); pageDTO.setTotal(count); return pageDTO; } throw new RuntimeException("无权操作"); } /** * * @Title: queryBusinessCheckInformation * @Description: TODO(根据controller层传过来的业务id号去数据库的业务审核总表中进行数据查询) * @param @param map * @param @return 设定文件 * @return PageDTO 返回类型 * @author ylx * @date 2017年12月19日 下午7:51:16 * @throws */ public List queryBusinessCheckInformation(Map map) { UserDetail userDetail = (UserDetail) map.get("userDetail"); List roleList = userDetail.getRole_name(); Integer businessId = (Integer) map.get("businessId"); Integer statusId = businessDeclareDao.getStatusIdByBusinessId(businessId); //经办支行和二级支行可以查看所有的信息 if(roleList.contains(Role.TRAN_BRANCH_BANK)||roleList.contains(Role.SEC_BRANCH_BANK)){ return businessDeclareDao.queryBusinessCheckInformation(map); } if(roleList.contains(Role.TRAN_BRANCH_BANK)||roleList.contains(Role.SEC_BRANCH_BANK)){ //如果是待二级分行审核或者是二级分行审核不通过则返回一个空值 if(statusId==1||statusId==2){ return null; } return businessDeclareDao.queryBusinessCheckInformation(map); } throw new RuntimeException("无权操作"); } /** * * @Title: businessDeclareCheckedBy * @Description: TODO(将controller传过来的审核信息传入service层进行校验,然后将审核意见插入到数据库,同时将业务审核表中的审核结果的状态也顺便被更新一份) * 此外,还要在操作记录表中插入一条数据 * @param @param map 设定文件 * 数据包含organizationName:二级分行或省分行 * checkPerson:审核人员 * checkResult:结果放入check_result字段 * checkOpinion:审核意见 * businessId: * @return void 返回类型 * @author ylx * @date 2017年12月19日 下午8:58:55 * @throws */ @Transactional(rollbackFor=Exception.class) public void businessDeclareCheckedBy(Map map) { long currentTime = System.currentTimeMillis(); UserDetail userDetail = (UserDetail) map.get("userDetail"); List roleList = userDetail.getRole_name(); String organizationName=userDetail.getOrganization_name(); //审核部门 String checkPerson=userDetail.getPerson_name(); //审核人 Integer checkResult=(Integer) map.get("checkResult"); //审核结果(5表示同意,6表示不同意) String checkOpinion=(String) map.get("checkOpinion"); //审核意见 Integer businessId=(Integer) map.get("businessId"); //业务申报的id号,要根据这个更新业务审核的状态的 Integer statusId=businessDeclareDao.getStatusIdByBusinessId(businessId); //根据业务id号获取当前的状态id值 Integer operatorTypeId=null; //操作类型id号------>放到操作记录表中去的 if(roleList.contains(Role.SEC_BRANCH_BANK)&&statusId==StatusId.TO_BE_CHECKED_BY_SECONDARY_BRANCH_BANK){ //如果是二级分行操作,且当前状态id必须是1 if(checkResult==StatusId.AGREE){ statusId=StatusId.TO_BE_CHECKED_BY_PROVINCIAL_BRANCH_BANK; operatorTypeId=OperationTypeId.BUSINESS_FIRST_TRIAL_AGREED; }else if(checkResult==StatusId.REJECTED){ statusId=StatusId.REJECTED_BY_SECONDARY_BRANCH_BANK; operatorTypeId=OperationTypeId.BUSINESS_FIRST_TRIAL_REJECTED; }else{ throw new RuntimeException("审核结果参数非法"); } }else if(roleList.contains(Role.BUSINESS_DEP_OF_PBB)&&statusId==StatusId.TO_BE_CHECKED_BY_PROVINCIAL_BRANCH_BANK){ //如果是省分行业务部门,且当前状态id必须是3 if(checkResult==StatusId.AGREE){ statusId=StatusId.AGREE; operatorTypeId=OperationTypeId.BUSINESS_REEXAMINE_AGREED; }else if(checkResult==StatusId.REJECTED){ statusId=StatusId.REJECTED_BY_PROVINCIAL_BRANCH_BANK; operatorTypeId=OperationTypeId.BUSINESS_REEXAMINE_REJECTED; }else{ throw new RuntimeException("审核结果参数非法"); } }else{ throw new RuntimeException("无权操作"); } //将审核已将数据封装到map中 Map mapToDaoOfBusinessCheck=new LinkedHashMap(); mapToDaoOfBusinessCheck.put("organizationName", organizationName); mapToDaoOfBusinessCheck.put("checkPerson", checkPerson); mapToDaoOfBusinessCheck.put("checkResult", checkResult); mapToDaoOfBusinessCheck.put("checkOpinion", checkOpinion); mapToDaoOfBusinessCheck.put("businessId", businessId); mapToDaoOfBusinessCheck.put("checkTime", currentTime); mapToDaoOfBusinessCheck.put("task", StatusId.CHECKING); //这里必定写死,11在状态表中对应的是审核状态 //将封装到map的审核意见数据传入dao层中将结果导入【业务审核总表】中-------->insert操作 businessDeclareDao.businessDeclareCheckedBy(mapToDaoOfBusinessCheck); //将审核的结果封装到map中 Map mapToDaoOfBusinessDeclare=new LinkedHashMap(); mapToDaoOfBusinessDeclare.put("businessId", businessId); mapToDaoOfBusinessDeclare.put("statusId", statusId); //将审核结果更新到【业务申报表】这个businessId的【业务申报结果字段】中去-------->update操作 businessDeclareDao.updateBusinessDeclareStatus(mapToDaoOfBusinessDeclare); //此外,还要将审核的这个操作信息插入到操作记录表中【】 Map mapToOperationHistory = new LinkedHashMap(); mapToOperationHistory.put("operatorTypeId", operatorTypeId); //operatorTypeId根据前面的判断决定 mapToOperationHistory.put("operatorRole", organizationName); //创建这个操作的角色根据前面的organizationName决定 mapToOperationHistory.put("operatorAccount", userDetail.getAccount()); //操作账号写活♥ mapToOperationHistory.put("operatorPerson", userDetail.getPerson_name()); //操作人先写活♥ mapToOperationHistory.put("operatorTime", currentTime); //操作时间为当前操作时间 mapToOperationHistory.put("hash", "to be calculated from operation"); //如何计算操作的hash值???? businessDeclareDao.insertOperationHistoryInformationToDaoByBranchBank(mapToOperationHistory);//将操作记录信息插入到操作记录表中 } /** * * @Title: uploadContractByProvincialBranchBank * @Description: TODO(由省分行业务部门上传的合同,将这个合同信息分别插入【合同提交记录表】、【合同状态跟踪表】、【附件表】) * 修改意见定义为“初始版本合同” * 上传部门为“省分行业务部门” * * @param @param map 设定文件 * @return void 返回类型 * @author ylx * @date 2017年12月20日 下午3:09:19 * @throws */ @Transactional(rollbackFor=Exception.class) public void uploadContractByProvincialBranchBank(Map map) { long currentTime = System.currentTimeMillis(); UserDetail userDetail = (UserDetail) map.get("userDetail"); Integer businessId=(Integer) map.get("businessId"); Integer contractId=(Integer) map.get("contractId"); String contractName=(String) map.get("contractName"); String contractParty=(String) map.get("contractParty"); String hash=(String) map.get("hash"); String url=(String) map.get("url"); //将合同信息封装到mapToContractRecord Map mapToContractRecord=new LinkedHashMap(); mapToContractRecord.put("businessId", businessId); mapToContractRecord.put("contractId", contractId); mapToContractRecord.put("contractName", contractName); mapToContractRecord.put("version", "v1.0"); //版本号先写死 mapToContractRecord.put("contractParty", contractParty); mapToContractRecord.put("uploadDepartment", userDetail.getOrganization_name()); mapToContractRecord.put("uploadPerson", userDetail.getPerson_name()); mapToContractRecord.put("modifyOpinion", "初始版本合同"); //这个先写死 mapToContractRecord.put("comfirmDepartment", "管理人"); //这个先写死 mapToContractRecord.put("commitTime", currentTime); mapToContractRecord.put("hash", hash); businessDeclareDao.insertContractInformationToContractRecord(mapToContractRecord); //将合同信息插入到【合同提交记录表】 //将合同信息封装到mapToContractStatusTracking Map mapToContractStatusTracking=new LinkedHashMap(); mapToContractStatusTracking.put("businessId", businessId); mapToContractStatusTracking.put("contractName", contractName); mapToContractStatusTracking.put("contractParty", contractParty); mapToContractStatusTracking.put("updateTime", currentTime); mapToContractStatusTracking.put("statusId", StatusId.MODIFYING); //省分行刚上传合同状态肯定是将状态变成修订中(7) businessDeclareDao.insertContractInformationToContractStatusTracking(mapToContractStatusTracking); //将合同信息插入到【合同状态跟踪表】 //将合同信息封装到mapToAttachment Map mapToAttachment=new LinkedHashMap(); mapToAttachment.put("attachmentId", contractId); mapToAttachment.put("attachmentName", contractName); mapToAttachment.put("url", url); mapToAttachment.put("userId", userDetail.getUser_id()); mapToAttachment.put("createTime", currentTime); businessDeclareDao.insertContractInformationToAttachment(mapToAttachment); //将信息插入到【附件表】 //此外,还要将审核的这个操作信息插入到操作记录表中【】 Map mapToOperationHistory = new LinkedHashMap(); mapToOperationHistory.put("operatorTypeId", OperationTypeId.CONTRACT_UPLOAD); //operatorTypeId=1004表示【合同上传】 mapToOperationHistory.put("operatorRole", userDetail.getOrganization_name()); //创建这个操作的角色只能是省分行业务部门 mapToOperationHistory.put("operatorAccount", userDetail.getAccount()); //操作账号写活♥ mapToOperationHistory.put("operatorPerson", userDetail.getPerson_name()); //操作人先写活♥ mapToOperationHistory.put("operatorTime", currentTime); //操作时间为当前操作时间 mapToOperationHistory.put("hash", "to be calculated from operation"); //如何计算操作的hash值????============================>>待定TODO businessDeclareDao.insertOperationHistoryInformationToDaoByBranchBank(mapToOperationHistory);//将操作记录信息插入到【操作记录表】中 } //初始创建一个新生成业务id号(不和已有的id号重复) public Integer generateBusinessId() { int same = -1; Integer businessId = null; //如果有重复的继续查,直到查不出重复的fundId号为止 while(same != 0){ businessId=(int)(Math.random()*1000000000); //=========================>>>产生附件id号的机制要改的TODO same = businessDeclareDao.queryIfHasTheSameBusinessId(businessId); } return businessId; } }