TWarehouseAgreementServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  1. package com.ruoyi.warehouseBusiness.service.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.ruoyi.basicData.domain.TCorps;
  6. import com.ruoyi.basicData.domain.TFees;
  7. import com.ruoyi.basicData.domain.TGoods;
  8. import com.ruoyi.basicData.mapper.TCorpsMapper;
  9. import com.ruoyi.basicData.mapper.TFeesMapper;
  10. import com.ruoyi.basicData.mapper.TGoodsMapper;
  11. import com.ruoyi.common.core.domain.AjaxResult;
  12. import com.ruoyi.common.core.domain.entity.SysUser;
  13. import com.ruoyi.common.core.domain.model.LoginUser;
  14. import com.ruoyi.common.utils.DateUtils;
  15. import com.ruoyi.common.utils.StringUtils;
  16. import com.ruoyi.system.mapper.SysDeptMapper;
  17. import com.ruoyi.warehouseBusiness.domain.BillnoDel;
  18. import com.ruoyi.warehouseBusiness.domain.TWarehouseAgreement;
  19. import com.ruoyi.warehouseBusiness.domain.TWarehouseAgreementitems;
  20. import com.ruoyi.warehouseBusiness.mapper.BillnoDelMapper;
  21. import com.ruoyi.warehouseBusiness.mapper.TWarehouseAgreementMapper;
  22. import com.ruoyi.warehouseBusiness.mapper.TWarehouseAgreementitemsMapper;
  23. import com.ruoyi.warehouseBusiness.service.ITWarehouseAgreementService;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.stereotype.Service;
  26. import java.math.BigDecimal;
  27. import java.util.*;
  28. /**
  29. * 仓储费Service业务层处理
  30. *
  31. * @author ruoyi
  32. * @date 2020-12-11
  33. */
  34. @Service
  35. public class TWarehouseAgreementServiceImpl implements ITWarehouseAgreementService {
  36. @Autowired
  37. private TWarehouseAgreementMapper tWarehouseAgreementMapper;
  38. @Autowired
  39. private TWarehouseAgreementitemsMapper tWarehouseAgreementitemsMapper;
  40. @Autowired
  41. private BillnoSerialServiceImpl billnoSerialServiceImpl;
  42. @Autowired
  43. private BillnoDelMapper billnoDelMapper;
  44. @Autowired
  45. private TCorpsMapper tCorpsMapper;
  46. @Autowired
  47. private TGoodsMapper tGoodsMapper;
  48. @Autowired
  49. private TFeesMapper tFeesMapper;
  50. @Autowired
  51. private SysDeptMapper sysDeptMapper;
  52. /**
  53. * 查询仓储费
  54. *
  55. * @param fId 仓储费ID
  56. * @return 仓储费
  57. */
  58. @Override
  59. public TWarehouseAgreement selectTWarehouseAgreementById(Long fId) {
  60. return tWarehouseAgreementMapper.selectTWarehouseAgreementById(fId);
  61. }
  62. @Override
  63. public Map<String, Object> selectTWarehouseAgreementById1(Long fId) {
  64. Map<String, Object> map = new HashMap<>();
  65. // 查询协议主表数据
  66. TWarehouseAgreement tWarehouseAgreement = tWarehouseAgreementMapper.selectTWarehouseAgreementById(fId);
  67. // 客户表
  68. List<Long> corpsId = new ArrayList<>();
  69. // 用户表
  70. List<SysUser> sysUserList = new ArrayList<>();
  71. // 商品
  72. List<Long> goodsId = new ArrayList<>();
  73. // 费用
  74. List<Long> feesId = new ArrayList<>();
  75. if (!StringUtils.isNull(tWarehouseAgreement)) {
  76. corpsId.add(tWarehouseAgreement.getfCorpid());
  77. goodsId.add(tWarehouseAgreement.getfGoodsid());
  78. map.put("tWarehouseAgreement", tWarehouseAgreement);
  79. }
  80. // 协议从表
  81. TWarehouseAgreementitems tWarehouseAgreementitems = new TWarehouseAgreementitems();
  82. tWarehouseAgreementitems.setfPid(fId);
  83. List<TWarehouseAgreementitems> tWarehouseAgreementitemss = tWarehouseAgreementitemsMapper.selectTWarehouseAgreementitemsList(tWarehouseAgreementitems);
  84. if (StringUtils.isNotEmpty(tWarehouseAgreementitemss)) {
  85. for (TWarehouseAgreementitems fees : tWarehouseAgreementitemss) {
  86. feesId.add(fees.getfFeeid());
  87. }
  88. }
  89. List<TCorps> corpsList = new ArrayList<>();
  90. List<Long> corpsIdList = StringUtils.integerDeduplication(corpsId);
  91. for (Long corpId : corpsIdList) {
  92. TCorps corps = tCorpsMapper.selectTCorpsById(corpId);
  93. if (StringUtils.isNotNull(corps)) {
  94. corpsList.add(corps);
  95. }
  96. }
  97. List<TGoods> goodsList = new ArrayList<>();
  98. List<Long> goodsIdList = StringUtils.integerDeduplication(goodsId);
  99. for (Long goods : goodsIdList) {
  100. TGoods tGoods = tGoodsMapper.selectTGoodsById(goods);
  101. if (StringUtils.isNotNull(tGoods)) {
  102. goodsList.add(tGoods);
  103. }
  104. }
  105. List<TFees> feesList = new ArrayList<>();
  106. List<Long> longList = StringUtils.integerDeduplication(feesId);
  107. for (Long fees : longList) {
  108. TFees tFees = tFeesMapper.selectTFeesById(fees);
  109. if (StringUtils.isNotNull(tFees)) {
  110. feesList.add(tFees);
  111. }
  112. }
  113. map.put("corps", corpsList);
  114. map.put("goodsList", goodsList);
  115. map.put("feesList", feesList);
  116. map.put("tWarehouseAgreementitems", tWarehouseAgreementitemss);
  117. map.put("dept", sysDeptMapper.selectDeptById(tWarehouseAgreement.getfDeptid()));
  118. return map;
  119. }
  120. /**
  121. * 查询仓储费列表
  122. *
  123. * @param tWarehouseAgreement 仓储费
  124. * @return 仓储费
  125. */
  126. @Override
  127. public List<Map<String, Object>> selectTWarehouseAgreementList1(TWarehouseAgreement tWarehouseAgreement) {
  128. return tWarehouseAgreementMapper.selectTWarehouseAgreementList1(tWarehouseAgreement);
  129. }
  130. /**
  131. * 查询仓储费列表
  132. *
  133. * @param tWarehouseAgreement 仓储费
  134. * @return 仓储费
  135. */
  136. @Override
  137. public List<TWarehouseAgreement> selectTWarehouseAgreementList(TWarehouseAgreement tWarehouseAgreement) {
  138. return tWarehouseAgreementMapper.selectTWarehouseAgreementList(tWarehouseAgreement);
  139. }
  140. /**
  141. * 新增
  142. * @param agreement
  143. * @param agreementitems
  144. * @param loginUser
  145. * @return
  146. */
  147. @Override
  148. public AjaxResult insertTWarehouseAgreement(String agreement, String agreementitems, LoginUser loginUser) {
  149. Long fPid = null;
  150. TWarehouseAgreement tWarehouseAgreement = JSONArray.parseObject(agreement, TWarehouseAgreement.class);
  151. if(StringUtils.isNull(tWarehouseAgreement.getfId())){
  152. // 如果是新数据
  153. tWarehouseAgreement.setCreateBy(loginUser.getUser().getUserName());
  154. // 业务编码
  155. String billNo = billnoSerialServiceImpl.getBillNo("WA", new Date());
  156. tWarehouseAgreement.setfBillno(billNo);
  157. tWarehouseAgreement.setCreateBy(loginUser.getUser().getUserName());
  158. tWarehouseAgreement.setfDeptid(loginUser.getUser().getDeptId());
  159. tWarehouseAgreementMapper.insertTWarehouseAgreement(tWarehouseAgreement);
  160. fPid = tWarehouseAgreement.getfId();
  161. }else{
  162. fPid = tWarehouseAgreement.getfId();
  163. tWarehouseAgreement.setUpdateBy(loginUser.getUser().getUserName());
  164. tWarehouseAgreement.setUpdateTime(new Date());
  165. tWarehouseAgreementMapper.updateTWarehouseAgreement(tWarehouseAgreement);
  166. tWarehouseAgreementitemsMapper.deleteByFPid(fPid);
  167. }
  168. // 从表添加
  169. if (StringUtils.isNotNull(agreementitems)) {
  170. JSONArray jsonDrArray = JSONArray.parseArray(agreementitems);
  171. List<TWarehouseAgreementitems> tWarehouseAgreementitemsList = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehouseAgreementitems.class);
  172. for (TWarehouseAgreementitems tWarehouseAgreementitems : tWarehouseAgreementitemsList) {
  173. tWarehouseAgreementitems.setfPid(fPid);
  174. tWarehouseAgreementitems.setCreateBy(loginUser.getUser().getUserName());
  175. tWarehouseAgreementitems.setCreateTime(new Date());
  176. tWarehouseAgreementitemsMapper.insertTWarehouseAgreementitems(tWarehouseAgreementitems);
  177. }
  178. }
  179. return AjaxResult.success();
  180. }
  181. /**
  182. * 修改仓储费
  183. *
  184. * @param tWarehouseAgreement 仓储费
  185. * @return 结果
  186. */
  187. @Override
  188. public int updateTWarehouseAgreement(TWarehouseAgreement tWarehouseAgreement) {
  189. tWarehouseAgreement.setUpdateTime(DateUtils.getNowDate());
  190. return tWarehouseAgreementMapper.updateTWarehouseAgreement(tWarehouseAgreement);
  191. }
  192. /**
  193. * 批量删除仓储费
  194. *
  195. * @param fIds 需要删除的仓储费ID
  196. * @return 结果
  197. */
  198. @Override
  199. public int deleteTWarehouseAgreementByIds(Long[] fIds) {
  200. // 取出业务编号、 放入 billno_del
  201. for(Long id:fIds){
  202. // 1、查询主表信息
  203. TWarehouseAgreement tWarehouseAgreement = tWarehouseAgreementMapper.selectTWarehouseAgreementById(id);
  204. // 2、业务编号、客存编号 放入 billno_del
  205. BillnoDel billnoDel =new BillnoDel();
  206. billnoDel.setBillType("WA");
  207. billnoDel.setBillNo(tWarehouseAgreement.getfBillno());
  208. billnoDelMapper.insertBillnoDel(billnoDel);
  209. }
  210. return tWarehouseAgreementMapper.deleteTWarehouseAgreementByIds(fIds);
  211. }
  212. /**
  213. * 删除仓储费信息
  214. *
  215. * @param fId 仓储费ID
  216. * @return 结果
  217. */
  218. @Override
  219. public int deleteTWarehouseAgreementById(Long fId) {
  220. return tWarehouseAgreementMapper.deleteTWarehouseAgreementById(fId);
  221. }
  222. /**
  223. * 计算存储费用
  224. * @author shanxin
  225. * @param fCorpid 出库客户Id
  226. * @param fGoodsid 物资类型Id
  227. * @param days 时长天数
  228. * @param feeUnitid 计价单位
  229. * @param itemNums 数量
  230. * @return
  231. */
  232. public Map<String, Object> getCarryingCost(Long fCorpid,
  233. Long fGoodsid,
  234. Long days,
  235. Long feeUnitid,
  236. Long itemNums) {
  237. Map<String, Object> map = new HashMap<>();
  238. if (null == fCorpid ||
  239. null == fGoodsid ||
  240. null == days ||
  241. null == feeUnitid ||
  242. null == itemNums) {
  243. return null;
  244. }
  245. List<TWarehouseAgreementitems> itemList =
  246. this.tWarehouseAgreementitemsMapper.getItemsBytWarehouseAgreementMsg(fCorpid,fGoodsid,feeUnitid);
  247. if (CollUtil.isEmpty(itemList)) {
  248. return null;
  249. }
  250. BigDecimal money = new BigDecimal(0);
  251. Long dayLength = 0L;
  252. Long feeId = 0L;
  253. for (TWarehouseAgreementitems tWarehouseAgreementitems : itemList) {
  254. if (days < 1) break;
  255. dayLength = tWarehouseAgreementitems.getfEndays() - tWarehouseAgreementitems.getfFromdays() + 1L;
  256. if (days >= dayLength) {
  257. feeId = tWarehouseAgreementitems.getfFeeid();
  258. money = money.add(this.getCalculate(itemNums,tWarehouseAgreementitems.getfPrice(),dayLength));
  259. days -= dayLength;
  260. } else {
  261. feeId = tWarehouseAgreementitems.getfFeeid();
  262. money = money.add(this.getCalculate(itemNums,feeUnitid,days));
  263. }
  264. }
  265. map.put("amt", money);
  266. map.put("feeId", feeId);
  267. return map;
  268. }
  269. /**
  270. * 数量 * 单价 * 天数
  271. * @param itemNums 数量
  272. * @param unitPrice 单价
  273. * @param dateLength 天数
  274. * @return
  275. */
  276. public BigDecimal getCalculate (Long itemNums,Long unitPrice,Long dateLength) {
  277. BigDecimal money = new BigDecimal(0);
  278. BigDecimal itemNumsBig = new BigDecimal(itemNums);
  279. BigDecimal unitPriceBig = new BigDecimal(unitPrice);
  280. BigDecimal bigDaysBig = new BigDecimal(dateLength);
  281. money = itemNumsBig.multiply(unitPriceBig).multiply(bigDaysBig);
  282. return money;
  283. }
  284. }