FInvoicePaymentServiceImpl.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. package com.ruoyi.warehouseBusiness.service.impl;
  2. import com.ruoyi.approvalFlow.domain.AuditItems;
  3. import com.ruoyi.approvalFlow.domain.AuditPathsLevels;
  4. import com.ruoyi.approvalFlow.mapper.AuditPathsLevelsMapper;
  5. import com.ruoyi.approvalFlow.service.impl.AuditItemsServiceImpl;
  6. import com.ruoyi.common.core.domain.AjaxResult;
  7. import com.ruoyi.common.core.domain.entity.SysUser;
  8. import com.ruoyi.common.core.text.Convert;
  9. import com.ruoyi.common.utils.DateUtils;
  10. import com.ruoyi.common.utils.SecurityUtils;
  11. import com.ruoyi.system.domain.SysPost;
  12. import com.ruoyi.system.mapper.SysPostMapper;
  13. import com.ruoyi.system.mapper.SysUserMapper;
  14. import com.ruoyi.warehouseBusiness.domain.FInvoicePayment;
  15. import com.ruoyi.warehouseBusiness.domain.FInvoicePaymentDetail;
  16. import com.ruoyi.warehouseBusiness.mapper.FInvoicePaymentDetailMapper;
  17. import com.ruoyi.warehouseBusiness.mapper.FInvoicePaymentMapper;
  18. import com.ruoyi.warehouseBusiness.mapper.TInvoiceMapper;
  19. import com.ruoyi.warehouseBusiness.service.IFInvoicePaymentService;
  20. import com.ruoyi.warehouseBusiness.vo.BankStatementsVO;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.stereotype.Service;
  23. import org.springframework.transaction.annotation.Transactional;
  24. import org.springframework.transaction.interceptor.TransactionAspectSupport;
  25. import java.math.BigDecimal;
  26. import java.text.SimpleDateFormat;
  27. import java.util.*;
  28. /**
  29. * 收费管理Service业务层处理
  30. *
  31. * @author ruoyi
  32. * @date 2023-10-19
  33. */
  34. @Service
  35. public class FInvoicePaymentServiceImpl implements IFInvoicePaymentService {
  36. @Autowired
  37. private FInvoicePaymentMapper fInvoicePaymentMapper;
  38. @Autowired
  39. private FInvoicePaymentDetailMapper fInvoicePaymentDetailMapper;
  40. @Autowired
  41. private TInvoiceMapper tInvoiceMapper;
  42. @Autowired
  43. private BillnoSerialServiceImpl billnoSerialServiceImpl;
  44. @Autowired
  45. private AuditItemsServiceImpl auditItemsService;
  46. @Autowired
  47. private AuditPathsLevelsMapper auditPathsLevelsMapper;
  48. @Autowired
  49. private SysUserMapper userMapper;
  50. @Autowired
  51. private SysPostMapper postMapper;
  52. /**
  53. * 查询收费管理
  54. *
  55. * @param id 收费管理ID
  56. * @return 收费管理
  57. */
  58. @Override
  59. public FInvoicePayment selectFInvoicePaymentById(Long id) {
  60. FInvoicePayment fInvoicePayment = fInvoicePaymentMapper.selectFInvoicePaymentById(id);
  61. List<FInvoicePaymentDetail> invoicePaymentDetailList = fInvoicePaymentDetailMapper.selectByPid(id);
  62. fInvoicePayment.setInvoicePaymentDetailList(invoicePaymentDetailList);
  63. fInvoicePayment.setSumMoneyZh(Convert.digitUppercase(fInvoicePayment.getSumMoney().doubleValue()));
  64. getUserName(fInvoicePayment);
  65. return fInvoicePayment;
  66. }
  67. /**
  68. * 获取打印数据中的人员信息
  69. * @param fInvoicePayment
  70. * @return
  71. */
  72. public void getUserName(FInvoicePayment fInvoicePayment) {
  73. // 提交人
  74. // dataMap.put("presenterName", SecurityUtils.getLoginUser().getUser().getNickName());
  75. AuditPathsLevels auditPathsLevels = new AuditPathsLevels();
  76. auditPathsLevels.setPathId(1141L);
  77. List<AuditPathsLevels> pathsLevelsList = auditPathsLevelsMapper.selectAuditPathsLevelsList(auditPathsLevels);
  78. boolean isTreasurer = true;
  79. for (AuditPathsLevels pathsLevels : pathsLevelsList) {
  80. String auditUserId = pathsLevels.getAuditUserId();
  81. if (auditUserId.contains("[")) {
  82. auditUserId = auditUserId.substring(1);
  83. }
  84. if (auditUserId.contains("]")) {
  85. auditUserId = auditUserId.substring(0, auditUserId.length() - 1);
  86. }
  87. List<String> idList = new ArrayList<>();
  88. if (auditUserId.contains(",")) {
  89. idList = Arrays.asList(auditUserId.split(","));
  90. } else {
  91. idList.add(auditUserId);
  92. }
  93. SysUser sysUser = userMapper.selectUserById(Long.valueOf(idList.get(0)));
  94. List<SysPost> sysPosts = postMapper.selectPostsByUserName(sysUser.getUserName());
  95. for (SysPost sysPost : sysPosts) {
  96. if ("fs".equals(sysPost.getPostCode())) {
  97. // 财务主管
  98. fInvoicePayment.setFirstLevelReviewerName(sysUser.getNickName());
  99. // dataMap.put("firstLevelReviewerName", sysUser.getNickName());
  100. } else if ("fm".equals(sysPost.getPostCode())) {
  101. // 财务经理
  102. // dataMap.put("secondaryReviewerName", sysUser.getNickName());
  103. fInvoicePayment.setSecondaryReviewerName(sysUser.getNickName());
  104. }
  105. }
  106. // if (isTreasurer) {
  107. // // 财务主管
  108. // dataMap.put("firstLevelReviewerName", sysUser.getNickName());
  109. // isTreasurer = false;
  110. // } else {
  111. // // 财务经理
  112. // dataMap.put("secondaryReviewerName", sysUser.getNickName());
  113. // }
  114. }
  115. }
  116. /**
  117. * 查询收费管理列表
  118. *
  119. * @param fInvoicePayment 收费管理
  120. * @return 收费管理
  121. */
  122. @Override
  123. public List<FInvoicePayment> selectFInvoicePaymentList(FInvoicePayment fInvoicePayment) {
  124. return fInvoicePaymentMapper.selectFInvoicePaymentList(fInvoicePayment);
  125. }
  126. /**
  127. * 新增收费管理
  128. *
  129. * @param fInvoicePayment 收费管理
  130. * @return 结果
  131. */
  132. @Override
  133. @Transactional
  134. public FInvoicePayment insertFInvoicePayment(FInvoicePayment fInvoicePayment) {
  135. Date nowDate = DateUtils.getNowDate();
  136. String billNo = null;
  137. if (fInvoicePayment.getType() == 1) {
  138. billNo = billnoSerialServiceImpl.getBillNo("SFGL", nowDate);
  139. } else {
  140. billNo = billnoSerialServiceImpl.getBillNo("FFGL", nowDate);
  141. }
  142. fInvoicePayment.setSysNo(billNo);
  143. fInvoicePayment.setCreateBy(SecurityUtils.getUsername());
  144. fInvoicePayment.setCreateTime(nowDate);
  145. BigDecimal sumProceeds = new BigDecimal("0");
  146. List<FInvoicePaymentDetail> invoicePaymentDetailList = fInvoicePayment.getInvoicePaymentDetailList();
  147. for (FInvoicePaymentDetail fInvoicePaymentDetail : invoicePaymentDetailList) {
  148. BigDecimal proceeds = fInvoicePaymentDetail.getProceeds();
  149. sumProceeds = sumProceeds.add(proceeds);
  150. }
  151. fInvoicePayment.setSumMoney(sumProceeds);
  152. int i = fInvoicePaymentMapper.insertFInvoicePayment(fInvoicePayment);
  153. for (FInvoicePaymentDetail fInvoicePaymentDetail : invoicePaymentDetailList) {
  154. fInvoicePaymentDetail.setPid(fInvoicePayment.getId());
  155. fInvoicePaymentDetail.setCreateBy(SecurityUtils.getUsername());
  156. fInvoicePaymentDetail.setCreateTime(nowDate);
  157. fInvoicePaymentDetail.setId(null);
  158. fInvoicePaymentDetailMapper.insertFInvoicePaymentDetail(fInvoicePaymentDetail);
  159. // tInvoiceMapper.updateProceedsById(
  160. // fInvoicePaymentDetail.getInvoiceId(),
  161. // fInvoicePaymentDetail.getProceeds(),
  162. // SecurityUtils.getUsername(),
  163. // nowDate);
  164. }
  165. return fInvoicePayment;
  166. }
  167. /**
  168. * 修改收费管理
  169. *
  170. * @param fInvoicePayment 收费管理
  171. * @return 结果
  172. */
  173. @Override
  174. @Transactional
  175. public FInvoicePayment updateFInvoicePayment(FInvoicePayment fInvoicePayment) {
  176. Date nowDate = DateUtils.getNowDate();
  177. fInvoicePayment.setUpdateBy(SecurityUtils.getUsername());
  178. fInvoicePayment.setUpdateTime(nowDate);
  179. BigDecimal sumProceeds = new BigDecimal("0");
  180. List<FInvoicePaymentDetail> invoicePaymentDetailList = fInvoicePayment.getInvoicePaymentDetailList();
  181. for (FInvoicePaymentDetail fInvoicePaymentDetail : invoicePaymentDetailList) {
  182. BigDecimal proceeds = fInvoicePaymentDetail.getProceeds();
  183. sumProceeds = sumProceeds.add(proceeds);
  184. }
  185. fInvoicePayment.setSumMoney(sumProceeds);
  186. int i = fInvoicePaymentMapper.updateFInvoicePayment(fInvoicePayment);
  187. fInvoicePaymentDetailMapper.DeleteByPid(fInvoicePayment.getId(), nowDate, SecurityUtils.getUsername());
  188. // List<FInvoicePaymentDetail> invoicePaymentDetailList = fInvoicePayment.getInvoicePaymentDetailList();
  189. for (FInvoicePaymentDetail fInvoicePaymentDetail : invoicePaymentDetailList) {
  190. fInvoicePaymentDetail.setPid(fInvoicePayment.getId());
  191. fInvoicePaymentDetail.setCreateBy(SecurityUtils.getUsername());
  192. fInvoicePaymentDetail.setCreateTime(nowDate);
  193. fInvoicePaymentDetail.setId(null);
  194. fInvoicePaymentDetailMapper.insertFInvoicePaymentDetail(fInvoicePaymentDetail);
  195. tInvoiceMapper.updateProceedsById(
  196. fInvoicePaymentDetail.getInvoiceId(),
  197. fInvoicePaymentDetail.getProceeds(),
  198. SecurityUtils.getUsername(),
  199. nowDate);
  200. }
  201. return fInvoicePayment;
  202. }
  203. /**
  204. * 批量删除收费管理
  205. *
  206. * @param ids 需要删除的收费管理ID
  207. * @return 结果
  208. */
  209. @Override
  210. @Transactional
  211. public int deleteFInvoicePaymentByIds(Long[] ids) {
  212. Date nowDate = DateUtils.getNowDate();
  213. int i = 0;
  214. for (Long id : ids) {
  215. i = fInvoicePaymentMapper.deleteByid(id, nowDate, SecurityUtils.getUsername());
  216. List<FInvoicePaymentDetail> invoicePaymentDetailList = fInvoicePaymentDetailMapper.selectByPid(id);
  217. fInvoicePaymentDetailMapper.DeleteByPid(id, nowDate, SecurityUtils.getUsername());
  218. // for (FInvoicePaymentDetail fInvoicePaymentDetail : invoicePaymentDetailList) {
  219. // tInvoiceMapper.quashProceedsById(fInvoicePaymentDetail, SecurityUtils.getUsername(), nowDate);
  220. // }
  221. }
  222. return i;
  223. }
  224. /**
  225. * 删除收费管理信息
  226. *
  227. * @param id 收费管理ID
  228. * @return 结果
  229. */
  230. @Override
  231. public int deleteFInvoicePaymentById(Long id) {
  232. return fInvoicePaymentMapper.deleteFInvoicePaymentById(id);
  233. }
  234. @Override
  235. @Transactional
  236. public AjaxResult payForIt(FInvoicePayment fInvoicePayment) {
  237. if (fInvoicePayment.getType() == 1) {
  238. Date nowDate = DateUtils.getNowDate();
  239. fInvoicePaymentMapper.payForIt(fInvoicePayment.getId(), SecurityUtils.getUsername(), nowDate, 2);
  240. List<FInvoicePaymentDetail> invoicePaymentDetailList = fInvoicePayment.getInvoicePaymentDetailList();
  241. for (FInvoicePaymentDetail fInvoicePaymentDetail : invoicePaymentDetailList) {
  242. tInvoiceMapper.updateProceedsById(
  243. fInvoicePaymentDetail.getInvoiceId(),
  244. fInvoicePaymentDetail.getProceeds(),
  245. SecurityUtils.getUsername(),
  246. nowDate);
  247. }
  248. return new AjaxResult(200, "收付费成功");
  249. }
  250. Date nowDate = DateUtils.getNowDate();
  251. fInvoicePaymentMapper.updateAuditTypeById(fInvoicePayment.getId(), 2, SecurityUtils.getUsername(), nowDate);
  252. if (fInvoicePayment.getType() == 2) {
  253. // 提交审批流
  254. AuditItems auditItems = new AuditItems();
  255. auditItems.setLevelId(0L);
  256. // 业务id
  257. auditItems.setBillId(fInvoicePayment.getId());
  258. // 活动号
  259. auditItems.setActId(580L);
  260. auditItems.setIffinalItem("F");
  261. // 业务编号
  262. auditItems.setBillNo(fInvoicePayment.getSysNo());
  263. // 存储委托方(货权方)
  264. // auditItems.setRefno1(tFee.getfCorpid() + "");
  265. // 存储业务类型(业务类型)
  266. auditItems.setRefno2("FFGL");
  267. // 存储提单号(提单号)
  268. // auditItems.setRefno3(tFee.getfBillno());
  269. auditItems.setSendUserId(SecurityUtils.getLoginUser().getUser().getUserId());
  270. auditItems.setSendName(SecurityUtils.getUsername());
  271. auditItems.setSendTime(new Date());
  272. auditItems.setAuditUserId(SecurityUtils.getLoginUser().getUser().getUserId());
  273. auditItems.setAuditItem(new Date());
  274. auditItems.setAuditOpTime(new Date());
  275. auditItems.setAuditMsg("提交");
  276. auditItems.setAuditStatus("O");
  277. AjaxResult approvalFlow = auditItemsService.createApprovalFlow(auditItems);
  278. String code = approvalFlow.get("code").toString();
  279. if ("500".equals(code)) {
  280. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  281. }
  282. }
  283. return new AjaxResult(200, "收付费成功");
  284. }
  285. @Override
  286. @Transactional
  287. public AjaxResult quashPayForIt(FInvoicePayment fInvoicePayment) {
  288. Date nowDate = DateUtils.getNowDate();
  289. fInvoicePaymentMapper.quashPayForIt(fInvoicePayment.getId(), SecurityUtils.getUsername(), nowDate);
  290. List<FInvoicePaymentDetail> invoicePaymentDetailList = fInvoicePayment.getInvoicePaymentDetailList();
  291. for (FInvoicePaymentDetail fInvoicePaymentDetail : invoicePaymentDetailList) {
  292. tInvoiceMapper.quashProceedsById(fInvoicePaymentDetail, SecurityUtils.getUsername(), nowDate);
  293. }
  294. return new AjaxResult(200, "撤销收付费成功");
  295. }
  296. @Override
  297. public List<BankStatementsVO> bankStatements(BankStatementsVO bankStatementsVO) {
  298. BigDecimal initialAmount = new BigDecimal("0");
  299. BigDecimal balance = initialAmount;
  300. List<BankStatementsVO> bankStatementsVOList = fInvoicePaymentMapper.bankStatements(bankStatementsVO);
  301. String no = "";
  302. for (BankStatementsVO statementsVO : bankStatementsVOList) {
  303. // 如果传入日期查询初期金额
  304. SimpleDateFormat customFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  305. statementsVO.setDateString(customFormat.format(statementsVO.getDate()));
  306. BigDecimal amountCharged = fInvoicePaymentMapper.getInitialAmountByType(statementsVO.getDateString(), 1, statementsVO.getCdbNo());
  307. BigDecimal amountPaid = fInvoicePaymentMapper.getInitialAmountByType(statementsVO.getDateString(), 2, statementsVO.getCdbNo());
  308. BigDecimal amountPaids = fInvoicePaymentMapper.getInitialAmountPay(statementsVO.getDateString(), statementsVO.getCdbNo());
  309. if (amountCharged == null) {
  310. amountCharged = new BigDecimal("0");
  311. }
  312. if (amountPaid == null) {
  313. amountPaid = new BigDecimal("0");
  314. }
  315. if (amountPaids == null) {
  316. amountPaids = new BigDecimal("0");
  317. }
  318. amountPaid = amountPaid.add(amountPaids);
  319. initialAmount = amountCharged.subtract(amountPaid);
  320. // 计算当前余额
  321. if (statementsVO.getRevenue() != null) {
  322. statementsVO.setBalance(initialAmount.add(statementsVO.getRevenue()));
  323. } else if (statementsVO.getExpenditures() != null) {
  324. statementsVO.setBalance(initialAmount.subtract(statementsVO.getExpenditures()));
  325. }
  326. // 初期
  327. String forNo = statementsVO.getCdbNo();
  328. String cdbNo = statementsVO.getCdbNo();
  329. if (forNo == null) {
  330. forNo = "";
  331. }
  332. if (cdbNo == null) {
  333. cdbNo = "";
  334. }
  335. if(!forNo.equals(cdbNo)) {
  336. balance = initialAmount;
  337. }
  338. statementsVO.setTheStartingAmount(balance);
  339. }
  340. return bankStatementsVOList;
  341. }
  342. @Override
  343. public int confirmPrinting(Map<String, String> fInvoicePayment) {
  344. String id = fInvoicePayment.get("id");
  345. Long ids = Long.valueOf(id);
  346. String printDate = fInvoicePayment.get("printTime");
  347. return fInvoicePaymentMapper.confirmPrinting(ids, printDate);
  348. }
  349. }