OrderServiceImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. package com.caimei.service.order.impl;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.caimei.entity.*;
  4. import com.caimei.mapper.order.OrderMapper;
  5. import com.caimei.mapper.products.OrganizeProductsMapper;
  6. import com.caimei.mapper.user.LoginMapper;
  7. import com.caimei.mapper.user.PersonalMapper;
  8. import com.caimei.mapper.user.UserMapper;
  9. import com.caimei.service.order.OrderService;
  10. import com.caimei.utils.AppUtils;
  11. import com.caimei.utils.NoUtils;
  12. import org.apache.commons.lang3.RandomStringUtils;
  13. import org.apache.commons.lang3.StringUtils;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.beans.factory.annotation.Value;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.util.CollectionUtils;
  18. import java.text.SimpleDateFormat;
  19. import java.util.*;
  20. @Service
  21. public class OrderServiceImpl implements OrderService {
  22. @Autowired
  23. private OrderMapper orderMapper;
  24. @Autowired
  25. private PersonalMapper personalMapper;
  26. @Autowired
  27. private LoginMapper loginMapper;
  28. @Autowired
  29. private UserMapper userMapper;
  30. @Autowired
  31. private OrganizeProductsMapper organizeProductsMapper;
  32. @Value("${miniprogram.domain}")
  33. private String domain;
  34. @Override
  35. public Map<String, Object> confirmOrder(Integer userId, String classifyIDS, Integer organizeID, String productIDs, Integer count) {
  36. Map<String, Object> map = new HashMap();
  37. //商品信息
  38. List<String> list = new ArrayList();
  39. if (productIDs.contains(",")) {
  40. String[] split = productIDs.split(",");
  41. list = Arrays.asList(split);
  42. } else {
  43. list.add(productIDs);
  44. }
  45. List<Shop> shopList = orderMapper.findShop(list);
  46. for (Shop shop : shopList) {
  47. List<CmOrganizeProducts> productsList = new ArrayList();
  48. Double totalPrice = 0d;
  49. if (count == null) {
  50. //购物车购买
  51. Map<String, Object> params = new HashMap();
  52. params.put("productIDs", list);
  53. params.put("shopID", shop.getShopID());
  54. params.put("userId", userId);
  55. productsList = orderMapper.findAllCommodity(params);
  56. for (CmOrganizeProducts products : productsList) {
  57. products.setMainImage(AppUtils.getImageURL("product", products.getMainImage(), 0, domain));
  58. totalPrice += products.getRetailPrice() * products.getProductCount();
  59. }
  60. } else {
  61. //立即购买
  62. CmOrganizeProducts products = orderMapper.findCommodity(productIDs, shop.getShopID());
  63. products.setMainImage(AppUtils.getImageURL("product", products.getMainImage(), 0, domain));
  64. products.setProductCount(count);
  65. totalPrice = products.getRetailPrice() * products.getProductCount();
  66. productsList.add(products);
  67. }
  68. shop.setLogo(AppUtils.getImageURL("shopLogo", shop.getLogo(), 0, domain));
  69. shop.setTotalPrice(totalPrice);
  70. shop.setProductsList(productsList);
  71. }
  72. //发票信息
  73. UserInvoiceInfo invoice = personalMapper.findInvoice(userId);
  74. //运费
  75. FreePostageCard freePostageCard = orderMapper.queryFree(userId);
  76. String freight = "";
  77. if (freePostageCard != null && classifyIDS.contains("3")) {
  78. freight = "仪器到付,产品包邮";
  79. } else if (freePostageCard != null) {
  80. freight = "包邮";
  81. } else {
  82. freight = "到付";
  83. }
  84. //客服热线号码
  85. String cellPhone = loginMapper.cellPhone(organizeID);
  86. //可用余额
  87. Double userMoney = personalMapper.ableUserMoney(userId);
  88. if (userMoney == null) userMoney = 0d;
  89. map.put("shopList", shopList);
  90. map.put("invoice", invoice);
  91. map.put("freight", freight);
  92. map.put("cellPhone", cellPhone);
  93. map.put("userMoney", userMoney);
  94. return map;
  95. }
  96. @Override
  97. public String shareOrder(Integer orderID) {
  98. OrderShareCode orderShareCode = orderMapper.queryCode(orderID);
  99. //生成分享码
  100. String shareCode = RandomStringUtils.random(4, false, true);
  101. //过期时间
  102. Calendar calendar = Calendar.getInstance();
  103. calendar.setTime(new Date());
  104. calendar.add(Calendar.DATE, 1);
  105. if (orderShareCode != null && orderShareCode.getExpiredTime().compareTo(new Date()) == 1) {
  106. return orderShareCode.getShareCode();
  107. } else if (orderShareCode != null) {
  108. orderShareCode.setShareCode(shareCode);
  109. orderShareCode.setExpiredTime(calendar.getTime());
  110. orderShareCode.setDelFlag("0");
  111. orderMapper.updateCode(orderShareCode);
  112. return String.valueOf(shareCode);
  113. } else {
  114. OrderShareCode code = new OrderShareCode();
  115. code.setOrderID(orderID);
  116. code.setShareCode(shareCode);
  117. code.setExpiredTime(calendar.getTime());
  118. code.setAddTime(new Date());
  119. code.setDelFlag("0");
  120. orderMapper.insertCode(code);
  121. return String.valueOf(shareCode);
  122. }
  123. }
  124. @Override
  125. public WxJsonModel verifyShareCode(String shareCode, String openid, Integer orderID) {
  126. CmMallShareCodeRecord shareCodeRecord = orderMapper.findShareCodeRecord(openid, orderID);
  127. return null;
  128. }
  129. @Override
  130. public Map<String, Object> particulars(Integer orderID) {
  131. Map<String, Object> map = new HashMap();
  132. //收货地址
  133. BpOrderUserInfo userInfo = orderMapper.findUserInfo(orderID);
  134. //订单信息,运费
  135. CmOrder order = orderMapper.findOrder(orderID);
  136. order.setOrderMark("#" + order.getOrderID() + "#");
  137. //商品信息
  138. String[] ShopOrderIDs = {};
  139. if (order.getShopOrderIDs().contains(",")) {
  140. ShopOrderIDs = order.getShopOrderIDs().split(",");
  141. } else {
  142. ShopOrderIDs = new String[]{order.getShopOrderIDs()};
  143. }
  144. List<CmShopOrder> shopOrderList = orderMapper.findAllShopOrder(ShopOrderIDs);
  145. for (CmShopOrder shopOrder : shopOrderList) {
  146. List<CmOrderProduct> orderProductList = orderMapper.findOrderProduct(shopOrder.getShopOrderID());
  147. for (CmOrderProduct orderProduct : orderProductList) {
  148. orderProduct.setProductImage(AppUtils.getImageURL("product", orderProduct.getProductImage(), 0, domain));
  149. }
  150. shopOrder.setCmOrderProducts(orderProductList);
  151. shopOrder.setShopLogo(AppUtils.getImageURL("shopLogo", shopOrder.getShopLogo(), 0, domain));
  152. }
  153. //发票信息
  154. UserInvoiceInfo invoice = personalMapper.findInvoice(order.getUserID());
  155. //支付记录
  156. List<CmDiscernReceipt> discernReceiptList = orderMapper.findDiscernReceipt(orderID);
  157. //退款记录
  158. List<CmReturnedPurchase> returnedPurchaseList = orderMapper.findReturnedPurchase(orderID);
  159. map.put("order", order);
  160. map.put("userInfo", userInfo);
  161. map.put("shopOrderList", shopOrderList);
  162. map.put("invoice", invoice);
  163. map.put("discernReceiptList", discernReceiptList);
  164. map.put("returnedPurchaseList", returnedPurchaseList);
  165. return map;
  166. }
  167. @Override
  168. public WxJsonModel saveOrderInfo(WxJsonModel wxJsonModel, Integer userId, Integer organizeID, String cartType, Integer addressID, Object orderInfo, String balanceDeductionFlag, Double orderShouldPayFee, Integer cmOperationID) {
  169. //查询用户信息
  170. User user = userMapper.findUserById(userId);
  171. if (null == user) {
  172. return wxJsonModel.error("1000", "用户账户异常");
  173. }
  174. Integer clubID = user.getClubID();
  175. Date date = new Date();
  176. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  177. String dateStr = sdf.format(date);
  178. //订单信息转化
  179. List<Map<String, Object>> orderInfoList = (List<Map<String, Object>>) orderInfo;
  180. if (null != orderInfoList) {
  181. Integer productCount = 0;//统计购买所有商品的数量
  182. double productTotalFee = 0d;//商品总金额 (商品单价乘以数量,再加上税费[默认0])
  183. //double orderTotalFee = 0d;//小计金额 (商品折后单价乘以数量,再加上税费[默认0])商城下单和商品总金额一样
  184. double payTotalFee = 0d;//订单总额(小计金额减去经理折扣后,再加上运费[默认0])
  185. double payableAmount = 0d;//真实支付金额(订单总额减去抵扣的账户余额)
  186. for (Map<String, Object> shopOrderInfo : orderInfoList) {//遍历订单商品信息
  187. String shopId = (String) shopOrderInfo.get("shopId");
  188. String note = (String) shopOrderInfo.get("note");
  189. Object productInfo = shopOrderInfo.get("productInfo");//一个子订单对应的商品信息
  190. if (StringUtils.isEmpty(shopId)) return wxJsonModel.error("1001", "供应商数据异常");
  191. if (null == productInfo) return wxJsonModel.error("1001", "订单商品数据异常");
  192. //获取子订单商品信息
  193. List<Map<String, Object>> productInfoList = (List<Map<String, Object>>) productInfo;
  194. if (!CollectionUtils.isEmpty(productInfoList)) {
  195. for (Map<String, Object> product : productInfoList) {//遍历所有商品
  196. Integer productId = (Integer) product.get("productId");
  197. Integer productNum = (Integer) product.get("productNum");
  198. //统计商品总数量
  199. productCount += productCount;
  200. //获取商品信息
  201. CmOrganizeProducts cmOrganizeProducts = organizeProductsMapper.selectProductById(productId);
  202. if (null == cmOrganizeProducts) return wxJsonModel.error("1001", "订单商品数据异常");
  203. if (null == productNum || productNum == 0) return wxJsonModel.error("1001", "商品购买数量异常");
  204. Double retailPrice = cmOrganizeProducts.getRetailPrice();//售价
  205. double productFee = retailPrice * productNum;//单个商品的金额
  206. //统计商品总金额
  207. productTotalFee += productFee;
  208. }
  209. }
  210. }
  211. payTotalFee = productTotalFee;
  212. //初始化主订单参数
  213. CmOrder cmOrder = new CmOrder();
  214. cmOrder.setOrderNo(NoUtils.getCmOrderNo("X"));
  215. cmOrder.setOrganizeID(organizeID);
  216. cmOrder.setUserID(userId);
  217. cmOrder.setBuyUserID(cmOperationID);//操作者的ID(下单人)
  218. cmOrder.setOrderSubmitType(2);// 2:员工帮会所下单
  219. cmOrder.setOrderType(null);//小程序
  220. cmOrder.setHasActProduct("0");
  221. cmOrder.setSendOutStatus("1");//待发货
  222. cmOrder.setProductTotalFee(productTotalFee);
  223. cmOrder.setOrderTotalFee(productTotalFee);
  224. cmOrder.setPayTotalFee(payTotalFee);
  225. cmOrder.setPreferential(0d);
  226. cmOrder.setDiscountFee(0d);//经理折扣
  227. cmOrder.setSpID(null);
  228. cmOrder.setMainSpID(null);
  229. cmOrder.setClubID(clubID);
  230. cmOrder.setOrderSource("6");//小程序
  231. cmOrder.setConfirmTime(dateStr);
  232. cmOrder.setOrderTime(dateStr);
  233. cmOrder.setProductCount(productCount);
  234. cmOrder.setPresentCount(0);
  235. cmOrder.setConfirmFlag("1");
  236. cmOrder.setClauseID(1);
  237. cmOrder.setClauseContent(null);
  238. cmOrder.setClauseName(null);
  239. cmOrder.setUpdateDate(dateStr);
  240. cmOrder.setDelFlag("0");
  241. cmOrder.setSplitFlag("0");//0不可拆分
  242. cmOrder.setPostageOrderFlag("0");//0不是邮费订单
  243. cmOrder.setShopOrderIDs("");//暂无类型
  244. cmOrder.setStatus(0);
  245. cmOrder.setReceiptStatus("");//(收款买家)收款状态:1待收款、2部分收款、3已收款
  246. cmOrder.setPayWay("");//(付款供应商)付款状态:1待付款、2部分付款、3已付款
  247. cmOrder.setPayFlag("");//是否已支付 未支付0 已支付1
  248. cmOrder.setOnlinePayFlag("0");//是否能走线上支付 0可以 1不可以 只能线下
  249. cmOrder.setBalancePayFee(0d);//余额支付金额
  250. cmOrder.setPayTime(dateStr);//支付时间
  251. cmOrder.setInvoiceFlag("");//是否开发票 没开发票0 /开个人发票1 /开企业发票2
  252. cmOrder.setFreePostFlag("");//免邮标志 运费:-1到付,0包邮,1需要运费,-2仪器到付其它包邮
  253. //保存子订单
  254. //保存订单商品
  255. //获取用户最新余额,判断是否存在
  256. //提交订单完成后清理购物车(用户ID,商品ID)
  257. if (StringUtils.equals("1", cartType)) {//购物车提交后清理购物车
  258. }
  259. }
  260. return wxJsonModel.success();
  261. }
  262. @Override
  263. public Map<String, Object> logistics(Integer orderID) {
  264. Map<String, Object> map = new HashMap();
  265. //物流商品信息
  266. CmOrder order = orderMapper.findOrder(orderID);
  267. String[] ShopOrderIDs = {};
  268. if (order.getShopOrderIDs().contains(",")) {
  269. ShopOrderIDs = order.getShopOrderIDs().split(",");
  270. } else {
  271. ShopOrderIDs = new String[]{order.getShopOrderIDs()};
  272. }
  273. List<CmShopOrder> shopOrderList = orderMapper.findAllShopOrder(ShopOrderIDs);
  274. for (CmShopOrder shopOrder : shopOrderList) {
  275. List<CmLogisticsRecord> logisticsRecordList = orderMapper.findLogisticsRecord(shopOrder.getShopOrderID());
  276. for (CmLogisticsRecord logisticsRecord : logisticsRecordList) {
  277. logisticsRecord.setImage(AppUtils.getImageURL("product", logisticsRecord.getImage(), 0, domain));
  278. }
  279. shopOrder.setCmLogisticsRecords(logisticsRecordList);
  280. }
  281. //物流信息
  282. List<LogisticsInfo> logisticsInfoList = orderMapper.findLogisticsInfo(orderID);
  283. for (LogisticsInfo logisticsInfo : logisticsInfoList) {
  284. List<Router> routers = JSONArray.parseArray(logisticsInfo.getInfo(), Router.class);
  285. logisticsInfo.setRouters(routers);
  286. }
  287. map.put("logisticsInfoList", logisticsInfoList);
  288. map.put("shopOrderList", shopOrderList);
  289. return map;
  290. }
  291. }