ValuationAccountingService.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  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.BattleResult;
  9. import com.fuzamei.constant.OperationTypeId;
  10. import com.fuzamei.constant.Role;
  11. import com.fuzamei.dao.AttachmentDao;
  12. import com.fuzamei.dao.ProjectFileDao;
  13. import com.fuzamei.dao.UserAuthoricationDao;
  14. import com.fuzamei.dao.ValuationAccountingDao;
  15. import com.fuzamei.entity.UserDetail;
  16. import com.fuzamei.entity.ValuationAccount;
  17. import com.fuzamei.utils.PageDTO;
  18. @Service
  19. public class ValuationAccountingService {
  20. @Autowired
  21. private ValuationAccountingDao valuationAccountingDao;
  22. @Autowired
  23. private ProjectFileDao projectFileDao;
  24. /**
  25. *
  26. * @Title: queryValuationAccountingInformation
  27. * @Description: TODO(查看估值核算表的信息,只有管理人和省托管分中心估值核算岗才有权限查看)
  28. * @param @param map
  29. * @param @return 设定文件
  30. * @return PageDTO 返回类型
  31. * @author ylx
  32. * @date 2017年12月28日 上午11:38:35
  33. * @throws
  34. */
  35. public PageDTO queryValuationAccountingInformation(Map<String, Object> map) {
  36. PageDTO pageDTO=new PageDTO();
  37. List<ValuationAccount> informationList=valuationAccountingDao.queryValuationAccountingInformation(map); //从service层中获取分页的对象信息
  38. int count=valuationAccountingDao.findAllInformations(); //获取总的信息数量
  39. pageDTO.setTotal(count);
  40. pageDTO.setRows(informationList);
  41. return pageDTO;
  42. }
  43. /**
  44. *
  45. * @Title: insertInformationIntoTable
  46. * @Description: TODO(以管理员身份首次将估值核算等数据插入数据库中------>首次创建基金id号要生成,基金名,托管资产都要从用户这里获取)
  47. * @param @param map 设定文件
  48. * @return void 返回类型
  49. * @author ylx
  50. * @date 2017年12月18日 下午5:49:33
  51. * @throws
  52. */
  53. @Transactional(rollbackFor=Exception.class)
  54. public void insertInformationIntoTableByAdminForTheFirstTime(Map<String, Object> map) {
  55. long currentTime = System.currentTimeMillis();
  56. int attachmentId = (Integer) map.get("attachmentId");
  57. UserDetail userDetail = (UserDetail) map.get("userDetail");
  58. //将数据插入到估值核算表的数据封装到mapToDaoForValuationAccounting
  59. Map<String, Object> mapToDaoForValuationAccounting = new LinkedHashMap<String,Object>();
  60. mapToDaoForValuationAccounting.put("fundId", map.get("fundId"));
  61. mapToDaoForValuationAccounting.put("fundName", map.get("fundName"));
  62. mapToDaoForValuationAccounting.put("assets", map.get("assets"));
  63. //管理员估值报表的id,而银行估值报表的id这个时候是没有添加的,也就是表中插入数据的时候,银行估值报表的id先空着
  64. mapToDaoForValuationAccounting.put("attachmentId", attachmentId); //附件id已经写活♥
  65. mapToDaoForValuationAccounting.put("updateTime", currentTime); //上传文件的更新时间为当前时间
  66. mapToDaoForValuationAccounting.put("battleResult", BattleResult.TO_BE_MATCHED); //对账结果为待对账,这里就是一个常量信息♥
  67. valuationAccountingDao.insertInformationIntoTableByAdmin(mapToDaoForValuationAccounting); //将以上的数据直接添加到数据库中【估值核算表】去
  68. //将附件信息放入到mapToDaoForAttachment并传递到数据库插入
  69. Map<String, Object> mapToDaoForAttachment = new LinkedHashMap<String,Object>();
  70. mapToDaoForAttachment.put("attachmentId", attachmentId); //附件id已经写活♥
  71. mapToDaoForAttachment.put("attachmentName", map.get("attachmentName")); //附件名称需要录入
  72. mapToDaoForAttachment.put("url", map.get("url")); //下载文件需要用到的url地址需要录入
  73. mapToDaoForAttachment.put("userId", map.get("userId")); //用户id♥
  74. mapToDaoForAttachment.put("addTime", currentTime); //这里添加的文件上传时间,和估值核算添加的时间一致
  75. valuationAccountingDao.insertInformationToAttachment(mapToDaoForAttachment);
  76. //此外,还要将业务申报的这个操作信息插入到操作记录表中【操作记录表】
  77. Map<String, Object> mapToOperationHistory = new LinkedHashMap<String,Object>();
  78. mapToOperationHistory.put("operatorTypeId", OperationTypeId.UPLOAD_VALUATION_CHECK); //上传估值核算表为1010
  79. mapToOperationHistory.put("operatorAccount", userDetail.getAccount()); //操作账号通过userDetail中获取
  80. mapToOperationHistory.put("operatorRole", Role.ADMIN); //创建这个操作的角色只能是管理人
  81. mapToOperationHistory.put("operatorPerson", userDetail.getPerson_name()); //操作人通过userDetail中获取
  82. mapToOperationHistory.put("operatorTime", currentTime); //操作时间为当前操作时间
  83. mapToOperationHistory.put("hash", "来自前端token计算"); //如何计算操作的hash值?(按照上传的项目文件的hash值算)=====>>待定TODO
  84. projectFileDao.insertOperationHistoryInformationToDao(mapToOperationHistory); //将操作记录信息插入到操作记录表中
  85. }
  86. /**
  87. *
  88. * @Title: updateInformationByAdmin
  89. * @Description: TODO(以管理员的身份进行估值核算文件重新上传的操作)
  90. * @param @param mapToService 设定文件
  91. * @return void 返回类型
  92. * @author ylx
  93. * @date 2017年12月29日 上午10:08:47
  94. * @throws
  95. */
  96. @Transactional(rollbackFor=Exception.class)
  97. public void updateInformationByAdmin(Map<String, Object> map) {
  98. long currentTime=System.currentTimeMillis(); //获取当前时间
  99. UserDetail userDetail = (UserDetail) map.get("userDetail"); //获取用户详细信息
  100. Map<String, Object> mapToDaoForValuationAccounting = new LinkedHashMap<String,Object>();
  101. mapToDaoForValuationAccounting.put("fundId", map.get("fundId"));
  102. //管理员估值报表这个时候重新上传文件只需要把总表中的对账结果和更新时间改一下就可以了,附件id不用换
  103. mapToDaoForValuationAccounting.put("updateTime", currentTime); //上传文件的更新时间为当前时间
  104. mapToDaoForValuationAccounting.put("battleResult", map.get("battleResult")); //总表中需要改变的对账结果
  105. valuationAccountingDao.updateInformationByAdmin(mapToDaoForValuationAccounting); //将以上的数据更新到之前估值核算表
  106. //将附件信息封装到mapToDaoForAttachment并传入数据库中
  107. Map<String, Object> mapToDaoForAttachment = new LinkedHashMap<String,Object>();
  108. mapToDaoForAttachment.put("attachmentId", map.get("attachmentId")); //直接从前面的map中获取
  109. mapToDaoForAttachment.put("url", map.get("url")); //下载文件需要用到的url地址需要录入到附件表中
  110. mapToDaoForAttachment.put("attachmentName", map.get("attachmentName")); //附件名称要重新修改
  111. mapToDaoForAttachment.put("userId", userDetail.getUser_id()); //用户id写活了,这个用户id也要改下♥
  112. mapToDaoForAttachment.put("addTime", currentTime); //这里添加的文件重新上传的时间,和项目文档更新时间一样
  113. valuationAccountingDao.updateAttachmentInformationByAdmin(mapToDaoForAttachment); //将以上的数据更新到附件表
  114. //此外,还要将上传估值核算表的这个操作信息插入到操作记录表中【】
  115. Map<String, Object> mapToOperationHistory = new LinkedHashMap<String,Object>();
  116. mapToOperationHistory.put("operatorTypeId", OperationTypeId.UPLOAD_VALUATION_CHECK); //操作类型为【上传估值核算表】---1010
  117. mapToOperationHistory.put("operatorAccount", userDetail.getAccount()); //操作账号写活了♥
  118. mapToOperationHistory.put("operatorRole", Role.ADMIN); //创建这个操作的角色只能是---管理人
  119. mapToOperationHistory.put("operatorPerson", userDetail.getPerson_name()); //操作人写活了♥
  120. mapToOperationHistory.put("operatorTime", currentTime); //操作时间为当前操作时间
  121. mapToOperationHistory.put("hash", "to be calculated from operation"); //如何计算操作的hash值????======================================>>待定TODO
  122. valuationAccountingDao.insertOperationHistoryInformationToDao(mapToOperationHistory);//将操作记录信息插入到操作记录表中
  123. }
  124. /**
  125. *
  126. * @Title: updateInformationByBank
  127. * @Description: TODO(以银行的身份将银行的估值核算等数据更新到已经存在的表中,同时将上传估值核算的操作记录插入到操作记录表中去)
  128. * @param @param map 设定文件
  129. * @return void 返回类型
  130. * @author ylx
  131. * @date 2017年12月18日 下午8:21:51
  132. * @throws
  133. */
  134. @Transactional(rollbackFor=Exception.class)
  135. public void updateInformationByBank(Map<String, Object> map) {
  136. long currentTime=System.currentTimeMillis();
  137. UserDetail userDetail = (UserDetail) map.get("userDetail"); //获取用户详细信息
  138. Integer attachmentId = (Integer) map.get("attachmentId");
  139. String battleResult = (String) map.get("battleResult"); //获取比对结果
  140. //更新估值核算表中的信息
  141. Map<String, Object> mapToDaoForValuationAccounting = new LinkedHashMap<String,Object>();
  142. mapToDaoForValuationAccounting.put("fundId", map.get("fundId"));
  143. mapToDaoForValuationAccounting.put("attachmentId", attachmentId); //附件id已经写活♥===========>>id号生成机制到时候再改TODO
  144. mapToDaoForValuationAccounting.put("updateTime", currentTime); //上传文件的更新时间为当前时间
  145. mapToDaoForValuationAccounting.put("battleResult", battleResult); //总表中需要改变的对账结果
  146. valuationAccountingDao.updateInformationByBank(mapToDaoForValuationAccounting); //将以上的数据更新到之前估值核算表
  147. //待对账银行是插入一个新数据
  148. if(BattleResult.TO_BE_MATCHED.equals(battleResult)){
  149. //将附件信息封装到mapToDaoForAttachment并传入数据库中
  150. Map<String, Object> mapToDaoForAttachment = new LinkedHashMap<String,Object>();
  151. mapToDaoForAttachment.put("attachmentId", attachmentId);
  152. mapToDaoForAttachment.put("url", map.get("url")); //下载文件需要用到的url地址需要录入到附件表中
  153. mapToDaoForAttachment.put("attachmentName", map.get("attachmentName")); //附件名称需要录入
  154. //用户id已经写活♥
  155. mapToDaoForAttachment.put("userId", userDetail.getUser_id()); //用户id写活了♥
  156. mapToDaoForAttachment.put("addTime", currentTime); //这里添加的文件上传时间,和项目文档更新时间一样
  157. valuationAccountingDao.insertInformationToAttachment(mapToDaoForAttachment); //将以上的数据插入到附件表中
  158. }
  159. //不一致说明银行要修改附件中的信息
  160. if(BattleResult.INCONSISTENT.equals(battleResult)){
  161. //将附件信息封装到mapToDaoForAttachment并传入数据库中
  162. Map<String, Object> mapToDaoForAttachment = new LinkedHashMap<String,Object>();
  163. mapToDaoForAttachment.put("attachmentId", attachmentId);
  164. mapToDaoForAttachment.put("url", map.get("url")); //下载文件需要用到的url地址需要录入到附件表中
  165. mapToDaoForAttachment.put("attachmentName", map.get("attachmentName")); //附件名称需要录入
  166. //用户id已经写活♥
  167. mapToDaoForAttachment.put("userId", userDetail.getUser_id()); //用户id写活了♥
  168. mapToDaoForAttachment.put("addTime", currentTime); //这里添加的文件上传时间,和项目文档更新时间一样
  169. valuationAccountingDao.updateAttachmentInformationByBank(mapToDaoForAttachment); //将以上的数据插入到附件表中
  170. }
  171. //此外,还要将业务申报的这个操作信息插入到操作记录表中【】
  172. Map<String, Object> mapToOperationHistory = new LinkedHashMap<String,Object>();
  173. mapToOperationHistory.put("operatorTypeId", OperationTypeId.UPLOAD_VALUATION_CHECK); //操作类型为【上传估值核算表】---1010
  174. mapToOperationHistory.put("operatorAccount", userDetail.getAccount()); //操作账号写活了♥
  175. mapToOperationHistory.put("operatorRole", Role.ACCOUNTING_POS_OF_TBC); //创建这个操作的角色只能是---省分行托管分中心估值核算岗
  176. mapToOperationHistory.put("operatorPerson", userDetail.getPerson_name()); //操作人写活了♥
  177. mapToOperationHistory.put("operatorTime", currentTime); //操作时间为当前操作时间
  178. mapToOperationHistory.put("hash", "to be calculated from operation"); //如何计算操作的hash值????=========================>>TODO
  179. valuationAccountingDao.insertOperationHistoryInformationToDao(mapToOperationHistory);//将操作记录信息插入到操作记录表中
  180. }
  181. /**
  182. *
  183. * @Title: checkoutDownloadInformation
  184. * @Description: TODO(去数据库调取下载提示框的信息)
  185. * @param @param fundId
  186. * @param @return 设定文件
  187. * @return Map<String,Object> 返回类型
  188. * @author ylx
  189. * @date 2017年12月28日 下午1:59:58
  190. * @throws
  191. */
  192. public List<ValuationAccount> checkoutDownloadInformation(int fundId) {
  193. List<ValuationAccount> listToClient = valuationAccountingDao.checkoutDownloadInformation(fundId);
  194. if(listToClient==null||listToClient.isEmpty()){
  195. throw new RuntimeException("查无此信息");
  196. }
  197. return listToClient;
  198. }
  199. /**
  200. *
  201. * @Title: generateFundId
  202. * @Description: TODO(用于给前端返回一个fundId号,而且还不能和数据库中已有的id号重复)
  203. * @param @return 设定文件
  204. * @return Map<String,Object> 返回类型
  205. * @author ylx
  206. * @date 2017年12月28日 下午3:45:12
  207. * @throws
  208. */
  209. public Map<String, Object> generateFundId() {
  210. int same = 0;
  211. Integer fundId = null;
  212. //如果有重复的继续查,直到查不出重复的fundId号为止
  213. while(same > 0){
  214. fundId=(int)(Math.random()*1000000000); //=========================>>>产生基金id号的机制要改的TODO
  215. same = valuationAccountingDao.queryIfHasTheSameFundId(fundId);
  216. }
  217. Map<String, Object> mapToClient = new LinkedHashMap<String, Object>();
  218. mapToClient.put("fundId", fundId);
  219. return mapToClient;
  220. }
  221. /**
  222. *
  223. * @Title: checkIfHasTheSameFundId
  224. * @Description: TODO(验证基金id号是不是已经存在,如果已经存在直接报错)
  225. * @param @param fundId 设定文件
  226. * @return void 返回类型
  227. * @author ylx
  228. * @date 2017年12月28日 下午5:18:55
  229. * @throws
  230. */
  231. public void checkIfHasTheSameFundId(int fundId){
  232. int same = valuationAccountingDao.queryIfHasTheSameFundId(fundId);
  233. if(same >0){
  234. throw new RuntimeException("该信息已经存在");
  235. }
  236. }
  237. /**
  238. *
  239. * @Title: checkIfFundExists
  240. * @Description: TODO(验证该基金是否存在,并返回这个基金的对账结果)
  241. * @param @param fundId
  242. * @param @param fundName
  243. * @param @param 设定文件
  244. * @return void 返回类型
  245. * @author ylx
  246. * @date 2017年12月28日 下午6:22:16
  247. * @throws
  248. */
  249. public ValuationAccount checkIfFundExists(Integer fundId, String fundName) {
  250. ValuationAccount valuationAccount = valuationAccountingDao.checkIfFundExists(fundId,fundName);
  251. if(valuationAccount == null){
  252. throw new RuntimeException("该信息不存在");
  253. }
  254. return valuationAccount;
  255. }
  256. /**
  257. *
  258. * @Title: checkIfHasTheSameFundId
  259. * @Description: TODO(验证基金名是不是已经存在,如果已经存在直接报错)
  260. * @param @param fundId 设定文件
  261. * @return void 返回类型
  262. * @author ylx
  263. * @date 2017年12月28日 下午5:18:55
  264. * @throws
  265. */
  266. public void checkIfHasTheSameFundName(String fundName) {
  267. int same = valuationAccountingDao.queryIfHasTheSameFundName(fundName);
  268. if(same >0){
  269. throw new RuntimeException("该信息已经存在");
  270. }
  271. }
  272. }