ContractOrderService.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. package com.caimei.modules.bulkpurchase.service;
  2. import com.caimei.modules.bulkpurchase.dao.*;
  3. import com.caimei.modules.bulkpurchase.entity.*;
  4. import com.caimei.utils.MathUtil;
  5. import com.google.common.collect.Lists;
  6. import com.thinkgem.jeesite.common.persistence.Page;
  7. import com.thinkgem.jeesite.common.service.CrudService;
  8. import com.thinkgem.jeesite.common.utils.DateUtils;
  9. import com.thinkgem.jeesite.common.utils.StringUtils;
  10. import com.thinkgem.jeesite.modules.sys.utils.UserUtils;
  11. import org.apache.commons.collections.CollectionUtils;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.stereotype.Service;
  14. import org.springframework.transaction.annotation.Transactional;
  15. import java.math.BigDecimal;
  16. import java.util.Date;
  17. import java.util.List;
  18. /**
  19. * 采购订单Service
  20. *
  21. * @author jiangjunwen
  22. * @version 2017-04-07
  23. */
  24. @Service
  25. @Transactional(readOnly = true)
  26. public class ContractOrderService extends CrudService<ContractOrderDao, ContractOrder> {
  27. @Autowired
  28. private ContractOrderDao contractOrderDao;
  29. @Autowired
  30. private BpOrderUserinfoService bpOrderUserinfoService;
  31. @Autowired
  32. private OrderInvoiceService orderInvoiceService;
  33. @Autowired
  34. private OrderProductDao orderProductDao;
  35. @Autowired
  36. private ContractDao contractDao;
  37. @Autowired
  38. private OrderStagesDao orderStagesDao;
  39. @Autowired
  40. private OrderStagesProductDao orderStagesProductDao;
  41. @Autowired
  42. private BpOrderStagesShopDao orderStagesShopDao;
  43. @Autowired
  44. private BpClauseService bpClauseService;
  45. public ContractOrder get(String id) {
  46. ContractOrder contractOrder = super.get(id);
  47. if(null !=contractOrder){
  48. //获取订单客户
  49. BpOrderUserinfo bpOrderUserinfo = bpOrderUserinfoService.getWithorderId(contractOrder.getId());
  50. if (null != bpOrderUserinfo) {
  51. contractOrder.setBpOrderUserinfo(bpOrderUserinfo);
  52. }
  53. //获取订单商品
  54. List<OrderProduct> list = orderProductDao.getWithorderId(contractOrder.getId());
  55. if (CollectionUtils.isNotEmpty(list)) {
  56. contractOrder.setOrderProduct(list);
  57. }
  58. //获取订单发票
  59. OrderInvoice orderInvoice = orderInvoiceService.getWithorderId(contractOrder.getId());
  60. if (null != orderInvoice) {
  61. contractOrder.setOrderInvoice(orderInvoice);
  62. }
  63. String contractId = contractOrder.getContractId();
  64. if(StringUtils.isNotEmpty(contractId)){
  65. //获取采购基本信息(针对V1.2.0之前版本存在合同订单)
  66. Contract contract = contractDao.get(contractId);
  67. contractOrder.setContract(contract);
  68. }
  69. if(StringUtils.equals(contractOrder.getStagesFlag(),"1")){
  70. OrderStages orderStages=new OrderStages();
  71. orderStages.setOrderId(Long.parseLong(contractOrder.getId()));
  72. List<OrderStages> orderStagesList = orderStagesDao.findList(orderStages);
  73. if(CollectionUtils.isNotEmpty(orderStagesList)){
  74. for (OrderStages o:orderStagesList) {
  75. List<OrderStagesProduct> stagesProductBuyStagesId = orderStagesProductDao.findStagesProductBuyStagesId(o.getId());
  76. o.setOrderStagesProductList(stagesProductBuyStagesId);
  77. //获取分期订单-应付供应商列表
  78. BpOrderStagesShop orderStagesShop = new BpOrderStagesShop();
  79. orderStagesShop.setStagesId(Integer.parseInt(o.getId()));
  80. List<BpOrderStagesShop> orderStagesShops = Lists.newArrayList();
  81. orderStagesShops = orderStagesShopDao.findList(orderStagesShop);
  82. if (CollectionUtils.isEmpty(orderStagesShops)){
  83. //如果是之前的订单 通过订单商品获取应付供应商列表
  84. List<OrderProduct> productList = orderProductDao.getWithorderIdGroupByShopId(contractOrder.getId());
  85. if (CollectionUtils.isNotEmpty(productList)){
  86. BpOrderStagesShop orderStagesShop1 = new BpOrderStagesShop();
  87. for (OrderProduct orderProduct : productList){
  88. orderStagesShop1.setShopId(orderProduct.getShopId().intValue());
  89. orderStagesShop1.setShopFee(new BigDecimal(0.00));
  90. orderStagesShop1.setShopName(orderProduct.getShopName());
  91. orderStagesShops.add(orderStagesShop1);
  92. }
  93. }
  94. }
  95. o.setOrderStagesShopList(orderStagesShops);
  96. }
  97. contractOrder.setOrderStages(orderStagesList);
  98. }
  99. }
  100. }
  101. return contractOrder;
  102. }
  103. public List<ContractOrder> findList(ContractOrder contractOrder) {
  104. return super.findList(contractOrder);
  105. }
  106. public Page<ContractOrder> findPage(Page<ContractOrder> page, ContractOrder contractOrder) {
  107. return super.findPage(page, contractOrder);
  108. }
  109. @Transactional(readOnly = false)
  110. public void save(ContractOrder contractOrder) {
  111. boolean flag=false;//是否新增标志
  112. if(StringUtils.isEmpty(contractOrder.getId())){
  113. flag=true;
  114. }
  115. //增加快照条款内容
  116. Long clauseId = contractOrder.getClauseId();
  117. String clauseContent = contractOrder.getClauseContent();
  118. BpClause bpClause = bpClauseService.get(String.valueOf(clauseId));
  119. if(StringUtils.isEmpty(clauseContent) && null != bpClause){//第一次保存数据则按照条款表设置,后面再保存可能存在修改过快照,此时存在条款内容不允许修改
  120. contractOrder.setClauseName(bpClause.getName());
  121. contractOrder.setClauseContent(bpClause.getContent());
  122. }
  123. if(StringUtils.isEmpty(contractOrder.getPayWay()))contractOrder.setPayWay("0");
  124. contractOrder.setClubId(contractOrder.getBpOrderUserinfo().getClubId());
  125. if(StringUtils.isEmpty(contractOrder.getDiscount())){//设置折扣
  126. contractOrder.setDiscount("0");
  127. }
  128. if(StringUtils.isEmpty(contractOrder.getBalancePayFee())){//设置余额
  129. contractOrder.setBalancePayFee(0+"");
  130. }
  131. if("".equals(contractOrder.getContractId()))contractOrder.setContractId(null);
  132. if(!StringUtils.equals("1",contractOrder.getConfirmFlag())){
  133. contractOrder.setConfirmFlag("0");
  134. }
  135. // super.save(contractOrder);
  136. if (contractOrder.getIsNewRecord()){
  137. contractOrderDao.insert(contractOrder);
  138. }else{
  139. contractOrderDao.update(contractOrder);
  140. }
  141. //订单客户
  142. BpOrderUserinfo bpOrderUserinfo = contractOrder.getBpOrderUserinfo();
  143. //发票信息
  144. OrderInvoice orderInvoice = contractOrder.getOrderInvoice();
  145. if(flag){//新增
  146. bpOrderUserinfo.setOrderId(Long.parseLong(contractOrder.getId()));
  147. }
  148. if(null != orderInvoice){
  149. orderInvoice.setOrderId(Long.parseLong(contractOrder.getId()));
  150. orderInvoice.setInvoiceType("普通发票");
  151. orderInvoice.setInvoiceContent("明细");
  152. orderInvoiceService.save(orderInvoice);
  153. }
  154. bpOrderUserinfoService.saveWithcity(bpOrderUserinfo);
  155. //采购中选中保存的订单商品
  156. List<OrderProduct> orderProducts = contractOrder.getOrderProduct();
  157. //数据库中的订单商品
  158. OrderProduct orderProduct=new OrderProduct();
  159. orderProduct.setOrderId(Long.parseLong(contractOrder.getId()));
  160. List<OrderProduct> dbOrderProducts= orderProductDao.findAllList(orderProduct);
  161. if(!flag && null==contractOrder.getContractId()){//直接添加订单,修改订单的时候
  162. orderProductDao.deleteByOrderId(contractOrder.getId());
  163. for (OrderProduct product : orderProducts) {
  164. product.setOrderId(Long.parseLong(contractOrder.getId()));
  165. orderProductDao.insert(product);
  166. }
  167. }else {
  168. // 重新保存逻辑
  169. if (CollectionUtils.isNotEmpty(orderProducts)) {
  170. for (OrderProduct product : orderProducts) {
  171. if (StringUtils.isEmpty(product.getId())) {//新增:表单订单商品ID为空
  172. product.setOrderId(Long.parseLong(contractOrder.getId()));
  173. orderProductDao.insert(product);
  174. } else {//修改:表单所有ID不为空的修改
  175. if (CollectionUtils.isNotEmpty(dbOrderProducts)) {
  176. for (OrderProduct dbProduct : dbOrderProducts) {
  177. if (StringUtils.equals(dbProduct.getId(), product.getId())) {
  178. product.setOrderId(Long.parseLong(contractOrder.getId()));
  179. orderProductDao.update(product);
  180. }
  181. }
  182. }
  183. }
  184. }
  185. }
  186. //删除
  187. if (CollectionUtils.isNotEmpty(orderProducts)) {
  188. for (OrderProduct dbProduct : dbOrderProducts) {
  189. boolean b = true;//删除
  190. for (OrderProduct product : orderProducts) {
  191. if (StringUtils.equals(dbProduct.getId(), product.getId())) {
  192. b = false;//不删除
  193. }
  194. }
  195. //删除:数据库有,表单没有的
  196. if (b) {
  197. dbProduct.setDelFlag(DateUtils.formatDate(new Date(), "yyyyMMddHHmmssSSSS"));
  198. orderProductDao.delete(dbProduct);
  199. }
  200. }
  201. }
  202. }
  203. //分期信息处理
  204. //先删除分期相关信息
  205. orderStagesDao.deleteByOrderId(contractOrder.getId());
  206. orderStagesProductDao.deleteByOrderId(contractOrder.getId());
  207. orderStagesShopDao.deleteByOrderId(contractOrder.getId());
  208. if(StringUtils.equals("1",contractOrder.getStagesFlag())){//新增分期信息
  209. List<OrderStages> orderStages=contractOrder.getOrderStages();
  210. int index=1;
  211. for (OrderStages orderStage:orderStages) {
  212. orderStage.setOrderId(Long.parseLong(contractOrder.getId()));
  213. orderStage.setNum(index);
  214. orderStage.setUpdateDate(new Date());
  215. orderStage.setServiceProviderId(contractOrder.getSpId());
  216. orderStage.setClubId(contractOrder.getClubId());
  217. orderStage.setClauseId(contractOrder.getClauseId());
  218. logger.info("应付采美:"+orderStage.getCmFee());
  219. logger.info("应付三方:"+orderStage.getOtherFee());
  220. BigDecimal shopFee = new BigDecimal(0);//该期总应付供应商
  221. if(CollectionUtils.isNotEmpty(orderStage.getOrderStagesShopList())){
  222. for (BpOrderStagesShop orderStagesShop:orderStage.getOrderStagesShopList()) {
  223. shopFee = MathUtil.add(shopFee,orderStagesShop.getShopFee());
  224. }
  225. }
  226. orderStage.setShopFee(shopFee);
  227. orderStagesDao.insert(orderStage);
  228. if(CollectionUtils.isNotEmpty(orderStage.getOrderStagesProductList())){
  229. for (OrderStagesProduct orderStagesProduct:orderStage.getOrderStagesProductList()) {
  230. orderStagesProduct.setOrderId(Long.parseLong(contractOrder.getId()));
  231. orderStagesProduct.setStagesId(Long.parseLong(orderStage.getId()));
  232. orderStagesProduct.setStagesNum(index);
  233. orderStagesProductDao.insert(orderStagesProduct);
  234. }
  235. }
  236. //添加应付供应商信息
  237. if(CollectionUtils.isNotEmpty(orderStage.getOrderStagesShopList())){
  238. for (BpOrderStagesShop orderStagesShop:orderStage.getOrderStagesShopList()) {
  239. orderStagesShop.setOrderId(Integer.parseInt(contractOrder.getId()));
  240. orderStagesShop.setStagesId(Integer.parseInt(orderStage.getId()));
  241. orderStagesShop.setStagesNum(index);
  242. orderStagesShop.setAddTime(new Date());
  243. orderStagesShop.setUpdateBy(UserUtils.getUser());
  244. orderStagesShop.setUpdateDate(new Date());
  245. orderStagesShop.setCreateBy(UserUtils.getUser());
  246. orderStagesShop.setCreateDate(new Date());
  247. logger.info("应付供应商:"+orderStagesShop.getShopFee());
  248. orderStagesShopDao.insert(orderStagesShop);
  249. }
  250. }
  251. index++;
  252. }
  253. }
  254. }
  255. @Transactional(readOnly = false)
  256. public void saveConfirmFlag(ContractOrder contractOrder) {
  257. contractOrderDao.saveConfirmFlag(contractOrder);
  258. }
  259. @Transactional(readOnly = false)
  260. public void updateOrderStatus(String orderId,String orderStatus) {
  261. contractOrderDao.updateOrderStatus(orderId,orderStatus);
  262. }
  263. @Transactional(readOnly = false)
  264. public void updateOrderStatusInfo(ContractOrder contractOrder) {
  265. contractOrderDao.updateOrderStatusInfo(contractOrder);
  266. }
  267. @Transactional(readOnly = false)
  268. public void saveOrderStatusFlag(ContractOrder contractOrder) {
  269. contractOrderDao.saveOrderStatusFlag(contractOrder);
  270. }
  271. @Transactional(readOnly = false)
  272. public void updateClauseContent(ContractOrder contractOrder) {
  273. contractOrderDao.updateClauseContent(contractOrder);
  274. }
  275. @Transactional(readOnly = false)
  276. public void delete(ContractOrder contractOrder) {
  277. super.delete(contractOrder);
  278. }
  279. public List<ContractOrder> findAllList( ContractOrder contractOrder) {
  280. List<ContractOrder> list= contractOrderDao.findAllPage(contractOrder);
  281. return list;
  282. }
  283. public Integer findCountList(String contractId) {
  284. return contractOrderDao.findCountList(contractId);
  285. }
  286. public Integer findCompleteList(String contractId) {
  287. return contractOrderDao.findCompleteList(contractId);
  288. }
  289. @Transactional(readOnly = false)
  290. public void saveOrderStopInfo(ContractOrder contractOrder) {
  291. contractOrderDao.saveOrderStopInfo(contractOrder);
  292. }
  293. public Integer getInfo(String qitaId) {
  294. return contractOrderDao.findCountList(qitaId);
  295. }
  296. }