SalesOrderServiceImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. package com.iamberry.rst.service.cm;
  2. import com.iamberry.rst.core.cm.FittingsInfo;
  3. import com.iamberry.rst.core.cm.SalesOrder;
  4. import com.iamberry.rst.core.cm.SalesOrderItem;
  5. import com.iamberry.rst.core.cm.StoreInfo;
  6. import com.iamberry.rst.core.order.ProductColor;
  7. import com.iamberry.rst.faces.cm.SalesOrderService;
  8. import com.iamberry.rst.faces.cm.StoreInfoService;
  9. import com.iamberry.rst.faces.order.EfastOrderService;
  10. import com.iamberry.rst.faces.product.ProductService;
  11. import com.iamberry.rst.service.cm.mapper.FittingsInfoMapper;
  12. import com.iamberry.rst.service.cm.mapper.SalesOrderMapper;
  13. import com.iamberry.wechat.tools.DateTimeUtil;
  14. import net.sf.json.JSONArray;
  15. import net.sf.json.JSONObject;
  16. import org.apache.commons.lang.StringUtils;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.stereotype.Service;
  19. import org.springframework.transaction.annotation.Transactional;
  20. import java.util.ArrayList;
  21. import java.util.Date;
  22. import java.util.List;
  23. /**
  24. * Created by liuzhiwei on 2017/10/31.
  25. */
  26. @Service
  27. public class SalesOrderServiceImpl implements SalesOrderService {
  28. @Autowired
  29. private SalesOrderMapper salesOrderMapper;
  30. @Autowired
  31. private ProductService productService;
  32. @Autowired
  33. private StoreInfoService storeInfoService;
  34. @Autowired
  35. private EfastOrderService efastOrderService;
  36. @Autowired
  37. private SalesOrderService salesOrderService;
  38. @Autowired
  39. private FittingsInfoMapper fittingsInfoMapper;
  40. @Override
  41. public Integer addSalesOrder(SalesOrder salesOrder) {
  42. return salesOrderMapper.addSalesOrder(salesOrder);
  43. }
  44. @Override
  45. public SalesOrder getSalesOrderById(Integer salesId) {
  46. return salesOrderMapper.getSalesOrderById(salesId);
  47. }
  48. @Override
  49. public Integer updateSalesOrder(SalesOrder salesOrder) {
  50. return salesOrderMapper.updateSalesOrder(salesOrder);
  51. }
  52. @Override
  53. public Integer addSalesOrderList(List<SalesOrder> list) {
  54. return salesOrderMapper.addSalesOrderList(list);
  55. }
  56. @Override
  57. public List<SalesOrder> listSalesOrder(SalesOrder salesOrder) {
  58. return salesOrderMapper.listSalesOrder(salesOrder);
  59. }
  60. @Override
  61. public boolean addOrderAndItem(SalesOrder salesOrder, List<SalesOrderItem> list) {
  62. if (list == null || list.size() == 0) {
  63. return false;
  64. }
  65. //查询该订单是否存在,如果存在,不需要再次添加到订单中
  66. int count = salesOrderMapper.getOrderInfoCount(salesOrder);
  67. if (count > 0) {
  68. return true;
  69. }
  70. //添加订单数据
  71. int orderNum = salesOrderMapper.addSalesOrder(salesOrder);
  72. if (orderNum <= 0) {
  73. return false;
  74. }
  75. for (SalesOrderItem item : list) {
  76. item.setItemOrderId(salesOrder.getSalesId());
  77. }
  78. //批量添加订单项数据
  79. int itemNum = salesOrderMapper.addOrderItemList(list);
  80. if (itemNum <= 0) {
  81. return false;
  82. }
  83. return true;
  84. }
  85. @Override
  86. @Transactional
  87. public SalesOrder addOrderAndIteminfo(SalesOrder salesOrder, List<SalesOrderItem> list) {
  88. //添加订单数据
  89. int orderNum = salesOrderMapper.addSalesOrder(salesOrder);
  90. if (orderNum <= 0) {
  91. return salesOrder;
  92. }
  93. for (SalesOrderItem item : list) {
  94. item.setItemOrderId(salesOrder.getSalesId());
  95. }
  96. //批量添加订单项数据
  97. int itemNum = salesOrderMapper.addOrderItemList(list);
  98. if (itemNum <= 0) {
  99. return salesOrder;
  100. }
  101. return salesOrder;
  102. }
  103. @Override
  104. public List<SalesOrderItem> listSalesOrderItem(SalesOrderItem salesOrderItem) {
  105. return salesOrderMapper.listSalesOrderItem(salesOrderItem);
  106. }
  107. @Override
  108. public Integer updateOrderList(JSONArray orderList, List<SalesOrder> list) {
  109. List<SalesOrder> salesOrders = new ArrayList<SalesOrder>();
  110. //订单号相同时,判断状态,发货状态,物流公司,物流单号等是否相同,如果有一个不同,则需添加到salesOrders中进行同步
  111. for (int i = 0;i < orderList.size();i++) {
  112. JSONObject orderInfo = orderList.getJSONObject(i);
  113. for (SalesOrder salesOrder : list) {
  114. if (orderInfo.get("order_sn").equals(salesOrder.getSalesOrderId())
  115. && !(orderInfo.getInt("order_status") == salesOrder.getSalesStatus()
  116. && orderInfo.getInt("shipping_status") == salesOrder.getSalesShippingStatus()
  117. && orderInfo.getInt("pay_status") == salesOrder.getSalesPayStatus()
  118. && orderInfo.getInt("process_status") == salesOrder.getSalesProcessStatus()
  119. && orderInfo.getInt("is_send") == salesOrder.getSalesIsSend()
  120. && orderInfo.getInt("is_locked") == salesOrder.getSalesIsLocked()
  121. && orderInfo.getInt("is_separate") == salesOrder.getSalesIsSeparate()
  122. && orderInfo.getString("shipping_name").equals(salesOrder.getSalesPostFirm())
  123. && orderInfo.getString("invoice_no").equals(salesOrder.getSalesPostNum())
  124. )) {
  125. SalesOrder order = new SalesOrder();
  126. order.setSalesId(salesOrder.getSalesId());
  127. order.setSalesStatus(orderInfo.getInt("order_status"));
  128. order.setSalesShippingStatus(orderInfo.getInt("shipping_status"));
  129. order.setSalesPayStatus(orderInfo.getInt("pay_status"));
  130. order.setSalesProcessStatus(orderInfo.getInt("process_status"));
  131. order.setSalesIsSend(orderInfo.getInt("is_send"));
  132. order.setSalesIsLocked(orderInfo.getInt("is_locked"));
  133. order.setSalesIsSeparate(orderInfo.getInt("is_separate"));
  134. order.setSalesPostFirm(orderInfo.getString("shipping_name"));
  135. order.setSalesPostNum(orderInfo.getString("invoice_no"));
  136. salesOrders.add(order);
  137. }
  138. }
  139. }
  140. if (salesOrders != null && salesOrders.size() > 0) {
  141. //批量修改订单状态等信息
  142. return salesOrderMapper.updateOrderList(salesOrders);
  143. } else {
  144. return 1;
  145. }
  146. }
  147. @Override
  148. public Integer updateReturnOrderList(JSONArray orderList, List<SalesOrder> list) {
  149. List<SalesOrder> salesOrders = new ArrayList<SalesOrder>();
  150. //订单号相同时,判断状态,发货状态,物流公司,物流单号等是否相同,如果有一个不同,则需添加到salesOrders中进行同步
  151. for (int i = 0;i < orderList.size();i++) {
  152. JSONObject orderInfo = orderList.getJSONObject(i);
  153. for (SalesOrder salesOrder : list) {
  154. if (orderInfo.get("relating_order_sn").equals(salesOrder.getSalesOrderId())) {
  155. SalesOrder order = new SalesOrder();
  156. switch (orderInfo.getInt("process_type")) {
  157. case 1://退货
  158. order.setSalesOrderStatus(3);
  159. break;
  160. case 4://换货
  161. order.setSalesOrderStatus(2);
  162. break;
  163. default:
  164. order.setSalesOrderStatus(3);
  165. break;
  166. }
  167. order.setSalesId(salesOrder.getSalesId());
  168. salesOrders.add(order);
  169. }
  170. }
  171. }
  172. //批量修改订单状态等信息
  173. return salesOrderMapper.updateOrderList(list);
  174. }
  175. @Override
  176. public void addSalesOrderList(JSONObject obj) throws Exception{
  177. if (obj == null) {
  178. return;
  179. }
  180. JSONArray orderList = obj.getJSONArray("list");
  181. if (orderList == null || orderList.size() == 0) {
  182. return;
  183. }
  184. for (int i = 0;i < orderList.size();i++) {
  185. JSONObject order = orderList.getJSONObject(i);
  186. //获取订单详情
  187. JSONObject orderInfo = efastOrderService.getOrderFormEfast(order.getString("deal_code"));
  188. if (orderInfo == null) {
  189. return;
  190. }
  191. //获取订单项集合
  192. JSONArray itemArray = orderInfo.getJSONArray("orders");
  193. if (itemArray == null || itemArray.size() == 0) {
  194. return;
  195. }
  196. SalesOrder salesOrder = new SalesOrder();
  197. salesOrder.setSalesOrderId(order.getString("order_sn"));//订单编号
  198. salesOrder.setSalesDealCode(order.getString("deal_code"));//交易号
  199. salesOrder.setSalesOrderStatus(1);//订单状态
  200. salesOrder.setSalesShippingStatus(order.getInt("shipping_status"));//发货状态 0:未发货,1:已发货,3:备货中
  201. salesOrder.setSalesPayStatus(order.getInt("pay_status"));//是否付款 0:未付款,2:已付款
  202. salesOrder.setSalesProcessStatus(order.getInt("process_status"));//单据状态
  203. salesOrder.setSalesIsSend(order.getInt("is_send"));//是否通知配货
  204. salesOrder.setSalesIsLocked(order.getInt("is_locked"));//是否锁定
  205. salesOrder.setSalesIsSeparate(order.getInt("is_separate"));//是否缺货
  206. salesOrder.setSalesStatus(order.getInt("order_status"));//订单状态 0:未确认,1:已确认,2:挂起,3:作废
  207. /*if (orderStatus == 2 || orderStatus == 3) {
  208. continue;
  209. }*/
  210. salesOrder.setSalesPostFirm(order.getString("shipping_name"));//快递方式代码
  211. salesOrder.setSalesPostNum(order.getString("invoice_no"));//快递单号
  212. salesOrder.setSalesOpenId(order.getString("mobile"));//唯一标识
  213. salesOrder.setSalesPayType(efastOrderService.getPayType(order.getString("pay_name")));//支付方式
  214. salesOrder.setSalesPayTime(new Date(order.getInt("pay_time")*1000));//支付时间
  215. salesOrder.setSalesUserRemark(order.getString("postscript"));//买家留言
  216. salesOrder.setSalesAdminRemark(order.getString("to_buyer"));//商家留言
  217. salesOrder.setSalesAmount(order.getInt("order_amount")*100);//应付款
  218. salesOrder.setSalesPayMoney(order.getInt("money_paid")*100);//已付款
  219. salesOrder.setSalesAddressName(order.getString("consignee"));//收货人
  220. salesOrder.setSalesAddressTel(order.getString("mobile"));//收货人电话
  221. salesOrder.setSalesAddressInfo(order.getString("address").replaceAll(" ","-"));//收货地址
  222. salesOrder.setSalesShippingFee(order.getInt("shipping_fee")*100);//邮费
  223. salesOrder.setSalesCreateTime(DateTimeUtil.parse(order.getString("create_time"),"yyyy-MM-dd HH:mm:ss"));//创建时间
  224. if (StringUtils.isNotEmpty(order.getString("delivery_time"))) {
  225. salesOrder.setSalesSendTime(DateTimeUtil.parse(order.getString("delivery_time"),"yyyy-MM-dd HH:mm:ss"));//发货时间
  226. }
  227. salesOrder.setSalesDiscountMoney(salesOrder.getSalesAmount() - salesOrder.getSalesPayMoney());//优惠金额
  228. salesOrder.setSalesPledgeMoney(0);//押金金额
  229. salesOrder.setSalesRemainDeposit(0);//待提取金额
  230. salesOrder.setSalesSendType(2);//发货方式,默认为物流发货
  231. salesOrder.setSalesSalesTime(salesOrder.getSalesCreateTime());//订购时间
  232. salesOrder.setSalesWaitMoney(0);//待付金额
  233. salesOrder.setSalesLastMoney(salesOrder.getSalesPayMoney());//本次支付金额
  234. salesOrder.setSalesPayNumber("0000");//支付尾号
  235. salesOrder.setSalesType(1);//订单类型
  236. //查询店铺信息
  237. StoreInfo storeInfo = new StoreInfo();
  238. storeInfo.setStoreEfast(order.getString("sd_id"));
  239. List<StoreInfo> storeList = storeInfoService.listStore(storeInfo);
  240. int storeId = 0;
  241. int companyId = 0;
  242. if (storeList != null && storeList.size() > 0) {
  243. storeInfo = storeList.get(0);
  244. storeId = storeInfo.getStoreId();
  245. companyId = storeInfo.getCompanyId();
  246. }
  247. salesOrder.setSalesStoreId(storeId);//店铺id
  248. salesOrder.setSalesCompanyId(companyId);//销售公司id
  249. List<SalesOrderItem> itemList = new ArrayList<SalesOrderItem>();
  250. for (int j = 0;j < itemArray.size();j++) {
  251. ProductColor color = new ProductColor();
  252. JSONObject itemJson = itemArray.getJSONObject(j);
  253. SalesOrderItem item = new SalesOrderItem();
  254. color.setColorBar(itemJson.getString("goods_sn"));
  255. List<ProductColor> colorList = productService.listproductAndColor(color);
  256. if (colorList != null || colorList.size() > 0) {
  257. color = colorList.get(0);
  258. item.setItemColorBar(itemJson.getString("goods_sn"));//商品69码
  259. item.setItemNum(itemJson.getInt("sn"));//商品数量
  260. item.setItemCreateTime(salesOrder.getSalesCreateTime());
  261. item.setItemColorId(color.getColorId());
  262. item.setItemProductColor(color.getColorName());
  263. item.setItemProductDiscount(color.getColorDiscount());
  264. item.setItemProductId(color.getColorProductId());
  265. item.setItemProductName(color.getProductName());
  266. item.setItemProductPic(color.getColorPicture());
  267. item.setItemProductType(color.getProductType());
  268. item.setItemProductPrice(color.getColorPrice());
  269. item.setItemIsSource(1);
  270. itemList.add(item);
  271. } else {
  272. //获取配件信息
  273. FittingsInfo fittingsInfo = new FittingsInfo();
  274. fittingsInfo.setFittingsBar(itemJson.getString("goods_sn"));
  275. List<FittingsInfo> Fittings = fittingsInfoMapper.listFittings(fittingsInfo);
  276. if (Fittings == null || Fittings.size() == 0) {
  277. return;
  278. }
  279. fittingsInfo = Fittings.get(0);
  280. item.setItemColorBar(itemJson.getString("goods_sn"));//商品69码
  281. item.setItemNum(itemJson.getInt("sn"));//商品数量
  282. item.setItemCreateTime(salesOrder.getSalesCreateTime());
  283. item.setItemColorId(fittingsInfo.getFittingsId());
  284. item.setItemProductColor(fittingsInfo.getFittingsName());
  285. item.setItemProductDiscount(fittingsInfo.getFittingsDiscount());
  286. item.setItemProductId(fittingsInfo.getProductId());
  287. item.setItemProductName(fittingsInfo.getFittingsName());
  288. item.setItemProductPic("");
  289. item.setItemProductType(0);
  290. item.setItemProductPrice(fittingsInfo.getFittingsPrice());
  291. item.setItemIsSource(2);
  292. itemList.add(item);
  293. }
  294. }
  295. //添加订单和订单项
  296. salesOrderService.addOrderAndItem(salesOrder,itemList);
  297. }
  298. }
  299. @Override
  300. public Integer getOrderInfoCount(SalesOrder salesOrder) {
  301. return salesOrderMapper.getOrderInfoCount(salesOrder);
  302. }
  303. }