ContractManagementService.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. package com.fuzamei.service;
  2. import java.util.LinkedHashMap;
  3. import java.util.List;
  4. import java.util.Map;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7. import org.springframework.transaction.annotation.Transactional;
  8. import com.fuzamei.constant.OperationTypeId;
  9. import com.fuzamei.constant.Role;
  10. import com.fuzamei.constant.StatusId;
  11. import com.fuzamei.dao.ContractManagementDao;
  12. import com.fuzamei.entity.ContractRecord;
  13. import com.fuzamei.entity.ContractStatusTracking;
  14. import com.fuzamei.entity.UserDetail;
  15. import com.fuzamei.utils.PageDTO;
  16. @Service
  17. public class ContractManagementService {
  18. @Autowired
  19. private ContractManagementDao contractManagementDao;
  20. /**
  21. *
  22. * @Title: queryContractStatusTracking
  23. * @Description: TODO(将所有的合同跟踪记录信息全部返还给前端)
  24. * @param @param map
  25. * @param @return 设定文件
  26. * @return PageDTO 返回类型
  27. * @author ylx
  28. * @date 2018年1月9日 下午4:15:03
  29. * @throws
  30. */
  31. public PageDTO queryContractStatusTracking(Map<String, Object> map) {
  32. PageDTO pageDTO = new PageDTO();
  33. //分页信息
  34. List<ContractStatusTracking> list = contractManagementDao.queryContractStatusTracking(map);
  35. //查询符合map中条件的条数
  36. int count = contractManagementDao.findAllContractStatusTrackingInformation(map);
  37. pageDTO.setRows(list);
  38. pageDTO.setTotal(count);
  39. return pageDTO;
  40. }
  41. /**
  42. *
  43. * @Title: queryContractRecord
  44. * @Description: TODO(将某个业务id号下的合同记录表的全部信息返回给Action)
  45. * @param @param map
  46. * @param @return 设定文件
  47. * @return PageDTO 返回类型
  48. * @author ylx
  49. * @date 2018年1月9日 下午4:14:20
  50. * @throws
  51. */
  52. public PageDTO queryContractRecord(Map<String, Object> map) {
  53. UserDetail userDetail = (UserDetail) map.get("userDetail");
  54. String roleName = userDetail.getRole_name().get(0);
  55. PageDTO pageDTO = new PageDTO();
  56. //分页信息
  57. List<ContractRecord> list = contractManagementDao.queryContractRecord(map);
  58. for (ContractRecord contractRecord : list) {
  59. //获取未确认部门的信息
  60. String unconfirmed = contractRecord.getUnconfirm_department();
  61. Integer statusId = contractRecord.getStatus_id();
  62. //如果状态为已生效或废弃直接置为null
  63. if(statusId==StatusId.VALID||statusId==StatusId.DUMPED){
  64. contractRecord.setIfChecked(null);//按钮全部失效
  65. continue;
  66. }
  67. //如果未确认部门里面不包含当前用户的角色信息,说明该用户已经对该信息进行过了确认,因此将按钮置灰
  68. if(!unconfirmed.contains(roleName)&&statusId==StatusId.INVALID){
  69. contractRecord.setIfChecked(true);//按钮显示已确认并置灰
  70. }else{
  71. contractRecord.setIfChecked(false);//表示确认按钮还存在
  72. }
  73. }
  74. //查询符合map中条件的条数
  75. int count = contractManagementDao.findAllContractRecordInformation(map);
  76. pageDTO.setRows(list);
  77. pageDTO.setTotal(count);
  78. return pageDTO;
  79. }
  80. /**
  81. *
  82. * @Title: getContractStatusTrackingByBusinessId
  83. * @Description: TODO(通过业务id获取合同状态跟踪表中的全部详细信息)
  84. * @param @param businessId
  85. * @param @return 设定文件
  86. * @return ContractStatusTracking 返回类型
  87. * @author ylx
  88. * @date 2018年1月9日 上午10:33:08
  89. * @throws
  90. */
  91. public ContractStatusTracking getContractStatusTrackingByBusinessId(Integer businessId) {
  92. if(businessId==null){
  93. throw new RuntimeException("业务id不能为空");
  94. }
  95. return contractManagementDao.getContractStatusTrackingByBusinessId(businessId);
  96. }
  97. /**
  98. *
  99. * @Title: uploadContractByUser
  100. * @Description: TODO(上传新合同时,需要在附件表插数据,合同记录表插入一条数据,合同状态跟踪表更新数据,操作记录表插入一条数据)
  101. * @param @param map 设定文件
  102. * @return void 返回类型
  103. * @author ylx
  104. * @date 2018年1月9日 上午11:56:04
  105. * @throws
  106. */
  107. @Transactional(rollbackFor=Exception.class)
  108. public void uploadContractByUser(Map<String, Object> map) {
  109. long currentTime = System.currentTimeMillis();
  110. UserDetail userDetail =(UserDetail) map.get("userDetail");
  111. ContractStatusTracking contractStatusTracking =(ContractStatusTracking) map.get("contractStatusTracking");
  112. ContractRecord contractRecord =(ContractRecord) map.get("contractRecord");
  113. Integer contractId = (Integer) map.get("contractId");
  114. String contractName = (String) map.get("contractName");
  115. String url = (String) map.get("url");
  116. Integer version = contractRecord.getVersion()+1;//获取最新的版本信息号,并加1表示当前要插入的合同信息的最新版本号
  117. String modifyOpinion = (String) map.get("modifyOpinion");
  118. String hash=(String) map.get("hash");
  119. //将数据插入到合同记录表contractRecord
  120. Map<String, Object> mapToContractRecord=new LinkedHashMap<String, Object>();
  121. mapToContractRecord.put("businessId", contractStatusTracking.getBusiness_id());
  122. mapToContractRecord.put("contractId", contractId);
  123. mapToContractRecord.put("contractName", contractName);
  124. mapToContractRecord.put("version", version); //版本号写活♥
  125. mapToContractRecord.put("contractParty", contractStatusTracking.getContract_party());
  126. mapToContractRecord.put("uploadDepartment", userDetail.getOrganization_name());
  127. mapToContractRecord.put("uploadPerson", userDetail.getPerson_name());
  128. mapToContractRecord.put("modifyOpinion", modifyOpinion); //这个根据前台传过来的进入插入
  129. //这个按照这个格式【管理人&省分行业务主管部门&省分行法律部】先写死新上传的肯定待审核部门是三个
  130. mapToContractRecord.put("uncomfirmDepartment", Role.ADMIN+"&"+Role.BUSINESS_CHIEF_DEP_OF_PBB+"&"+Role.LAW_DEP_OF_PBB);
  131. mapToContractRecord.put("statusId", StatusId.INVALID); //刚刚提交必定是未生效(19)
  132. mapToContractRecord.put("commitTime", currentTime);
  133. mapToContractRecord.put("hash", hash);
  134. contractManagementDao.insertInformationToContractRecord(mapToContractRecord);
  135. //将数据封装插入到附件表中attachment
  136. Map<String, Object> mapToAttachment=new LinkedHashMap<String, Object>();
  137. mapToAttachment.put("attachmentId", contractId);
  138. mapToAttachment.put("attachmentName", contractName);
  139. mapToAttachment.put("url", url);
  140. mapToAttachment.put("userId", userDetail.getUser_id());
  141. mapToAttachment.put("createTime", currentTime);
  142. contractManagementDao.insertInformationToAttachment(mapToAttachment);
  143. //将数据插入到操作记录表中operationHistory
  144. Map<String, Object> mapToOperationHistory=new LinkedHashMap<String, Object>();
  145. mapToOperationHistory.put("operatorTypeId", OperationTypeId.CONTRACT_UPLOAD); //operatorTypeId=1004表示【合同上传】
  146. mapToOperationHistory.put("operatorRole", userDetail.getOrganization_name()); //当前用户的上传部门,写活♥
  147. mapToOperationHistory.put("operatorAccount", userDetail.getAccount()); //当前操作账号写活♥
  148. mapToOperationHistory.put("operatorPerson", userDetail.getPerson_name()); //当前操作人先写活♥
  149. mapToOperationHistory.put("operatorTime", currentTime); //操作时间为当前操作时间
  150. mapToOperationHistory.put("hash", "to be calculated from operation"); //如何计算操作的hash值????============================>>待定TODO
  151. contractManagementDao.insertInformationToOperationHistory(mapToOperationHistory);
  152. //新的合同上传以后,contractStatusTracking的信息也要进行修改(合同换成最新的,更新时间这两项)
  153. Map<String, Object> mapToContractStatusTracking=new LinkedHashMap<String, Object>();
  154. mapToContractStatusTracking.put("contractId", contractId);
  155. mapToContractStatusTracking.put("businessId", contractStatusTracking.getBusiness_id());
  156. mapToContractStatusTracking.put("updateTime", currentTime);
  157. contractManagementDao.updateContractStatusTracking(mapToContractStatusTracking);
  158. }
  159. /**
  160. *
  161. * @Title: getLatestContractRecordByBusinessId
  162. * @Description: TODO(获取最新版本号的合同记录详细信息)
  163. * @param @param businessId
  164. * @param @return 设定文件
  165. * @return ContractRecord 返回类型
  166. * @author ylx
  167. * @date 2018年1月9日 上午11:01:42
  168. * @throws
  169. */
  170. public ContractRecord getLatestContractRecordByBusinessId(Integer businessId) {
  171. /*if(businessId==null){
  172. throw new RuntimeException("业务id不能为空");
  173. }*/
  174. return contractManagementDao.getLatestContractRecordByBusinessId(businessId);
  175. }
  176. /**
  177. *
  178. * @Title: getCurrentContractRecordByBusinessId
  179. * @Description: TODO(根据业务id号和版本号确认得到唯一一条合同记录信息)
  180. * @param @param businessId
  181. * @param @param version
  182. * @param @return 设定文件
  183. * @return ContractRecord 返回类型
  184. * @author ylx
  185. * @date 2018年1月9日 下午2:11:53
  186. * @throws
  187. */
  188. public ContractRecord getCurrentContractRecordByBusinessId(Integer businessId, Integer version) {
  189. return contractManagementDao.getCurrentContractRecordByBusinessId(businessId,version);
  190. }
  191. /**
  192. *
  193. * @Title: updateContractByUser
  194. * @Description: TODO(当用户点击确认按钮的时候产生的一系列更新操作)
  195. * @param @param mapToService 设定文件
  196. * @return void 返回类型
  197. * @author ylx
  198. * @date 2018年1月9日 下午2:12:36
  199. * @throws
  200. */
  201. @Transactional(rollbackFor=Exception.class)
  202. public void updateContractByUser(Map<String, Object> map) {
  203. long currentTime = System.currentTimeMillis();
  204. UserDetail userDetail = (UserDetail) map.get("userDetail");
  205. ContractRecord contractRecord = (ContractRecord) map.get("contractRecord");
  206. String unconfirmed = contractRecord.getUnconfirm_department();
  207. String currentUserRole = userDetail.getRole_name().get(0);//获取当前用户角色名
  208. if(!unconfirmed.contains(currentUserRole)){//判断当前用户是否已经确认过
  209. throw new RuntimeException("您已确认过了");
  210. }
  211. unconfirmed = unconfirmed.replace(currentUserRole, "");//将当前角色在字符串中截掉
  212. Integer businessId = contractRecord.getBusiness_id();
  213. Integer version = contractRecord.getVersion();
  214. Integer contractId = contractRecord.getContract_id();//被确认的合同id号,一旦被确认,合同记录跟踪表的合同id号以被确认的那个合同id号为准
  215. if(unconfirmed.contains(Role.ADMIN)||unconfirmed.contains(Role.BUSINESS_CHIEF_DEP_OF_PBB)||unconfirmed.contains(Role.LAW_DEP_OF_PBB)){
  216. //如果字符串中还含有其它角色信息,那说明其他部门还没有全部确认,该合同的状态信息暂时还不需要进行变动
  217. //所有部门都还没有全部确认,只要更改待确认部门信息即可
  218. Map<String, Object> mapToContractRecord=new LinkedHashMap<String, Object>();
  219. mapToContractRecord.put("businessId", businessId);
  220. mapToContractRecord.put("version", version);
  221. mapToContractRecord.put("commitTime", currentTime);//当前的状态更新时间
  222. mapToContractRecord.put("unconfirmed", unconfirmed);//修改待确认部门
  223. mapToContractRecord.put("statusId", StatusId.INVALID);//将状态值仍然为未生效【19】
  224. contractManagementDao.updateContractRecord(mapToContractRecord);
  225. }else{
  226. //接下来的操作是所有部门都已经确认的情况下的操作
  227. Map<String, Object> mapToContractRecord=new LinkedHashMap<String, Object>();
  228. mapToContractRecord.put("businessId", businessId);
  229. mapToContractRecord.put("version", version);
  230. mapToContractRecord.put("commitTime", currentTime);//当前的状态更新时间
  231. mapToContractRecord.put("unconfirmed", "--");//将待确认部门置为空
  232. mapToContractRecord.put("statusId", StatusId.VALID);//将状态值改为生效【20】
  233. contractManagementDao.updateContractRecord(mapToContractRecord);
  234. //当所有部门全部确认了以后,除了被确认的合同记录状态为【生效】该业务id下的其它所有合同记录的状态全部为【作废状态】
  235. Map<String, Object> mapToOtherContractRecord=new LinkedHashMap<String, Object>();
  236. mapToOtherContractRecord.put("businessId", businessId);
  237. mapToOtherContractRecord.put("version", version);
  238. mapToOtherContractRecord.put("commitTime", currentTime);
  239. mapToOtherContractRecord.put("statusId", StatusId.DUMPED);//其它所有状态改为【作废】
  240. contractManagementDao.updateOtherContractRecord(mapToOtherContractRecord);
  241. //总表中的合同状态跟踪表也要进行相应的更新
  242. Map<String, Object> mapToContractStatusTracking=new LinkedHashMap<String, Object>();
  243. mapToContractStatusTracking.put("businessId", businessId);
  244. mapToContractStatusTracking.put("contractId", contractId);
  245. mapToContractStatusTracking.put("updateTime", currentTime);
  246. mapToContractStatusTracking.put("statusId", StatusId.CONFIRMED); //此时所有人都已经确认的情况下将【合同状态跟踪表】状态代码变成已确认【8】
  247. contractManagementDao.updateContractStatusTrackingStatusAndContractId(mapToContractStatusTracking);//更新合同状态跟踪表中的信息
  248. }
  249. //将操作记录插入到操作记录表中
  250. Map<String, Object> mapToOperationHistory=new LinkedHashMap<String, Object>();
  251. mapToOperationHistory.put("operatorTypeId", OperationTypeId.CONTRACT_CONFIRM); //operatorTypeId=1005表示【合同确认】
  252. mapToOperationHistory.put("operatorRole", userDetail.getOrganization_name()); //当前用户的上传部门,写活♥
  253. mapToOperationHistory.put("operatorAccount", userDetail.getAccount()); //当前操作账号写活♥
  254. mapToOperationHistory.put("operatorPerson", userDetail.getPerson_name()); //当前操作人先写活♥
  255. mapToOperationHistory.put("operatorTime", currentTime); //操作时间为当前操作时间
  256. mapToOperationHistory.put("hash", "to be calculated from operation"); //如何计算操作的hash值????============================>>待定TODO
  257. contractManagementDao.insertInformationToOperationHistory(mapToOperationHistory);
  258. }
  259. }