OrderServiceImpl.java 56 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168
  1. package com.kmall.admin.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.google.common.collect.ImmutableBiMap;
  4. import com.google.common.collect.Maps;
  5. import com.kmall.admin.dao.*;
  6. import com.kmall.admin.dao.mk.store.MkStorePromOrderRealDao;
  7. import com.kmall.admin.dto.OrderExpressDto;
  8. import com.kmall.admin.entity.*;
  9. import com.kmall.admin.entity.OrderProcessRecordEntity;
  10. import com.kmall.admin.entity.mk.store.MkStorePromOrderRealEntity;
  11. import com.kmall.api.entity.mk.MkStorePromOrderRealVo;
  12. import com.kmall.manager.manager.express.sf.properties.SFPropertiesBuilder;
  13. import com.kmall.manager.manager.express.sf.properties.SFUtil;
  14. import com.kmall.manager.manager.express.sf.entity.SfRouteServiceResponseEntity;
  15. import com.kmall.manager.manager.express.sf.entity.RouteEntity;
  16. import com.kmall.manager.manager.express.sf.entity.RouteResponseEntity;
  17. import com.kmall.manager.manager.print.ticket.TicketPrintUtil;
  18. import com.kmall.manager.manager.wechat.wxglobal.dto.WechatGlobalRefundApiResult;
  19. import com.kmall.admin.service.OrderService;
  20. import com.kmall.admin.utils.ShiroUtils;
  21. import com.kmall.common.constant.Dict;
  22. import com.kmall.manager.manager.merch.OmsMerchPropertiesBuilder;
  23. import com.kmall.api.util.CommonUtil;
  24. import com.kmall.admin.fromcomm.entity.SysUserEntity;
  25. import com.kmall.manager.manager.print.ticket.PrintTicketPropertiesBuilder;
  26. import com.kmall.common.utils.*;
  27. import com.kmall.common.utils.print.ticket.item.*;
  28. import com.kmall.manager.manager.express.kdn.KdniaoUtil;
  29. import com.kmall.common.utils.wechat.WechatRefundApiResult;
  30. import org.springframework.beans.factory.annotation.Autowired;
  31. import org.springframework.stereotype.Service;
  32. import org.springframework.transaction.annotation.Transactional;
  33. import java.math.BigDecimal;
  34. import java.text.SimpleDateFormat;
  35. import java.util.*;
  36. @Service("orderService")
  37. public class OrderServiceImpl implements OrderService {
  38. @Autowired
  39. private OrderDao orderDao;
  40. @Autowired
  41. private ShippingDao shippingDao;
  42. @Autowired
  43. private OrderGoodsDao orderGoodsDao;
  44. @Autowired
  45. private SysPrinterDao printerDao;
  46. @Autowired
  47. private UserDao userDao;
  48. @Autowired
  49. private UserCouponDao userCouponDao;
  50. @Autowired
  51. private ProductStoreRelaDao productStoreRelaDao;
  52. @Autowired
  53. private OrderProcessRecordDao orderProcessRecordDao;
  54. @Autowired
  55. private OrderRefundDao orderRefundDao;
  56. @Autowired
  57. private StoreDao storeDao;
  58. @Autowired
  59. private OfflineCartDao offlineCartDao;
  60. @Autowired
  61. private GoodsDao goodsDao;
  62. @Autowired
  63. private MerchDao merchDao;
  64. @Autowired
  65. private MngChangeDao mngChangeDao;
  66. @Autowired
  67. private StoreMngChangeDao storeMngChangeDao;
  68. @Autowired
  69. private ThirdMerchExpressDao thirdMerchExpressDao;
  70. @Autowired
  71. private MkStorePromOrderRealDao mkStorePromOrderRealDao;
  72. @Autowired
  73. private UserCampMinusDao userCampMinusDao;
  74. @Override
  75. public OrderEntity queryObject(Long id) {
  76. return orderDao.queryObject(id);
  77. }
  78. @Override
  79. public Double getTotalActualPrice(String merchOrderSn) {
  80. return orderDao.getTotalActualPrice(merchOrderSn);
  81. }
  82. @Override
  83. public List<OrderEntity> queryList(Map<String, Object> map) {
  84. return orderDao.queryList(map);
  85. }
  86. @Override
  87. public int queryTotal(Map<String, Object> map) {
  88. return orderDao.queryTotal(map);
  89. }
  90. @Override
  91. public int save(OrderEntity order) {
  92. return orderDao.save(order);
  93. }
  94. @Override
  95. public int update(OrderEntity order) {
  96. return orderDao.update(order);
  97. }
  98. /**
  99. * 取消订单
  100. *
  101. * @param order
  102. */
  103. @Override
  104. public void cancelOrder(OrderEntity order) {
  105. boolean needUpdateStock = true;
  106. if (order.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_0.getItem())) {
  107. order.setOrderStatus(Integer.parseInt(Dict.orderStatus.item_101.getItem()));
  108. }
  109. orderDao.update(order);
  110. if (!needUpdateStock) {
  111. return;
  112. }
  113. // 更新库存
  114. updateStock(order, "管理后台取消订单");
  115. // 释放优惠券
  116. UserCouponEntity couponVo = userCouponDao.queryByOrderId(order.getId());
  117. if (null != couponVo) {
  118. userCouponDao.cancelOrder(couponVo);
  119. }
  120. //释放促销满减券
  121. UserCampMinusEntity userCampMinusVo = userCampMinusDao.queryUserCampByOrderId(order.getId());
  122. if (null != userCampMinusVo) {
  123. userCampMinusDao.cancelUserCampOrder(userCampMinusVo);
  124. }
  125. }
  126. @Override
  127. public int delete(Long id) {
  128. return orderDao.delete(id);
  129. }
  130. @Override
  131. public int deleteBatch(Long[] ids) {
  132. return orderDao.deleteBatch(ids);
  133. }
  134. @Override
  135. public int confirm(Long id) {
  136. OrderEntity orderEntity = queryObject(id);
  137. Integer shippingStatus = orderEntity.getShippingStatus();//发货状态
  138. Integer payStatus = orderEntity.getPayStatus();//付款状态
  139. if (2 != payStatus) {
  140. throw new RRException("此订单未付款,不能确认收货!");
  141. }
  142. if (4 == shippingStatus) {
  143. throw new RRException("此订单处于退货状态,不能确认收货!");
  144. }
  145. if (0 == shippingStatus) {
  146. throw new RRException("此订单未发货,不能确认收货!");
  147. }
  148. if (orderEntity.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_301.getItem())) {
  149. throw new RRException("此订单已完成!");
  150. }
  151. if (orderEntity.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_0.getItem())) {
  152. throw new RRException("此订单待付款!");
  153. }
  154. if (orderEntity.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_100.getItem())) {
  155. throw new RRException("此订单付款中!");
  156. }
  157. if (orderEntity.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_101.getItem())) {
  158. throw new RRException("此订单已取消!");
  159. }
  160. if (orderEntity.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_102.getItem())) {
  161. throw new RRException("此订单已删除!");
  162. }
  163. if (orderEntity.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_201.getItem())) {
  164. throw new RRException("此订单还未发货!");
  165. }
  166. if (orderEntity.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_401.getItem())) {
  167. throw new RRException("此订单已退款!");
  168. }
  169. if (orderEntity.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_402.getItem())) {
  170. throw new RRException("此订单已退款!");
  171. }
  172. orderEntity.setShippingStatus(2);
  173. orderEntity.setOrderStatus(301);
  174. orderEntity.setConfirmTime(new Date());
  175. orderDao.update(orderEntity);
  176. return 0;
  177. }
  178. @Override
  179. public int sendGoods(OrderEntity order) {
  180. Integer payStatus = order.getPayStatus();//付款状态
  181. if (2 != payStatus) {
  182. throw new RRException("此订单未付款!");
  183. }
  184. ShippingEntity shippingEntity = shippingDao.queryObject(order.getShippingId());
  185. if (null != shippingEntity) {
  186. order.setShippingName(shippingEntity.getName());
  187. }
  188. order.setOrderStatus(300);//订单已发货
  189. order.setShippingStatus(1);//已发货
  190. return orderDao.update(order);
  191. }
  192. @Override
  193. public Ticket printMsg(Long id) {
  194. OrderEntity orderEntity = queryInfos(id);
  195. List<OrderGoodsEntity> orderGoodsEntityList = orderEntity.getOrderGoodsEntityList();
  196. // 获取门店
  197. StoreEntity storeEntity = storeDao.queryObject(orderEntity.getStoreId());
  198. // 获取清关信息
  199. OrderProcessRecordEntity orderProcessRecordEntity =
  200. orderProcessRecordDao.queryObjectByOrderSn(orderEntity.getOrderSn());
  201. // 小票头
  202. TicketHead head = new TicketHead();
  203. head.setTitle(OmsMerchPropertiesBuilder.instance().getMerchName() + storeEntity.getStoreName());
  204. // head.setMemberId(orderEntity.getUserName().toString());
  205. head.setOrderId(orderEntity.getOrderSn());
  206. head.setTradeTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss EEE").format(new Date()));
  207. // 商品信息
  208. Integer goodsTotal = 0; // 商品总个数
  209. BigDecimal total = Constant.ZERO; // 商品总计
  210. List<Goods> goodsList = new ArrayList<>();
  211. for (OrderGoodsEntity orderGoods : orderGoodsEntityList) {
  212. goodsTotal += orderGoods.getNumber();
  213. total = total.add(orderGoods.getRetailPrice().multiply(new BigDecimal(orderGoods.getNumber())))
  214. .setScale(2, BigDecimal.ROUND_HALF_UP);
  215. Goods goods = new Goods(orderGoods.getGoodsName(), orderGoods.getRetailPrice().toString(),
  216. orderGoods.getNumber().toString(),
  217. orderGoods.getRetailPrice().multiply(new BigDecimal(orderGoods.getNumber()))
  218. .setScale(2, BigDecimal.ROUND_HALF_UP).toString());
  219. goodsList.add(goods);
  220. }
  221. // 收银信息
  222. CashInfo cashInfo = new CashInfo();
  223. cashInfo.setGoodsTotal(goodsTotal.toString());
  224. cashInfo.setTotal(total.setScale(2, BigDecimal.ROUND_HALF_UP).toString());
  225. cashInfo.setReceipts(orderEntity.getActualPrice().setScale(2, BigDecimal.ROUND_HALF_UP).toString());
  226. cashInfo.setOddChange("0.00");
  227. cashInfo.setCoupon(orderEntity.getCouponPrice().setScale(2, BigDecimal.ROUND_HALF_UP).toString());
  228. cashInfo.setFreight(
  229. new BigDecimal(orderEntity.getFreightPrice()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());
  230. cashInfo.setPaymentMode("微信支付");
  231. // 海关清单
  232. CusListing cusListing = new CusListing();
  233. cusListing.setOrderId(orderEntity.getOrderSn());
  234. if (!orderEntity.getOrderBizType().equalsIgnoreCase(Dict.orderBizType.item_11.getItem())) {
  235. cusListing.setWaybillId(orderProcessRecordEntity.getLogisticsNo());
  236. cusListing.setInvtNo(orderProcessRecordEntity.getInvtNo());
  237. cusListing.setConsignee(orderEntity.getConsignee());
  238. cusListing.setConsigneeTel(orderEntity.getMobile());
  239. }
  240. cusListing.setOriginAddress(PrintTicketPropertiesBuilder.instance().getAddress());
  241. cusListing.setDeliveryAddress(storeEntity.getStoreAddress());
  242. return TicketPrintUtil.print(head, goodsList, cashInfo, cusListing);
  243. }
  244. /**
  245. * 退款
  246. */
  247. @Transactional
  248. public void refund(OrderEntity order, WechatRefundApiResult result) {
  249. boolean needUpdateStock = true;
  250. if (order.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_201.getItem())) {
  251. order.setOrderStatus(Integer.parseInt(Dict.orderStatus.item_401.getItem()));
  252. }
  253. if (Dict.payFlag.item_cash.getItem().equals(order.getPayFlag())) {
  254. order.setPayStatus(Integer.parseInt(Dict.payStatus.item_4.getItem()));
  255. }else{
  256. order.setPayStatus(Integer.parseInt(Dict.payStatus.item_3.getItem()));
  257. OrderRefundEntity mallOrderRefund = orderRefundDao.queryObjectByOrderId(order.getId());
  258. OrderRefundEntity orderRefund = new OrderRefundEntity();
  259. orderRefund.setRefundId(result.getRefund_id());
  260. orderRefund.setOutRefundNo(result.getOut_refund_no());
  261. orderRefund
  262. .setRefundMoney(BigDecimal.valueOf(Long.valueOf(result.getRefund_fee())).divide(Constant.ONE_HUNDRED));
  263. orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_5.getItem()));//退款处理中
  264. orderRefund.setModTime(new Date());
  265. if (mallOrderRefund != null) {
  266. orderRefund.setId(mallOrderRefund.getId());
  267. orderRefund.setRefundType(mallOrderRefund.getRefundType());
  268. orderRefundDao.update(orderRefund);
  269. } else {
  270. orderRefund.setOrderId(Integer.parseInt(order.getId() + ""));
  271. orderRefund.setUserId(Integer.parseInt(order.getUserId() + ""));
  272. orderRefund.setCreateTime(new Date());
  273. List<OrderEntity> list = orderDao.queryObjectByMerchOrderSn(order.getMerchOrderSn());
  274. if(list.size()>1){//多条订单
  275. orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_2.getItem()));//部分退款
  276. }else{
  277. orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_1.getItem()));//用户全额退款
  278. }
  279. orderRefundDao.save(orderRefund);//退款记录
  280. }
  281. }
  282. orderDao.update(order);//修改为退款中
  283. // TODO: 2019/6/13 定时任务查询退款成功后释放库存、优惠券
  284. /*// 判断是否有优惠券
  285. UserCouponEntity couponVo = userCouponDao.queryByOrderId(order.getId());
  286. if (null != couponVo) {
  287. userCouponDao.cancelOrder(couponVo);
  288. }
  289. if (!needUpdateStock) {
  290. return;
  291. }
  292. // 更新库存
  293. updateStock(order, "管理后台订单退款");*/
  294. queryStorePromRealUpdateIsScan(order);
  295. }
  296. /**
  297. * 平安退款逻辑处理
  298. * @param order
  299. * @param result
  300. */
  301. @Transactional
  302. public void pinganRefund(OrderEntity order, net.sf.json.JSONObject result, String refundId) {
  303. boolean needUpdateStock = true;
  304. if (order.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_201.getItem())) {
  305. order.setOrderStatus(Integer.parseInt(Dict.orderStatus.item_401.getItem()));
  306. }
  307. order.setPayStatus(Integer.parseInt(Dict.payStatus.item_3.getItem()));
  308. OrderRefundEntity orderRefund = new OrderRefundEntity();
  309. orderRefund.setRefundId(refundId);
  310. orderRefund.setOutRefundNo(result.getString("ord_no"));
  311. orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_5.getItem()));//退款处理中
  312. orderRefund.setModTime(new Date());
  313. orderRefund.setRefundMoney(BigDecimal.valueOf(result.getInt("trade_amount")).divide(Constant.ONE_HUNDRED));
  314. OrderRefundEntity mallOrderRefund = orderRefundDao.queryObjectByOrderId(order.getId());
  315. if (mallOrderRefund != null) {
  316. orderRefund.setRefundType(mallOrderRefund.getRefundType());
  317. orderRefund.setId(mallOrderRefund.getId());
  318. orderRefundDao.update(orderRefund);
  319. } else {//退款记录不存在
  320. orderRefund.setOrderId(Integer.parseInt(order.getId() + ""));
  321. orderRefund.setUserId(Integer.parseInt(order.getUserId() + ""));
  322. orderRefund.setCreateTime(new Date());
  323. orderRefundDao.save(orderRefund);//退款记录
  324. }
  325. orderDao.update(order);//修改为退款中
  326. // TODO: 2019/6/13 定时任务查询退款成功后释放库存、优惠券
  327. /*// 判断是否有优惠券
  328. UserCouponEntity couponVo = userCouponDao.queryByOrderId(order.getId());
  329. if (null != couponVo) {
  330. userCouponDao.cancelOrder(couponVo);
  331. }
  332. if (!needUpdateStock) {
  333. return;
  334. }
  335. // 更新库存
  336. updateStock(order, "管理后台平安退款订单");*/
  337. queryStorePromRealUpdateIsScan(order);
  338. }
  339. /**
  340. * 微信国际退款逻辑处理
  341. * @param order
  342. * @param result
  343. */
  344. @Transactional
  345. public void globalRefund(OrderEntity order, WechatGlobalRefundApiResult result) {
  346. boolean needUpdateStock = true;
  347. if (order.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_201.getItem())) {
  348. order.setOrderStatus(Integer.parseInt(Dict.orderStatus.item_401.getItem()));
  349. }
  350. order.setPayStatus(Integer.parseInt(Dict.payStatus.item_3.getItem()));
  351. OrderRefundEntity orderRefund = new OrderRefundEntity();
  352. orderRefund.setRefundId(result.getRefund_id());
  353. orderRefund.setOutRefundNo(result.getOut_refund_no());
  354. orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_5.getItem()));//退款处理中
  355. orderRefund.setModTime(new Date());
  356. orderRefund.setRefundMoney(BigDecimal.valueOf(Long.valueOf(result.getRefund_fee())).divide(Constant.ONE_HUNDRED));
  357. orderRefund.setRefundFeeType(result.getRefund_fee_type());
  358. if(org.apache.commons.lang3.StringUtils.isNotEmpty(result.getTotal_fee())) {
  359. orderRefund.setTotalFee(Integer.parseInt(BigDecimal.valueOf(Long.valueOf(result.getTotal_fee())).divide(Constant.ONE_HUNDRED).toString()));
  360. }
  361. orderRefund.setFeeType(result.getFee_type());
  362. if(org.apache.commons.lang3.StringUtils.isNotEmpty(result.getCash_fee())) {
  363. orderRefund.setCashFee(Integer.parseInt(BigDecimal.valueOf(Long.valueOf(result.getCash_fee())).divide(Constant.ONE_HUNDRED).toString()));
  364. }
  365. orderRefund.setCashFeeType(result.getCash_fee_type());
  366. if(org.apache.commons.lang3.StringUtils.isNotEmpty(result.getCash_refund_fee())) {
  367. orderRefund.setCashRefundFee(Integer.parseInt(BigDecimal.valueOf(Long.valueOf(result.getCash_refund_fee())).divide(Constant.ONE_HUNDRED).toString()));
  368. }
  369. orderRefund.setCashRefundFeeType(result.getCash_refund_fee_type());
  370. OrderRefundEntity mallOrderRefund = orderRefundDao.queryObjectByOrderId(order.getId());
  371. if (mallOrderRefund != null) {
  372. orderRefund.setRefundType(mallOrderRefund.getRefundType());
  373. orderRefund.setId(mallOrderRefund.getId());
  374. orderRefundDao.update(orderRefund);
  375. } else {//退款记录不存在
  376. orderRefund.setOrderId(Integer.parseInt(order.getId() + ""));
  377. orderRefund.setUserId(Integer.parseInt(order.getUserId() + ""));
  378. orderRefund.setCreateTime(new Date());
  379. orderRefundDao.save(orderRefund);//退款记录
  380. }
  381. orderDao.update(order);//修改为退款中
  382. // TODO: 2019/6/13 定时任务查询退款成功后释放库存、优惠券
  383. /*// 判断是否有优惠券
  384. UserCouponEntity couponVo = userCouponDao.queryByOrderId(order.getId());
  385. if (null != couponVo) {
  386. userCouponDao.cancelOrder(couponVo);
  387. }
  388. if (!needUpdateStock) {
  389. return;
  390. }
  391. // 更新库存
  392. updateStock(order, "管理后台微信国际退款订单");*/
  393. queryStorePromRealUpdateIsScan(order);
  394. }
  395. private void updateStock(OrderEntity order, String changeReason){
  396. Map<String, Object> map = new HashMap<String, Object>();
  397. SysUserEntity user = ShiroUtils.getUserEntity();
  398. map.put("orderId", order.getId());
  399. List<OrderGoodsEntity> orderGoodsVoList = orderGoodsDao.queryList(map);
  400. for (OrderGoodsEntity orderGoodsEntity : orderGoodsVoList) {
  401. ProductStoreRelaEntity storeRelaEntity = productStoreRelaDao
  402. .queryByStoreIdProductId(Long.valueOf(order.getStoreId()),Long.valueOf(orderGoodsEntity.getProductId()));
  403. if (null == storeRelaEntity || null == storeRelaEntity.getSellVolume()) {
  404. storeRelaEntity.setSellVolume(0);
  405. }
  406. BigDecimal sellVolume = new BigDecimal(storeRelaEntity.getSellVolume() - orderGoodsEntity.getNumber());//销售量
  407. if (sellVolume.compareTo(Constant.ZERO) < 0) {
  408. sellVolume = Constant.ZERO;
  409. }
  410. Integer stockNum = 0;
  411. // TODO: 2019/3/5 普通商品不受共享库存影响,直接取门店配置库存
  412. if (null != storeRelaEntity.getStockNum()) {
  413. stockNum = storeRelaEntity.getStockNum();
  414. //还原门店库存
  415. resetStoreGoodsStock(stockNum, storeRelaEntity, orderGoodsEntity, sellVolume, changeReason, user);
  416. }
  417. GoodsEntity goodsEntity = goodsDao.queryObject(orderGoodsEntity.getGoodsId());
  418. if(goodsEntity != null){
  419. stockNum = goodsEntity.getGoodsNumber();
  420. //还原商户商品库存
  421. resetGoodsStock(stockNum, storeRelaEntity, orderGoodsEntity, sellVolume, changeReason, user);
  422. }
  423. }
  424. }
  425. /**
  426. * 还原商品总库存
  427. * @param stockNum
  428. * @param storeRelaEntity
  429. * @param orderGoodsEntity
  430. * @param sellVolume
  431. * @param changeReason
  432. * @param user
  433. */
  434. private void resetGoodsStock(Integer stockNum, ProductStoreRelaEntity storeRelaEntity,
  435. OrderGoodsEntity orderGoodsEntity, BigDecimal sellVolume, String changeReason, SysUserEntity user){
  436. GoodsEntity goodsEntity = goodsDao.queryObject(storeRelaEntity.getGoodsId());
  437. if(goodsEntity!=null){
  438. goodsEntity.setGoodsNumber(stockNum + orderGoodsEntity.getNumber());
  439. // goodsEntity.setSellVolume(Integer.parseInt(goodsSellVolume.toString()));
  440. goodsDao.update(goodsEntity);
  441. // storeRelaEntity.setSellVolume(Integer.parseInt(sellVolume.toString()));
  442. // productStoreRelaDao.update(storeRelaEntity);
  443. MngChangeEntity mngChangeEntity = new MngChangeEntity();
  444. mngChangeEntity.setGoodsId(Integer.parseInt(String.valueOf(goodsEntity.getId())));
  445. mngChangeEntity.setThirdPartyMerchCode(goodsEntity.getThirdPartyMerchCode());
  446. mngChangeEntity.setChangeReason(changeReason);
  447. mngChangeEntity.setChangeType(Dict.changeType.item_0.getItem());
  448. mngChangeEntity.setChangeNum(orderGoodsEntity.getNumber());//变化数
  449. mngChangeEntity.setOriginalNum(stockNum);//原库存数
  450. mngChangeEntity.setValidNum(stockNum + orderGoodsEntity.getNumber());//可用数
  451. mngChangeEntity.setCreateTime(new Date());
  452. mngChangeEntity.setModTime(new Date());
  453. mngChangeEntity.setCreaterSn(user.getUsername());
  454. mngChangeEntity.setModerSn(user.getUsername());
  455. mngChangeEntity.setIsValid(0);
  456. mngChangeEntity.setMerchSn(goodsEntity.getMerchSn());
  457. mngChangeDao.save(mngChangeEntity);
  458. }
  459. }
  460. /**
  461. * 还原门店商品库存
  462. * @param stockNum
  463. * @param storeRelaEntity
  464. * @param orderGoodsEntity
  465. * @param sellVolume
  466. * @param changeReason
  467. * @param user
  468. */
  469. private void resetStoreGoodsStock(Integer stockNum, ProductStoreRelaEntity storeRelaEntity,
  470. OrderGoodsEntity orderGoodsEntity, BigDecimal sellVolume, String changeReason, SysUserEntity user){
  471. storeRelaEntity.setSellVolume(Integer.parseInt(sellVolume.toString()));
  472. storeRelaEntity.setStockNum(stockNum + orderGoodsEntity.getNumber());//库存数量
  473. productStoreRelaDao.update(storeRelaEntity);
  474. StoreMngChangeEntity storeMngChangeEntity = new StoreMngChangeEntity();
  475. storeMngChangeEntity.setChangeType(Dict.changeType.item_0.getItem());
  476. storeMngChangeEntity.setChangeReason(changeReason);
  477. storeMngChangeEntity.setGoodsId(Integer.parseInt(String.valueOf(storeRelaEntity.getGoodsId())));
  478. storeMngChangeEntity.setStoreId(Integer.parseInt(String.valueOf(storeRelaEntity.getStoreId())));
  479. storeMngChangeEntity.setMerchSn(storeRelaEntity.getMerchSn());
  480. storeMngChangeEntity.setStoreChangeNum(orderGoodsEntity.getNumber());
  481. storeMngChangeEntity.setStoreOriginalNum(stockNum);
  482. storeMngChangeEntity.setStoreValidNum(stockNum + orderGoodsEntity.getNumber());
  483. storeMngChangeEntity.setCreateTime(new Date());
  484. storeMngChangeEntity.setModTime(new Date());
  485. storeMngChangeEntity.setCreaterSn(user.getUsername());
  486. storeMngChangeEntity.setModerSn(user.getUsername());
  487. storeMngChangeEntity.setIsValid(0);
  488. storeMngChangeDao.save(storeMngChangeEntity);
  489. }
  490. /**
  491. * 查询该退款订单编号是否是推广渠道订单,是则修改渠道定时扫描状态
  492. * @param orderInfo
  493. */
  494. private void queryStorePromRealUpdateIsScan(OrderEntity orderInfo){
  495. Map map = new HashMap();
  496. map.put("orderId", orderInfo.getId());
  497. List<MkStorePromOrderRealEntity> list = mkStorePromOrderRealDao.queryPromRealListByMap(map);
  498. if(list.size() > 0) {
  499. for (MkStorePromOrderRealEntity mkStorePromOrderRealEntity : list) {
  500. mkStorePromOrderRealEntity.setIsPromStatScan(Dict.isDistSellScan.item_0.getItem());
  501. mkStorePromOrderRealDao.update(mkStorePromOrderRealEntity);
  502. }
  503. }
  504. }
  505. /**
  506. * 处理用户退款申请
  507. *
  508. * @param orderInfo
  509. */
  510. @Transactional
  511. public void applyRefundDeal(OrderEntity orderInfo, OrderRefundEntity refundEntity) {
  512. refundEntity.setApprovalTime(new Date());
  513. // refundEntity.setApprover(ShiroUtils.getUserId());
  514. // 退积分
  515. try {
  516. Integer integral = 1;
  517. if (orderInfo.getActualPrice().intValue() > 0) {
  518. integral = orderInfo.getActualPrice().intValue();
  519. }
  520. if (refundEntity.getRefundStatus() == 2) {
  521. orderInfo.setOrderStatus(401);
  522. // UserEntity entity = userDao.queryObject(orderInfo.getUserId());
  523. } else {
  524. orderInfo.setOrderStatus(201);
  525. }
  526. } catch (Exception e) {
  527. e.printStackTrace();
  528. }
  529. orderRefundDao.update(refundEntity);
  530. orderDao.update(orderInfo);
  531. }
  532. @Override
  533. public OrderRefundEntity queryRefundObject(Long refundId) {
  534. return orderRefundDao.queryObject(refundId);
  535. }
  536. @Override
  537. public List<OrderRefundEntity> queryRefundList(Map<String, Object> map) {
  538. return orderRefundDao.queryList(map);
  539. }
  540. @Override
  541. public int queryRefundTotal(Map<String, Object> map) {
  542. return orderRefundDao.queryTotal(map);
  543. }
  544. @Override
  545. public int getUserOrderInfo(Map<String, Object> map) {
  546. int result = 0;
  547. String type = (String) map.get("type");
  548. if ("yfkOrderUserSum".equals(type)) {
  549. result = orderDao.getYfkOrderUserSum(map);
  550. } else if ("oderUserSum".equals(type)) {
  551. result = orderDao.getOderUserSum(map);
  552. } else if ("todayUserOrder".equals(type)) {
  553. result = orderDao.getTodayUserOrder(map);
  554. } else if ("todayUserSales".equals(type)) {
  555. result = orderDao.getTodayUserSales(map);
  556. } else if ("incomeSum".equals(type)) {
  557. result = orderDao.getIncomeSum(map);
  558. } else if ("payedOrderCount".equals(type)) {
  559. result = orderDao.getPayedOrderCount(map);
  560. }
  561. return result;
  562. }
  563. @Override
  564. public Map getLogistics(Long id) {
  565. OrderEntity orderEntity = queryObject(id);
  566. if (orderEntity == null) {
  567. throw new RRException("此订单不存在!");
  568. }
  569. if (orderEntity.getShippingStatus() == 0) {
  570. if (orderEntity.getOrderBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem()) ||
  571. orderEntity.getOrderBizType().equalsIgnoreCase(Dict.orderBizType.item_02.getItem())) {
  572. throw new RRException("此订单还未发货!");
  573. } else {
  574. if (StringUtils.isNullOrEmpty(orderEntity.getShippingNo())) {
  575. throw new RRException("此订单还未发货!");
  576. }
  577. }
  578. }
  579. Map logisticsInfo = Maps.newHashMap();
  580. List<WuliuEntity> wuliuEntityList = new ArrayList<>();
  581. OrderProcessRecordEntity orderProcessRecordEntity =
  582. orderProcessRecordDao.queryObjectByOrderSn(orderEntity.getOrderSn());
  583. if (orderProcessRecordEntity != null) {
  584. if (orderEntity.getOrderBizType().equals(Dict.orderBizType.item_10.getItem()) ||
  585. orderEntity.getOrderBizType().equals(Dict.orderBizType.item_02.getItem())) {
  586. WuliuEntity wuliuEntity = new WuliuEntity();
  587. wuliuEntity.setAcceptTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
  588. .format(orderProcessRecordEntity.getCustomsSuccTime()));
  589. wuliuEntity.setAcceptStation(PrintTicketPropertiesBuilder.instance().getAddress() + "送达" +
  590. storeDao.queryObject(orderEntity.getStoreId()).getStoreAddress() +
  591. ";交易完成,用户已提走");
  592. wuliuEntityList.add(wuliuEntity);
  593. }
  594. if (StringUtils.isNotEmpty(orderEntity.getShippingCode()) &&
  595. StringUtils.isNotEmpty(orderEntity.getShippingNo()) &&
  596. orderProcessRecordEntity.getShipmentStartTime() != null) {
  597. if(orderEntity.getShippingCode().equalsIgnoreCase("SF")){
  598. StoreEntity storeEntity = storeDao.queryObject(orderEntity.getStoreId());
  599. if(storeEntity == null){
  600. throw new RRException("查询顺丰订单异常,订单的门店信息不存在");
  601. }
  602. ThirdMerchExpressEntity thirdMerchExpressEntity = thirdMerchExpressDao.getThirdMerchExpressByThirdCode(storeEntity.getThirdPartyMerchCode());
  603. if(thirdMerchExpressEntity == null){
  604. throw new RRException("查询顺丰订单异常,缺失商户快递账号信息");
  605. }
  606. SfRouteServiceResponseEntity entity = SFUtil.routeService(orderEntity.getShippingNo(), thirdMerchExpressEntity.getExpressAccount(),
  607. thirdMerchExpressEntity.getExpressPwd(), SFPropertiesBuilder.instance().getUrl());
  608. // SfRouteServiceResponseEntity entity = SFUtil.routeService("254355029325", thirdMerchExpressEntity.getExpressAccount(),
  609. // thirdMerchExpressEntity.getExpressPwd(), SFPropertiesBuilder.instance().getUrl());//444072971585
  610. if(entity.getHead().equalsIgnoreCase("OK")){
  611. if(entity.getBody() == null){
  612. WuliuEntity wuliuEntity = new WuliuEntity();
  613. wuliuEntity.setAcceptStation("暂无物流轨迹");
  614. wuliuEntityList.add(wuliuEntity);
  615. }else{
  616. if(entity.getBody().getRouteResponse() == null){
  617. WuliuEntity wuliuEntity = new WuliuEntity();
  618. wuliuEntity.setAcceptStation("暂无物流轨迹");
  619. wuliuEntityList.add(wuliuEntity);
  620. }else{
  621. RouteResponseEntity routeResponseEntity = entity.getBody().getRouteResponse().get(0);
  622. if(routeResponseEntity != null){
  623. List<RouteEntity> entityList = routeResponseEntity.getRouteResponse();
  624. for (RouteEntity route : entityList) {
  625. WuliuEntity wuliuEntity = new WuliuEntity();
  626. wuliuEntity.setAcceptTime(route.getAccept_time());
  627. wuliuEntity.setAcceptStation(route.getAccept_address() + route.getRemark());
  628. wuliuEntityList.add(wuliuEntity);
  629. }
  630. }
  631. }
  632. }
  633. }else{
  634. throw new RRException("查询顺丰订单异常,"+entity.getErrors());
  635. }
  636. }else{
  637. JSONObject traces =
  638. KdniaoUtil.getOrderTracesByJson(orderEntity.getShippingCode(), orderEntity.getShippingNo());
  639. List<Map> mapList = (List<Map>) traces.get("Traces");
  640. if (mapList != null && mapList.size() > 0) {
  641. for (Map map : mapList) {
  642. WuliuEntity wuliuEntity = new WuliuEntity();
  643. wuliuEntity.setAcceptTime(map.get("AcceptTime").toString());
  644. wuliuEntity.setAcceptStation(map.get("AcceptStation").toString());
  645. wuliuEntityList.add(wuliuEntity);
  646. }
  647. }
  648. String state = traces.get("State") + "";
  649. if (Dict.logisticsStatus.item_0.getItem().equals(state) && traces.getBoolean("Success")) {
  650. String reason = traces.get("Reason") + "";
  651. WuliuEntity wuliuEntity = new WuliuEntity();
  652. wuliuEntity.setAcceptStation(reason);
  653. wuliuEntityList.add(wuliuEntity);
  654. }
  655. }
  656. }
  657. if (Dict.isSend.item_1.getItem().equalsIgnoreCase(orderProcessRecordEntity.getIsCustomsSend()) &&
  658. orderProcessRecordEntity.getShipmentStartTime() != null) {
  659. WuliuEntity wuliuEntity = new WuliuEntity();
  660. wuliuEntity.setAcceptStation("订单已出库");
  661. wuliuEntity.setAcceptTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
  662. .format(orderProcessRecordEntity.getShipmentStartTime()));
  663. wuliuEntityList.add(wuliuEntity);
  664. }
  665. if (Dict.isSend.item_1.getItem().equals(orderProcessRecordEntity.getIsCustomsSend())) {
  666. WuliuEntity wuliuEntity = new WuliuEntity();
  667. wuliuEntity.setAcceptStation("订单清关完成,等待仓库发货");
  668. wuliuEntity.setAcceptTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
  669. .format(orderProcessRecordEntity.getCustomsSuccTime()));
  670. wuliuEntityList.add(wuliuEntity);
  671. }
  672. if (Dict.isSend.item_0.getItem().equalsIgnoreCase(orderProcessRecordEntity.getIsCustomsSend())) {
  673. WuliuEntity wuliuEntity = new WuliuEntity();
  674. wuliuEntity.setAcceptStation("订单清关失败");
  675. wuliuEntityList.add(wuliuEntity);
  676. }
  677. if (Dict.isSend.item_1.getItem().equalsIgnoreCase(orderProcessRecordEntity.getIsEleOrderSend()) &&
  678. orderProcessRecordEntity.getWaybillSuccTime() != null) {
  679. WuliuEntity wuliuEntity = new WuliuEntity();
  680. wuliuEntity.setAcceptStation("海关三单发送成功");
  681. wuliuEntity.setAcceptTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
  682. .format(orderProcessRecordEntity.getWaybillSuccTime()));
  683. wuliuEntityList.add(wuliuEntity);
  684. }
  685. if (Dict.isSend.item_1.getItem().equals(orderProcessRecordEntity.getIsPaymentSend())) {
  686. WuliuEntity wuliuEntity = new WuliuEntity();
  687. wuliuEntity.setAcceptStation("订单支付成功");
  688. wuliuEntity.setAcceptTime(
  689. new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(orderProcessRecordEntity.getPaySuccTime()));
  690. wuliuEntityList.add(wuliuEntity);
  691. }
  692. if (Dict.isSend.item_1.getItem().equalsIgnoreCase(orderProcessRecordEntity.getIsAddOrderSend())) {
  693. WuliuEntity wuliuEntity = new WuliuEntity();
  694. wuliuEntity.setAcceptStation("订单下单成功");
  695. wuliuEntity.setAcceptTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
  696. .format(orderProcessRecordEntity.getAddOrderSuccTime()));
  697. wuliuEntityList.add(wuliuEntity);
  698. }
  699. }
  700. logisticsInfo.put("tracesList", wuliuEntityList);
  701. logisticsInfo.put("logisticCode", orderEntity.getShippingNo());
  702. logisticsInfo.put("shipperCode", orderEntity.getShippingCode());
  703. return logisticsInfo;
  704. }
  705. @Override
  706. public OrderEntity queryInfos(Long id) {
  707. OrderEntity orderEntity = orderDao.queryObject(id);
  708. Map<String, Object> map = new HashMap<String, Object>();
  709. map.put("orderId", id);
  710. List<OrderGoodsEntity> orderGoodsEntityList = orderGoodsDao.queryList(map);
  711. orderEntity.setOrderGoodsEntityList(orderGoodsEntityList);
  712. return orderEntity;
  713. }
  714. /**
  715. * 普货商品生成线下订单
  716. * @param offlineCartList
  717. * @param user
  718. * @return
  719. */
  720. @Transactional
  721. @Override
  722. public Map orderSubmit(List<OfflineCartEntity> offlineCartList, SysUserEntity user) {
  723. Map resultObj = Maps.newHashMap();
  724. try {
  725. if (user == null) {
  726. resultObj.put("errno", 400);
  727. resultObj.put("errmsg", "用户登录超时,请重新登录");
  728. return resultObj;
  729. }
  730. if (!user.getRoleType().equalsIgnoreCase("2")) {
  731. resultObj.put("errno", 400);
  732. resultObj.put("errmsg", "该操作只允许店员账户操作");
  733. return resultObj;
  734. }
  735. if (org.apache.commons.lang3.StringUtils.isEmpty(user.getMerchSn())) {
  736. resultObj.put("errno", 400);
  737. resultObj.put("errmsg", "操作用户的商户编号为空,请先维护用户商户编号信息再来操作");
  738. return resultObj;
  739. }
  740. Long userId = user.getUserId();
  741. Integer storeId = user.getStoreId();
  742. //获取要购买的商品
  743. Map param = Maps.newHashMap();
  744. param.put("userId", userId);
  745. param.put("storeId", storeId);
  746. if (null == offlineCartList && offlineCartList.size() == 0) {
  747. resultObj.put("errno", 400);
  748. resultObj.put("errmsg", "购买商品数据为空");
  749. return resultObj;
  750. }
  751. List<OfflineCartEntity> offlineCartEntityList = offlineCartDao.queryOfflineCartByBizType(param);
  752. if (offlineCartEntityList.size() == 0 && offlineCartList.size() > 0) {
  753. resultObj.put("errno", 0);
  754. resultObj.put("errmsg", "该单已下单成功,请重新扫描商品进行购买");
  755. return resultObj;
  756. }
  757. // 检查库存和更新库存
  758. for (OfflineCartEntity cartEntity : offlineCartEntityList) {
  759. GoodsEntity goodsEntity = goodsDao.queryObject(cartEntity.getGoodsId());
  760. if (goodsEntity == null) {
  761. resultObj.put("errno", 400);
  762. resultObj.put("errmsg", "订单提交失败:商品不存在");
  763. return resultObj;
  764. }
  765. //取得规格的信息,判断规格库存
  766. ProductStoreRelaEntity productInfo = productStoreRelaDao
  767. .queryByGoodsIdAndStoreId(Long.valueOf(storeId), Long.valueOf(cartEntity.getGoodsId()));
  768. synchronized (productInfo) {
  769. if (null == productInfo || null == productInfo.getStockNum() ||
  770. productInfo.getStockNum() < cartEntity.getNumber()) {
  771. resultObj.put("errno", 400);
  772. resultObj.put("errmsg", "库存不足,仅剩余" + productInfo.getStockNum());
  773. return resultObj;
  774. } else {
  775. productInfo.setStockNum(productInfo.getStockNum() - cartEntity.getNumber());
  776. productInfo.setStoreId(Long.valueOf(storeId));
  777. productInfo.addSellVolume();
  778. productStoreRelaDao.updateStockNum(productInfo);//修改普通商品库存
  779. if(goodsEntity != null) {
  780. goodsEntity.setGoodsNumber(goodsEntity.getGoodsNumber() - cartEntity.getNumber());
  781. goodsDao.update(goodsEntity);
  782. }
  783. }
  784. }
  785. }
  786. String merchOrderSn = "EMATO" + CommonUtil.generateOrderNumber();
  787. OrderEntity order = setOrderVo(user, offlineCartEntityList, user.getMerchSn());
  788. order.setStoreId(storeId);
  789. order.setMerchOrderSn(merchOrderSn);
  790. //开启事务,插入订单信息和订单商品
  791. if (order != null) {
  792. orderDao.save(order);
  793. if (null == order.getId()) {
  794. resultObj.put("errno", 400);
  795. resultObj.put("errmsg", "订单提交失败");
  796. return resultObj;
  797. }
  798. for (OfflineCartEntity cartEntity : offlineCartEntityList) {
  799. OrderGoodsEntity orderGoodsEntity = setOrderGoodsVo(order, cartEntity);
  800. //新增订单详情
  801. orderGoodsDao.save(orderGoodsEntity);
  802. }
  803. //清空预订单商品临时表
  804. offlineCartDao.deleteByUserId(userId);
  805. Map orderInfoMap = Maps.newHashMap();
  806. orderInfoMap.put("orderInfo", order);
  807. resultObj.put("errno", 0);
  808. resultObj.put("errmsg", "订单提交成功");
  809. resultObj.put("data", orderInfoMap);
  810. }
  811. } catch (Exception e) {
  812. e.printStackTrace();
  813. resultObj.put("errno", 400);
  814. resultObj.put("errmsg", "订单异常");
  815. return resultObj;
  816. }
  817. return resultObj;
  818. }
  819. /**
  820. * 设置订单数据
  821. *
  822. * @param loginUser
  823. * @return
  824. */
  825. public OrderEntity setOrderVo(SysUserEntity loginUser, List<OfflineCartEntity> offlineCartEntityList,
  826. String merchSn) {
  827. OrderEntity orderInfo = new OrderEntity();
  828. BigDecimal freightPrice = new BigDecimal(0.00);
  829. BigDecimal goodsTotalPrice = new BigDecimal(0.00);
  830. for (OfflineCartEntity offlineCartEntity : offlineCartEntityList) {
  831. goodsTotalPrice = goodsTotalPrice
  832. .add(offlineCartEntity.getRetailPrice().multiply(new BigDecimal(offlineCartEntity.getNumber())));
  833. }
  834. //订单价格计算:订单的总价+运费
  835. BigDecimal orderTotalPrice = goodsTotalPrice.add(freightPrice);
  836. //查询未使用的优惠券
  837. /*String couponName = "";
  838. BigDecimal fullCutCouponDec = Constant.ZERO;
  839. UserCouponVo couponVo = null;*/
  840. BigDecimal couponPrice = new BigDecimal(0.00);
  841. //减去其它支付的金额后,要实际支付的金额 订单的总价+运费-优惠券金额
  842. BigDecimal actualPrice = orderTotalPrice.subtract(couponPrice);
  843. //商户(拼音首字母)+业务类型+编号
  844. // String merchSn = OmsMerchPropertiesBuilder.instance().getMerchSn();
  845. // String merchShortName = OmsMerchPropertiesBuilder.instance().getMerchShortName();
  846. MerchEntity merchEntity = merchDao.findByMerchSn(merchSn);
  847. String merchShortName = "";
  848. if (merchEntity != null) {
  849. merchShortName = merchEntity.getMerchShortName();
  850. }
  851. String orderSn = merchShortName + Dict.orderBizType.item_11.getItem() + CommonUtil.generateOrderNumber();
  852. orderInfo.setOrderSn(orderSn);
  853. orderInfo.setMerchSn(merchSn);
  854. orderInfo.setUserId(Integer.parseInt(loginUser.getUserId() + ""));
  855. orderInfo.setFreightPrice(freightPrice.intValue());
  856. orderInfo.setOrderBizType(Dict.orderBizType.item_11.getItem());
  857. /*orderInfo.setCoupon_id(userCouponId);
  858. orderInfo.setCoupon_name(couponName);*/
  859. // orderInfo.setFullCutPrice(fullCutCouponDec);//使用的优惠券
  860. orderInfo.setCouponPrice(couponPrice);
  861. orderInfo.setPostscript("");//留言
  862. orderInfo.setAddTime(new Date());
  863. orderInfo.setGoodsPrice(goodsTotalPrice);
  864. orderInfo.setOrderPrice(orderTotalPrice);
  865. orderInfo.setActualPrice(actualPrice);
  866. orderInfo.setOrderType("1");
  867. orderInfo.setOrderStatus(0);// 待付款
  868. orderInfo.setShippingStatus(0);
  869. orderInfo.setPayStatus(0);
  870. orderInfo.setShippingId(0L);
  871. orderInfo.setShippingFee(Constant.ZERO);
  872. orderInfo.setIntegral(0);
  873. orderInfo.setIntegralMoney(Constant.ZERO);
  874. orderInfo.setCreateTime(new Date());
  875. orderInfo.setModTime(new Date());
  876. orderInfo.setIsOnfflineOrder(Dict.isOnfflineOrder.item_1.getItem());//线下购买
  877. /*//标记该订单已使用优惠券
  878. if(couponVo != null){
  879. couponVo.setUsed_time(new Date());
  880. couponVo.setIsUsed(Dict.isUsed.item_1.getItem());
  881. apiUserCouponMapper.update(couponVo);
  882. }*/
  883. return orderInfo;
  884. }
  885. public OrderGoodsEntity setOrderGoodsVo(OrderEntity orderInfo, OfflineCartEntity goodsItem) {
  886. GoodsEntity goodsVo = goodsDao.queryObject(goodsItem.getGoodsId());
  887. OrderGoodsEntity orderGoodsVo = new OrderGoodsEntity();
  888. orderGoodsVo.setOrderId(Integer.parseInt(orderInfo.getId() + ""));
  889. orderGoodsVo.setGoodsId(goodsItem.getGoodsId());
  890. orderGoodsVo.setGoodsSn(goodsItem.getGoodsSn());
  891. orderGoodsVo.setProductId(goodsItem.getProductId());
  892. orderGoodsVo.setGoodsName(goodsItem.getGoodsName());
  893. orderGoodsVo.setListPicUrl(goodsItem.getListPicUrl());
  894. orderGoodsVo.setMarketPrice(goodsItem.getMarketPrice());
  895. orderGoodsVo.setRetailPrice(goodsItem.getRetailPrice());
  896. orderGoodsVo.setNumber(goodsItem.getNumber());
  897. orderGoodsVo.setOrderBizType(Dict.orderBizType.item_11.getItem());
  898. orderGoodsVo.setCreateTime(new Date());
  899. orderGoodsVo.setModTime(new Date());
  900. orderGoodsVo.setGoodsRate(goodsVo.getGoodsRate());
  901. orderGoodsVo.setSku(goodsVo.getSku());
  902. return orderGoodsVo;
  903. }
  904. @Override
  905. public OrderEntity queryObjectBySysUser(Long id) {
  906. OrderEntity orderEntity = orderDao.queryObjectBySysUser(id);
  907. Map<String, Object> map = new HashMap<String, Object>();
  908. map.put("orderId", id);
  909. List<OrderGoodsEntity> orderGoodsEntityList = orderGoodsDao.queryList(map);
  910. orderEntity.setOrderGoodsEntityList(orderGoodsEntityList);
  911. return orderEntity;
  912. }
  913. @Override
  914. public int confirmPay(Long id, String payFlag,String orderSnWx) {
  915. SysUserEntity user = ShiroUtils.getUserEntity();
  916. if (user == null) {
  917. throw new RRException("用户登录超时,请重新登录");
  918. }
  919. if (!user.getRoleType().equalsIgnoreCase("2")) {
  920. throw new RRException("该操作只允许店员账户操作");
  921. }
  922. OrderEntity orderEntity = queryObject(id);
  923. if (orderEntity.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_201.getItem())) {
  924. throw new RRException("此订单已付款!");
  925. }
  926. if (orderEntity.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_301.getItem())) {
  927. throw new RRException("此订单已完成!");
  928. }
  929. if (orderEntity.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_101.getItem())) {
  930. throw new RRException("此订单已取消!");
  931. }
  932. if (orderEntity.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_102.getItem())) {
  933. throw new RRException("此订单已删除!");
  934. }
  935. orderEntity.setOrderStatus(Integer.parseInt(Dict.orderStatus.item_201.getItem()));
  936. orderEntity.setPayStatus(Integer.parseInt(Dict.payStatus.item_2.getItem()));
  937. orderEntity.setPayFlag(payFlag);
  938. orderEntity.setPayTime(new Date());
  939. if(orderSnWx != null){
  940. orderEntity.setOrderSnWx(orderSnWx);
  941. }
  942. orderDao.update(orderEntity);
  943. return 0;
  944. }
  945. @Override
  946. public List<OrderEntity> queryExportList(Map<String, Object> map) {
  947. List<OrderEntity> list = orderDao.queryExportList(map);
  948. for (OrderEntity order : list) {
  949. OrderProcessRecordEntity orderProcessRecord = orderProcessRecordDao.queryObjectByOrderSn(order.getOrderSn());
  950. order.setOrderProcessRecord(orderProcessRecord);
  951. }
  952. return list;
  953. }
  954. @Override
  955. public List<OrderEntity> queryOffilineOrderList(Map<String, Object> map) {
  956. return orderDao.queryOffilineOrderList(map);
  957. }
  958. @Override
  959. public int uploadExcel(List<OrderExpressDto> orderExpressDtoList) {
  960. SysUserEntity user = ShiroUtils.getUserEntity();
  961. boolean isFail = false;
  962. List<String> failShippingNameList = new ArrayList<>();
  963. List<String> failOrderSnList = new ArrayList<>();
  964. List<String> failShippingCodeList = new ArrayList<>();
  965. List<String> failCodeSnList = new ArrayList<>();
  966. List<String> failNameSnList = new ArrayList<>();
  967. List<String> failStatusOrderSnList = new ArrayList<>();
  968. if (orderExpressDtoList != null && orderExpressDtoList.size() > 0) {
  969. for (int i = 0; i < orderExpressDtoList.size(); i++) {
  970. OrderExpressDto orderExpressDto = orderExpressDtoList.get(i);
  971. OrderEntity orderEntity = new OrderEntity();
  972. Map<String, Object> valideDate = MapBeanUtil.fromObject(orderExpressDto);
  973. ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
  974. builder.put("orderSn", "订单编号");
  975. builder.put("shippingNo", "快递单号");
  976. builder.put("shippingName", "快递公司");
  977. builder.put("shippingCode", "快递简写");
  978. R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
  979. if (Integer.valueOf(r.get("code").toString()) != 0) {
  980. throw new RRException(r.get("msg").toString());
  981. } else {
  982. r = ValidatorUtil.isEmpty(builder.build(), valideDate);
  983. if (Integer.valueOf(r.get("code").toString()) != 0) {
  984. throw new RRException(r.get("msg").toString());
  985. }
  986. }
  987. OrderEntity order = orderDao.queryObjectByOrderSn(orderExpressDto.getOrderSn());
  988. if(order == null){
  989. isFail = true;
  990. failOrderSnList.add(orderExpressDto.getOrderSn());
  991. }else{
  992. if(!(order.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_201.getItem())
  993. && order.getPayStatus() == Integer.parseInt(Dict.payStatus.item_2.getItem()))){
  994. isFail = true;
  995. failStatusOrderSnList.add(orderExpressDto.getOrderSn());
  996. }
  997. }
  998. ShippingEntity shippingEntity = shippingDao.queryObjectByCode(orderExpressDto.getShippingCode());
  999. if(shippingEntity == null){
  1000. isFail = true;
  1001. failShippingCodeList.add(orderExpressDto.getShippingCode());
  1002. failCodeSnList.add(orderExpressDto.getOrderSn());
  1003. }else{
  1004. if(!orderExpressDto.getShippingName().equalsIgnoreCase(shippingEntity.getName())){
  1005. isFail = true;
  1006. failShippingNameList.add(orderExpressDto.getShippingName());
  1007. failNameSnList.add(orderExpressDto.getOrderSn());
  1008. }
  1009. }
  1010. if(!isFail){//false则有错误的数据
  1011. if(order != null) {// 修改商品
  1012. // orderEntity.setOrderSn(orderExpressDto.getOrderSn());
  1013. orderEntity.setShippingNo(orderExpressDto.getShippingNo());
  1014. orderEntity.setShippingCode(orderExpressDto.getShippingCode());
  1015. orderEntity.setShippingName(orderExpressDto.getShippingName());
  1016. orderEntity.setShippingStatus(Integer.parseInt(Dict.shippingStatus.item_1.getItem()));
  1017. orderEntity.setOrderStatus(Integer.parseInt(Dict.orderStatus.item_300.getItem()));
  1018. orderEntity.setModerSn(user.getUsername());
  1019. orderEntity.setCreateTime(new Date());
  1020. orderEntity.setModTime(new Date());
  1021. orderEntity.setId(order.getId());
  1022. orderDao.update(orderEntity);
  1023. }
  1024. }
  1025. }
  1026. if(failOrderSnList != null && failOrderSnList.size() > 0){
  1027. throw new RRException("导入数据异常,订单编号不存在,不存在的订单编号【"+failOrderSnList+"】,请删除掉再继续操作");
  1028. }
  1029. if(failStatusOrderSnList != null && failStatusOrderSnList.size() > 0){
  1030. throw new RRException("导入数据异常,修改订单快递功能只支持已付款未发货的订单,以下订单编号无效【"+failStatusOrderSnList+"】,请删除掉再继续操作");
  1031. }
  1032. if(failShippingCodeList != null && failShippingCodeList.size() > 0){
  1033. throw new RRException("导入数据异常,快递简写不在可支持的范围中,简写错误的订单编号【"+failCodeSnList+"】,错误的快递简写【"+failShippingCodeList+"】," +
  1034. "正确数据可下载订单页面的快递公司简写Excel中查看");
  1035. }
  1036. if(failShippingNameList != null && failShippingNameList.size() > 0){
  1037. throw new RRException("导入数据异常,快递简写对应的快递公司不一致,快递公司错误的订单编号【"+failNameSnList+"】,请修改Excel数据中订单编号对应的快递公司错误信息," +
  1038. "正确数据可下载订单页面的快递公司简写Excel中查看");
  1039. }
  1040. // if(failFreightGoodsSnList != null && failFreightGoodsSnList.size() > 0){
  1041. // exportExceptionDataEntity.setExportExceptionData("运费信息请在商城配置》运费模板中维护,运费与商户信息对应,请检查该商品商户信息下的运费是否维护,不存在的商品编码【"+failFreightGoodsSnList+"】,运费【"+failFreightList+"】");
  1042. // exportExceptionDataDao.save(exportExceptionDataEntity);
  1043. // throw new RRException("导入数据异常,异常信息请在商品管理》》商品导入异常数据中查看检查");
  1044. // }
  1045. }else{
  1046. throw new RRException("导入数据为空,或者检查商品编码数据是否为空");
  1047. }
  1048. return 1;
  1049. }
  1050. @Override
  1051. public List<OrderEntity> promOrderList(Map<String, Object> map) {
  1052. Integer[] statusList = {201};
  1053. List<OrderEntity> list = orderDao.promOrderList(map);
  1054. for (OrderEntity orderEntity: list) {
  1055. Map<String, Object> queryMap = new HashMap<>();
  1056. queryMap.put("goodsId", orderEntity.getGoodsId());
  1057. queryMap.put("statusList", statusList);
  1058. queryMap.put("orderId", orderEntity.getId());
  1059. Double promActualPrice = orderDao.getActualPriceByOutProm(queryMap);
  1060. if(promActualPrice == null){
  1061. promActualPrice = 0d;
  1062. }
  1063. orderEntity.setPromActualPrice(BigDecimal.valueOf(promActualPrice));
  1064. }
  1065. return list;
  1066. }
  1067. @Override
  1068. public int queryPromOrderTotal(Map<String, Object> map) {
  1069. return orderDao.queryPromOrderTotal(map);
  1070. }
  1071. @Override
  1072. public List<OrderEntity> promOrderListExport(Map<String, Object> map){
  1073. Integer[] statusList = {201};
  1074. List<OrderEntity> list = orderDao.promOrderListExport(map);
  1075. for (OrderEntity orderEntity: list) {
  1076. Map<String, Object> queryMap = new HashMap<>();
  1077. queryMap.put("goodsId", orderEntity.getGoodsId());
  1078. queryMap.put("orderId", orderEntity.getId());
  1079. queryMap.put("statusList", statusList);
  1080. Double promActualPrice = orderDao.getActualPriceByOutProm(queryMap);
  1081. if(promActualPrice == null){
  1082. promActualPrice = 0d;
  1083. }
  1084. orderEntity.setPromActualPrice(BigDecimal.valueOf(promActualPrice));
  1085. }
  1086. return list;
  1087. }
  1088. @Override
  1089. public List<OrderEntity> storeTopicOrderList(Map<String, Object> map) {
  1090. List<OrderEntity> list = orderDao.storeTopicOrderList(map);
  1091. return list;
  1092. }
  1093. @Override
  1094. public int queryStoreTopicOrderTotal(Map<String, Object> map) {
  1095. return orderDao.queryStoreTopicOrderTotal(map);
  1096. }
  1097. }