package com.fuzamei.service; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import com.fuzamei.constant.OperationTypeId; import com.fuzamei.constant.Role; import com.fuzamei.constant.StatusId; import com.fuzamei.dao.CapitalTransferDao; import com.fuzamei.entity.BusinessCheck; import com.fuzamei.entity.BusinessDeclare; import com.fuzamei.entity.CapitalTransfer; import com.fuzamei.entity.CapitalTransferCheck; import com.fuzamei.entity.UserDetail; import com.fuzamei.utils.PageDTO; @Service public class CapitalTransferService { @Autowired private CapitalTransferDao capitalTransferDao; private static final int ROW_NUM = 10; // 分页每页显示数据的数量 /** * 查询资金划转列表 省分行托管中心指令业务岗 * @param * @param * @throws Exception */ /*public PageDTO selectCapitalTransferTable(Map map){//查询资金划转列表 int page = 1; // 默认页是第一页 String fund_name="";//基金名称 String status_name="";//状态名称 long startTime = 0L; // 开始时间默认0 long endTime = Long.MAX_VALUE; // 结束时间默认Long最大值 if (!"".equals(map.get("page")) && map.get("page") != null) { // 等于空就直接取第一页 try { page = Integer.parseInt((String) map.get("page")); if (page < 1) { page = 1; } } catch (NumberFormatException e) { page = 1; // 数据解析异常page还是1 } } if (!"".equals(map.get("fund_name")) && map.get("fund_name") != null) { // 等于空就直接取空值 fund_name = (String) map.get("fund_name"); } if (!"".equals(map.get("status_name")) && map.get("status_name") != null) { // 等于空就直接取空值 status_name = (String) map.get("status_name"); } if (!"".equals(map.get("startTime")) && map.get("startTime") != null) { // 等于空就直接取空值 try { startTime = Long.parseLong((String) map.get("startTime")); } catch (NumberFormatException e) { startTime = 0L; // 数据解析异常startTime还是0 } } if (!"".equals(map.get("endTime")) && map.get("endTime") != null) { // 等于空就直接取空值 try{ endTime = Long.parseLong((String) map.get("endTime")); }catch (NumberFormatException e) { endTime = Long.MAX_VALUE; // 数据要是解析异常endTime还是9223372036854775807L } } PageDTO pageDto = new PageDTO(); // 创建分页对象 Map mapToDao = new LinkedHashMap(); mapToDao.put("startPage", (page - 1) * ROW_NUM); mapToDao.put("fund_name", fund_name); mapToDao.put("status_name", status_name); if(startTime <= endTime) { mapToDao.put("startTime", startTime); mapToDao.put("endTime", endTime); }else{ mapToDao.put("startTime", startTime); mapToDao.put("endTime", Long.MAX_VALUE); } mapToDao.put("rowNum", ROW_NUM);// 默认每页显示数据是10条,可根据需求修改分页数量 int countPage=capitalTransferDao.selectCapitalTransferPage(mapToDao);//资金划转表 总得信息数量页数 List CapitalTransferList=capitalTransferDao.selectCapitalTransferTable(mapToDao); pageDto.setTotal(countPage); pageDto.setRows(CapitalTransferList); return pageDto; }*/ public PageDTO selectCapitalTransferTableAll(Map map){//查询资金划转列表 PageDTO pageDto = new PageDTO(); // 创建分页对象 UserDetail userDetail = (UserDetail) map.get("userDetail"); List roleList = userDetail.getRole_name(); List informationList=null;//定义全局 int count=0; if(roleList.contains(Role.BUSINESS_CHECK_POS_OF_PBBTBC)){//核算业务岗 //指令业务岗通过后 核算业务岗才能看到 未通过状态的都不会显示 //而且分页的话查询所有信息的条数也是按照之前的条件进行查询的 informationList=capitalTransferDao.selectCapitalTransferTable2(map); count=capitalTransferDao.selectCapitalTransferPage2(map); } else if(roleList.contains(Role.BUSINESS_CHIEF_POS_OF_PBBTBC)){//核算主管岗 //指令业务岗和核算业务岗通过后 核算主管岗才能看到 未通过都不会显示 //而且分页的话查询所有信息的条数也是按照之前的条件进行查询的 informationList=capitalTransferDao.selectCapitalTransferTable3(map); count=capitalTransferDao.selectCapitalTransferPage3(map); } else { //由管理人发起指令后 指令业务岗才能看到 状态为(待指令业务岗审核),————>所有人都能看到 informationList=capitalTransferDao.selectCapitalTransferTable(map); count=capitalTransferDao.selectCapitalTransferPage(map); } pageDto.setRows(informationList); pageDto.setTotal(count); return pageDto; } /** * 资金划转审核记录的查询,当用户点击查看按钮后,不仅显示了资金划转的信息,还显示了资金划转审核记录的信息,这里资金划转的信息直接从前端获取,审核记录根据前端提供的id号>fund_id来进行查询 */ public List queryCapitalTransferCheckInformation(Map map) { UserDetail userDetail = (UserDetail) map.get("userDetail"); List roleList = userDetail.getRole_name();//角色名称 Integer fund_id = (Integer) map.get("fund_id"); Integer statusId = capitalTransferDao.getStatusIdByCapitalId(fund_id);//根据资金id 查询状态id值 if(roleList.contains(Role.BUSINESS_TRAN_POS_OF_PBBTBC)){//指令业务岗 if(statusId==12) {//如果管理人发起划转资金后 状态不是(待指令业务岗审核 ) 直接返回空 return null; } return capitalTransferDao.selectCapitalTransferRecord(map); } if(roleList.contains(Role.BUSINESS_CHECK_POS_OF_PBBTBC)){//如果是 省分行托管分中心(核算业务岗) if(statusId==12||statusId==13){//对于核算主管岗 如果状态是指令业务岗不通过或者是在待审核时 直接返回空 return null; } return capitalTransferDao.selectCapitalTransferRecord(map); } else if(roleList.contains(Role.BUSINESS_CHIEF_POS_OF_PBBTBC)) {//省分行托管分中心(核算主管岗) if(statusId==12||statusId==13 ||statusId==14||statusId==15){//如果状态是指令业务岗不通过或者是在业务岗待审核时 再或者核算岗是在待审核或者核算岗审核不通过时 直接返回空 return null; } return capitalTransferDao.selectCapitalTransferRecord(map); }else { return capitalTransferDao.selectCapitalTransferRecord(map);//所有人都能查看 } //throw new RuntimeException("无权操作"); } /** * 资金划转 点击查看资金划转 详情 //暂时不用了 上面代替 * * @param map * @return */ /* public Map selectChaKanZiJinHuaZhuan(Map map){ int fund_id=0; if (!"".equals(map.get("fund_id")) && map.get("fund_id") != null) { fund_id = Integer.parseInt((String)map.get("fund_id")); } Map mapToDao = new LinkedHashMap(); mapToDao.put("fund_id", fund_id); List list=capitalTransferDao.selectChaKanZiJinHuaZhuan(mapToDao); List lis= capitalTransferDao.selectCapitalTransferRecord(mapToDao); Map map1=new LinkedHashMap(); map1.put("CapitalTransfer", list); map1.put("CapitalTransferCheck", lis); return map1; } */ /** * 审核划转资金 * 审批流程审批意见 * 将审核意见插入到审核表 * @param map */ @Transactional(rollbackFor=Exception.class) public void insertCheckTransfer(Map map) { long currentTime = System.currentTimeMillis();//获取系统时间 UserDetail userDetail = (UserDetail) map.get("userDetail");//userDetail从controller层获取到 List roleList = userDetail.getRole_name();////在get角色名称 String check_department=userDetail.getOrganization_name(); //机构名称————————————>//审核部门 check_department审核部门的名称 String check_person=userDetail.getPerson_name(); //审核人 Integer check_result=(Integer) map.get("check_result"); //审核结果(5表示同意,6表示不同意) String check_opinion=(String) map.get("check_opinion"); //审核意见 Integer fund_id=(Integer) map.get("fund_id"); //资金划转的id号,要根据这个更新资金划转表的状态的 //Integer relation=(Integer) map.get("relation"); Integer statusId=capitalTransferDao.getStatusIdByCapitalId(fund_id); //根据业务id号获取当前的状态id值 Integer operatorTypeId=null; //操作类型id号------>放到操作记录表中去的 if(roleList.contains(Role.ADMIN)) {//角色是(管理人)发起划款资金 statusId=StatusId.INSTRUCT_BUSINESS_ACCOUNTING;//发起后状态 设置为(待指令业务岗审核) operatorTypeId=OperationTypeId.ADMIN_LAUNCHING;//管理人发起后操作类型必须是1027 为 发起划款指令(10) } else if(roleList.contains(Role.BUSINESS_TRAN_POS_OF_PBBTBC)&&statusId==StatusId.INSTRUCT_BUSINESS_ACCOUNTING){//省分行托管中心/状态待指令业务岗审核 if(check_result==StatusId.AGREE) {//如果审核结果是通过 statusId=StatusId.CHECK_BUSINESS_ACCOUNTING; //通过后 状态显示为待核算业务岗审核 operatorTypeId=OperationTypeId.INSTRUCT_BUSINESS_ACCOUNTING_YES;//操作类型为指令业务岗通过 改动了 }else if(check_result==StatusId.REJECTED) {//如果审核结 果是不通过 statusId=StatusId.INSTRUCT_BUSINESS_ACCOUNTING_NO;//显示>为指令业务岗审核不通过 operatorTypeId=OperationTypeId.CHECK_BUSINESS_ACCOUNTING_REJECT_MAIN;//指令业务岗拒绝 }else { throw new RuntimeException("审核结果参数非法1"); } } else if(roleList.contains(Role.BUSINESS_CHECK_POS_OF_PBBTBC)&&statusId==StatusId.CHECK_BUSINESS_ACCOUNTING){ //如果是待核算业务岗操作,且当前状态id必须是14 if(check_result==StatusId.AGREE){//审核结果时通过 statusId=StatusId.CHARGE_BUSINESS_ACCOUNTING; //如果通过 状态显示为待核算主管岗审核 operatorTypeId=OperationTypeId.CHECK_BUSINESS_ACCOUNTING_PASS; //操作类型核算业务岗通过 }else if(check_result==StatusId.REJECTED){//不通过 statusId=StatusId.CHECK_BUSINESS_ACCOUNTING_NO; //显示核算业务岗不通过 operatorTypeId=OperationTypeId.CHECK_BUSINESS_ACCOUNTING_REJECT;//核算业务岗拒绝 }else{ throw new RuntimeException("审核结果参数非法2"); } }else if(roleList.contains(Role.BUSINESS_CHIEF_POS_OF_PBBTBC)&&statusId==StatusId.CHARGE_BUSINESS_ACCOUNTING){//如果是待核算主管岗,且当前状态id必须是16 if(check_result==StatusId.AGREE){//如果审核结果通过 statusId=StatusId.CHARGE_BUSINESS_ACCOUNTING_YES; operatorTypeId=OperationTypeId.CHARGE_BUSINESS_ACCOUNTING_YES;//核算主管岗通过 }else if(check_result==StatusId.REJECTED){//如果审核结果不通过 statusId=StatusId.CHARGE_BUSINESS_ACCOUNTING_NO;//核算主管岗审核不通过 operatorTypeId=OperationTypeId.CAPITAL_TRANSFER_REEXAMINE_REJECTED_NO;// //(划转资金)核算主管岗终审拒绝 }else{ throw new RuntimeException("审核结果参数非法3"); } } else{ throw new RuntimeException("无权操作222"); } //将审核已将数据封装到map中 Map mapToDaoOfCapitalTransfer=new LinkedHashMap(); mapToDaoOfCapitalTransfer.put("check_department", check_department); mapToDaoOfCapitalTransfer.put("check_person", check_person); mapToDaoOfCapitalTransfer.put("check_result", check_result); mapToDaoOfCapitalTransfer.put("check_opinion", check_opinion); mapToDaoOfCapitalTransfer.put("fund_id", fund_id); mapToDaoOfCapitalTransfer.put("check_time", currentTime); mapToDaoOfCapitalTransfer.put("relation", StatusId.CHECKING); //这里不能写死—管理人划转资金就是发起————第1.2.3级任务类型就是审核了————————》待改 //将封装到map的审核意见数据传入dao层中将结果导入【资金划转审核记录表】中-------->插入操作 capitalTransferDao.insertCheckTransfer(mapToDaoOfCapitalTransfer); //将审核的结果封装到map中 Map mapToDaoOfBusinessDeclare=new LinkedHashMap(); mapToDaoOfBusinessDeclare.put("fund_id", fund_id); mapToDaoOfBusinessDeclare.put("statusId", statusId); //将审核结果更新到【资金划转】这个fund_id的【资金划转结果字段】中去-------->修改操作 capitalTransferDao.updateCapitaltransferStatus(mapToDaoOfBusinessDeclare); //还要将审核的这个操作信息插入到操作记录表中 Map mapToOperationHistory = new LinkedHashMap(); mapToOperationHistory.put("operator_type_id", operatorTypeId); //operatorTypeId根据前面的判断决定 mapToOperationHistory.put("operator_role", check_department); //创建这个操作的角色根据前面的organizationName决定 mapToOperationHistory.put("operator_account", userDetail.getAccount()); //操作账号写活 mapToOperationHistory.put("operator_person", userDetail.getPerson_name()); //操作人先写活 mapToOperationHistory.put("operator_time", currentTime); //操作时间为当前操作时间 mapToOperationHistory.put("hash", "5555555555"); //如何计算操作的hash值????目前写死的这里 capitalTransferDao.insertOperationHistory(mapToOperationHistory);// 将操作记录信息插入到操作记录表中 } ///////////////////////////////////////以下////////////////////////////////////////////////////////////////////____ /** * 由管理人来发起划款 资金 * @param map * @return * */ @Transactional public void insertCapitalTransfer(Map map){ long currentTime = System.currentTimeMillis();//获取系统时间 UserDetail userDetail = (UserDetail) map.get("userDetail");//userDetail从controller层获取到 //List roleList = userDetail.getRole_name();//角色名称 String check_department=userDetail.getOrganization_name();//机构名称 String check_person=userDetail.getPerson_name();//处理人员 int user_id=(int) map.get("userId");//??? int accoun_id=(int) map.get("accoun_id");//???????????????? String custodian=(String) map.get("custodian");//??? String fund_name=(String) map.get("fund_name"); double sum_of_money=(double) map.get("sum_of_money"); String attachment_name=(String) map.get("attachment_name");//附件名称拿上传文件的名称 double account_balance=userDetail.getAccount_balance();//管理人的账户余额 ???? // double money=userDetail.getMoney();//?????????????? double money=1000; double minusResult=account_balance-sum_of_money;//账户余额减去划款金额后的结果??? double sumMoney=sum_of_money+money;//划款金额+钱?? //插入资金划转表 Map mapToCapitalTransfer=new LinkedHashMap(); mapToCapitalTransfer.put("custodian", custodian);//管理人????还是userDetail.getUser_id() mapToCapitalTransfer.put("fund_name", fund_name);//基金名称 mapToCapitalTransfer.put("sum_of_money",sum_of_money);//划款金额 mapToCapitalTransfer.put("basis_of_payment",attachment_name);//划款依据-->文件名称?????是个路径? mapToCapitalTransfer.put("apply_time",currentTime);//申请时间 mapToCapitalTransfer.put("handle_time",currentTime);//处理时间 mapToCapitalTransfer.put("status_id",StatusId.INSTRUCT_BUSINESS_ACCOUNTING);//管理人发起后 状态改为 待指令业务岗审核 发起后由后面3级来审批 capitalTransferDao.insertCapitalTransfer(mapToCapitalTransfer);//插入到划转资金表 //资金划转完要产生一条记录 (往资金审核记录表插入信息) Map mapToDaoOfCapitalTransfer=new LinkedHashMap(); mapToDaoOfCapitalTransfer.put("check_department", check_department);//审核部门or机构名称 mapToDaoOfCapitalTransfer.put("check_person",check_person);//处理人员 mapToDaoOfCapitalTransfer.put("check_result",StatusId.AGREE);//这里一旦点击提交状态必须是通过??? mapToDaoOfCapitalTransfer.put("check_opinion", "--");//刚发起是没有审核意见的 mapToDaoOfCapitalTransfer.put("check_time", currentTime); mapToDaoOfCapitalTransfer.put("relation", StatusId.LAUNCHING);//任务类型为 发起 capitalTransferDao.insertCheckTransfer(mapToDaoOfCapitalTransfer);//管理人发起划款资金后也会产生一条划款记录到划转审核记录表里 且任务状态为发起 //修改user表账户余额(减) Map mapToUpdateUserAccountBalance=new LinkedHashMap(); mapToUpdateUserAccountBalance.put("user_id",user_id ); mapToUpdateUserAccountBalance.put("account_balance", minusResult);//待改 capitalTransferDao.updateTUserAccountBalance(mapToUpdateUserAccountBalance);//去用户表去修改减掉(账户余额)的钱 //修改账户信息表的钱(加) Map mapToUpdateAccountMoney=new LinkedHashMap(); mapToUpdateAccountMoney.put("accoun_id", accoun_id);//账户表id mapToUpdateAccountMoney.put("money", sumMoney);//账户表 钱 capitalTransferDao.updateAccountMoney(mapToUpdateAccountMoney);//去账户信息表去修改钱 计算加起来 //同时往附件表也插入信息 Map mapToAttachment=new LinkedHashMap(); mapToAttachment.put("attachment_id", map.get("attachmentId")); //写的是随机数Action已经去数据库校验过了 mapToAttachment.put("attachment_name", attachment_name); //附件名称 写上传文件后的名称 mapToAttachment.put("url","暂"); //附件url ????? mapToAttachment.put("upload_person_id",userDetail.getUser_id());//附件上传人id //写的是管理人id?? mapToAttachment.put("create_time", currentTime); //附件添加时间 capitalTransferDao.insertAttachmentInfo(mapToAttachment);//插入到附件表 //往操作记录表也插入一条信息 Map mapToOperationHistory = new LinkedHashMap(); mapToOperationHistory.put("operator_type_id",OperationTypeId.ADMIN_LAUNCHING); //操作类型id 是管理人发起划款指令? mapToOperationHistory.put("operator_role", check_department); //创建这个操作的角色根据前面的organizationName决定 mapToOperationHistory.put("operator_account", userDetail.getAccount()); //操作账号 mapToOperationHistory.put("operator_person", userDetail.getPerson_name()); //操作人 mapToOperationHistory.put("operator_time", currentTime); //操作时间为当前操作时间 mapToOperationHistory.put("hash", "777777777"); //如何计算操作的hash值????暂时写死的 capitalTransferDao.insertOperationHistory(mapToOperationHistory); //将操作记录信息插入到操作记录表中 } }