OrderServiceImpl.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. package jnpf.service.impl;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import com.baomidou.dynamic.datasource.annotation.DSTransactional;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.metadata.IPage;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import com.google.common.collect.ImmutableMap;
  8. import jnpf.base.UserInfo;
  9. import jnpf.base.service.BillRuleService;
  10. import jnpf.base.service.SuperServiceImpl;
  11. import jnpf.entity.OrderEntity;
  12. import jnpf.entity.OrderEntryEntity;
  13. import jnpf.entity.OrderReceivableEntity;
  14. import jnpf.exception.DataException;
  15. import jnpf.mapper.OrderMapper;
  16. import jnpf.model.order.*;
  17. import jnpf.permission.entity.UserEntity;
  18. import jnpf.permission.service.UserService;
  19. import jnpf.service.OrderEntryService;
  20. import jnpf.service.OrderReceivableService;
  21. import jnpf.service.OrderService;
  22. import jnpf.util.*;
  23. import jnpf.workflow.service.TaskApi;
  24. import jnpf.workflow.service.TemplateApi;
  25. import org.apache.commons.lang3.StringUtils;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import org.springframework.stereotype.Service;
  28. import java.util.ArrayList;
  29. import java.util.Date;
  30. import java.util.List;
  31. import java.util.Map;
  32. /**
  33. * 订单信息
  34. *
  35. * @author JNPF开发平台组
  36. * @version V3.1.0
  37. * @copyright 引迈信息技术有限公司
  38. * @date 2021/3/15 9:19
  39. */
  40. @Service
  41. public class OrderServiceImpl extends SuperServiceImpl<OrderMapper, OrderEntity> implements OrderService {
  42. @Autowired
  43. private OrderReceivableService orderReceivableService;
  44. @Autowired
  45. private OrderEntryService orderEntryService;
  46. @Autowired
  47. private BillRuleService billRuleService;
  48. @Autowired
  49. private UserService userService;
  50. @Autowired
  51. private TemplateApi templateApi;
  52. /**
  53. * 前单
  54. **/
  55. private static String PREV = "prev";
  56. /**
  57. * 后单
  58. **/
  59. private static String NEXT = "next";
  60. @Override
  61. public List<OrderEntity> getList(PaginationOrder paginationOrder) {
  62. Map<String, String> fileMap = ImmutableMap.of("orderCode", "f_order_code", "orderDate", "f_order_date",
  63. "customerName", "f_customer_name", "salesmanName", "f_salesman_name",
  64. "receivableMoney", "f_receivable_money", "currentState", "f_current_state");
  65. paginationOrder.setSidx(fileMap.get(paginationOrder.getSidx()));
  66. UserInfo userInfo = UserProvider.getUser();
  67. QueryWrapper<OrderEntity> queryWrapper = new QueryWrapper<>();
  68. //关键字(订单编码、客户名称、业务人员)
  69. String keyWord = paginationOrder.getKeyword() != null ? paginationOrder.getKeyword() : null;
  70. if (!StringUtils.isEmpty(keyWord)) {
  71. String word = keyWord;
  72. queryWrapper.lambda().and(
  73. t -> t.like(OrderEntity::getOrderCode, word)
  74. .or().like(OrderEntity::getCustomerName, word)
  75. .or().like(OrderEntity::getSalesmanName, word)
  76. );
  77. }
  78. //起始日期-结束日期
  79. if (ObjectUtil.isNotEmpty(paginationOrder.getStartTime()) && ObjectUtil.isNotEmpty(paginationOrder.getEndTime())) {
  80. queryWrapper.lambda().between(OrderEntity::getOrderDate, new Date(paginationOrder.getStartTime()), new Date(paginationOrder.getEndTime()));
  81. }
  82. //订单状态
  83. String mark = paginationOrder.getEnabledMark();
  84. if (ObjectUtil.isNotEmpty(mark)) {
  85. queryWrapper.lambda().eq(OrderEntity::getEnabledMark, mark);
  86. }
  87. //流程数据查询
  88. if (ObjectUtil.isNotEmpty(paginationOrder.getTemplateId())) {
  89. List<String> flowIdsByTemplateId = templateApi.getFlowIdsByTemplateId(paginationOrder.getTemplateId());
  90. queryWrapper.lambda().in(OrderEntity::getFlowId, flowIdsByTemplateId);
  91. }
  92. //排序
  93. if (StringUtils.isEmpty(paginationOrder.getSidx())) {
  94. queryWrapper.lambda().orderByDesc(OrderEntity::getCreatorTime);
  95. } else {
  96. queryWrapper = "asc".equals(paginationOrder.getSort().toLowerCase()) ? queryWrapper.orderByAsc(paginationOrder.getSidx()) : queryWrapper.orderByDesc(paginationOrder.getSidx());
  97. }
  98. Page<OrderEntity> page = new Page<>(paginationOrder.getCurrentPage(), paginationOrder.getPageSize());
  99. IPage<OrderEntity> orderEntityPage = this.page(page, queryWrapper);
  100. List<OrderEntity> data = orderEntityPage.getRecords();
  101. return paginationOrder.setData(data, page.getTotal());
  102. }
  103. @Override
  104. public List<OrderEntryEntity> getOrderEntryList(String id) {
  105. QueryWrapper<OrderEntryEntity> queryWrapper = new QueryWrapper<>();
  106. queryWrapper.lambda().eq(OrderEntryEntity::getOrderId, id).orderByDesc(OrderEntryEntity::getSortCode);
  107. return orderEntryService.list(queryWrapper);
  108. }
  109. @Override
  110. public List<OrderReceivableEntity> getOrderReceivableList(String id) {
  111. QueryWrapper<OrderReceivableEntity> queryWrapper = new QueryWrapper<>();
  112. queryWrapper.lambda().eq(OrderReceivableEntity::getOrderId, id).orderByDesc(OrderReceivableEntity::getSortCode);
  113. return orderReceivableService.list(queryWrapper);
  114. }
  115. @Override
  116. public OrderEntity getPrevOrNextInfo(String id, String method) {
  117. QueryWrapper<OrderEntity> result = new QueryWrapper<>();
  118. OrderEntity orderEntity = getInfo(id);
  119. String orderBy = "desc";
  120. if (PREV.equals(method)) {
  121. result.lambda().gt(OrderEntity::getCreatorTime, orderEntity.getCreatorTime());
  122. orderBy = "";
  123. } else if (NEXT.equals(method)) {
  124. result.lambda().lt(OrderEntity::getCreatorTime, orderEntity.getCreatorTime());
  125. }
  126. result.lambda().notIn(OrderEntity::getId, orderEntity.getId());
  127. if (StringUtil.isNotEmpty(orderBy)) {
  128. result.lambda().orderByDesc(OrderEntity::getCreatorTime);
  129. }
  130. List<OrderEntity> data = this.list(result);
  131. if (data.size() > 0) {
  132. return data.get(0);
  133. }
  134. return null;
  135. }
  136. @Override
  137. public OrderInfoVO getInfoVo(String id, String method) throws DataException {
  138. OrderInfoVO infoModel = null;
  139. OrderEntity orderEntity = this.getPrevOrNextInfo(id, method);
  140. if (orderEntity != null) {
  141. List<OrderEntryEntity> orderEntryList = this.getOrderEntryList(orderEntity.getId());
  142. List<OrderReceivableEntity> orderReceivableList = this.getOrderReceivableList(orderEntity.getId());
  143. infoModel = JsonUtilEx.getJsonToBeanEx(orderEntity, OrderInfoVO.class);
  144. UserEntity createUser = null;
  145. if (StringUtil.isNotEmpty(infoModel.getCreatorUserId())) {
  146. createUser = userService.getInfo(infoModel.getCreatorUserId());
  147. }
  148. infoModel.setCreatorUserId(createUser != null ? createUser.getRealName() + "/" + createUser.getAccount() : "");
  149. UserEntity lastUser = null;
  150. if (StringUtil.isNotEmpty(infoModel.getLastModifyUserId())) {
  151. lastUser = userService.getInfo(infoModel.getLastModifyUserId());
  152. }
  153. infoModel.setLastModifyUserId(lastUser != null ? lastUser.getRealName() + "/" + lastUser.getAccount() : "");
  154. List<OrderInfoOrderEntryModel> orderEntryModels = JsonUtil.getJsonToList(orderEntryList, OrderInfoOrderEntryModel.class);
  155. infoModel.setGoodsList(orderEntryModels);
  156. List<OrderInfoOrderReceivableModel> orderReceivableModels = JsonUtil.getJsonToList(orderReceivableList, OrderInfoOrderReceivableModel.class);
  157. infoModel.setCollectionPlanList(orderReceivableModels);
  158. }
  159. return infoModel;
  160. }
  161. @Override
  162. public OrderEntity getInfo(String id) {
  163. QueryWrapper<OrderEntity> queryWrapper = new QueryWrapper<>();
  164. queryWrapper.lambda().eq(OrderEntity::getId, id);
  165. return this.getOne(queryWrapper);
  166. }
  167. @Override
  168. public void delete(OrderEntity entity) {
  169. QueryWrapper<OrderEntity> orderWrapper = new QueryWrapper<>();
  170. orderWrapper.lambda().eq(OrderEntity::getId, entity.getId());
  171. this.remove(orderWrapper);
  172. QueryWrapper<OrderEntryEntity> entryWrapper = new QueryWrapper<>();
  173. entryWrapper.lambda().eq(OrderEntryEntity::getOrderId, entity.getId());
  174. orderEntryService.remove(entryWrapper);
  175. QueryWrapper<OrderReceivableEntity> receivableWrapper = new QueryWrapper<>();
  176. receivableWrapper.lambda().eq(OrderReceivableEntity::getOrderId, entity.getId());
  177. orderReceivableService.remove(receivableWrapper);
  178. }
  179. @Override
  180. @DSTransactional
  181. public void create(OrderEntity entity, List<OrderEntryEntity> orderEntryList, List<OrderReceivableEntity> orderReceivableList) {
  182. entity.setCreatorUserId(UserProvider.getUser().getUserId());
  183. entity.setEnabledMark(1);
  184. for (int i = 0; i < orderEntryList.size(); i++) {
  185. orderEntryList.get(i).setId(RandomUtil.uuId());
  186. orderEntryList.get(i).setOrderId(entity.getId());
  187. orderEntryList.get(i).setSortCode(Long.parseLong(i + ""));
  188. orderEntryService.save(orderEntryList.get(i));
  189. }
  190. for (int i = 0; i < orderReceivableList.size(); i++) {
  191. orderReceivableList.get(i).setId(RandomUtil.uuId());
  192. orderReceivableList.get(i).setOrderId(entity.getId());
  193. orderReceivableList.get(i).setSortCode(Long.parseLong(i + ""));
  194. orderReceivableService.save(orderReceivableList.get(i));
  195. }
  196. billRuleService.useBillNumber("OrderNumber");
  197. this.save(entity);
  198. }
  199. @Override
  200. @DSTransactional
  201. public boolean update(String id, OrderEntity entity, List<OrderEntryEntity> orderEntryList, List<OrderReceivableEntity> orderReceivableList) {
  202. entity.setId(id);
  203. entity.setLastModifyTime(new Date());
  204. entity.setLastModifyUserId(UserProvider.getUser().getUserId());
  205. QueryWrapper<OrderEntryEntity> entryWrapper = new QueryWrapper<>();
  206. entryWrapper.lambda().eq(OrderEntryEntity::getOrderId, entity.getId());
  207. orderEntryService.remove(entryWrapper);
  208. QueryWrapper<OrderReceivableEntity> receivableWrapper = new QueryWrapper<>();
  209. receivableWrapper.lambda().eq(OrderReceivableEntity::getOrderId, entity.getId());
  210. orderReceivableService.remove(receivableWrapper);
  211. for (int i = 0; i < orderEntryList.size(); i++) {
  212. orderEntryList.get(i).setId(RandomUtil.uuId());
  213. orderEntryList.get(i).setOrderId(entity.getId());
  214. orderEntryList.get(i).setSortCode(Long.parseLong(i + ""));
  215. orderEntryService.save(orderEntryList.get(i));
  216. }
  217. for (int i = 0; i < orderReceivableList.size(); i++) {
  218. orderReceivableList.get(i).setId(RandomUtil.uuId());
  219. orderReceivableList.get(i).setOrderId(entity.getId());
  220. orderReceivableList.get(i).setSortCode(Long.parseLong(i + ""));
  221. orderReceivableService.save(orderReceivableList.get(i));
  222. }
  223. boolean flag = this.updateById(entity);
  224. return flag;
  225. }
  226. @Override
  227. public void data(String id, String data) {
  228. OrderForm orderForm = JsonUtil.getJsonToBean(data, OrderForm.class);
  229. OrderEntity entity = JsonUtil.getJsonToBean(orderForm, OrderEntity.class);
  230. List<OrderEntryModel> goodsList = orderForm.getGoodsList() != null ? orderForm.getGoodsList() : new ArrayList<>();
  231. List<OrderEntryEntity> orderEntryList = JsonUtil.getJsonToList(goodsList, OrderEntryEntity.class);
  232. List<OrderReceivableModel> collectionPlanList = orderForm.getCollectionPlanList() != null ? orderForm.getCollectionPlanList() : new ArrayList<>();
  233. List<OrderReceivableEntity> orderReceivableList = JsonUtil.getJsonToList(collectionPlanList, OrderReceivableEntity.class);
  234. entity.setId(id);
  235. entity.setLastModifyTime(new Date());
  236. entity.setLastModifyUserId(UserProvider.getUser().getUserId());
  237. QueryWrapper<OrderEntryEntity> entryWrapper = new QueryWrapper<>();
  238. entryWrapper.lambda().eq(OrderEntryEntity::getOrderId, entity.getId());
  239. orderEntryService.remove(entryWrapper);
  240. QueryWrapper<OrderReceivableEntity> receivableWrapper = new QueryWrapper<>();
  241. receivableWrapper.lambda().eq(OrderReceivableEntity::getOrderId, entity.getId());
  242. orderReceivableService.remove(receivableWrapper);
  243. for (int i = 0; i < orderEntryList.size(); i++) {
  244. orderEntryList.get(i).setId(RandomUtil.uuId());
  245. orderEntryList.get(i).setOrderId(entity.getId());
  246. orderEntryList.get(i).setSortCode(Long.parseLong(i + ""));
  247. orderEntryService.save(orderEntryList.get(i));
  248. }
  249. for (int i = 0; i < orderReceivableList.size(); i++) {
  250. orderReceivableList.get(i).setId(RandomUtil.uuId());
  251. orderReceivableList.get(i).setOrderId(entity.getId());
  252. orderReceivableList.get(i).setSortCode(Long.parseLong(i + ""));
  253. orderReceivableService.save(orderReceivableList.get(i));
  254. }
  255. this.saveOrUpdate(entity);
  256. }
  257. }