UserOrderServiceImpl.java 66 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787
  1. package com.izouma.awesomeadmin.service.impl;
  2. import com.izouma.awesomeadmin.constant.AppConstant;
  3. import com.izouma.awesomeadmin.dao.*;
  4. import com.izouma.awesomeadmin.dto.Page;
  5. import com.izouma.awesomeadmin.dto.Result;
  6. import com.izouma.awesomeadmin.dto.WxPayRefundData;
  7. import com.izouma.awesomeadmin.model.*;
  8. import com.izouma.awesomeadmin.service.*;
  9. import com.izouma.awesomeadmin.util.*;
  10. import org.apache.commons.lang.StringUtils;
  11. import org.apache.log4j.Logger;
  12. import org.jdom.Element;
  13. import org.jdom.input.SAXBuilder;
  14. import org.json.JSONObject;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Service;
  17. import org.xml.sax.InputSource;
  18. import javax.servlet.http.HttpServletRequest;
  19. import javax.servlet.http.HttpServletResponse;
  20. import javax.servlet.http.HttpSession;
  21. import java.io.BufferedOutputStream;
  22. import java.io.IOException;
  23. import java.io.StringReader;
  24. import java.math.BigDecimal;
  25. import java.util.Date;
  26. import java.util.HashMap;
  27. import java.util.List;
  28. import java.util.Map;
  29. /**
  30. * service接口实现类
  31. */
  32. @Service
  33. public class UserOrderServiceImpl implements UserOrderService {
  34. private static Logger logger = Logger.getLogger(UserOrderServiceImpl.class);
  35. @Autowired
  36. private UserOrderMapper userOrderMapper;
  37. @Autowired
  38. private UserInfoService userInfoService;
  39. @Autowired
  40. private WxpayTempMapper wxpayTempMapper;
  41. @Autowired
  42. private MemberPointService memberPointService;
  43. @Autowired
  44. private MemberCoinService memberCoinService;
  45. @Autowired
  46. private AlipayTempMapper alipayTempMapper;
  47. @Autowired
  48. private UserAddressMapper userAddressMapper;
  49. @Autowired
  50. private OrderAddressMapper orderAddressMapper;
  51. @Autowired
  52. private SystemConfigMapper systemConfigMapper;
  53. @Autowired
  54. private OrderRepairMapper orderRepairMapper;
  55. @Autowired
  56. private ProductInfoMapper productInfoMapper;
  57. @Autowired
  58. private StoreInfoService storeInfoService;
  59. @Autowired
  60. private RechargeRecordMapper rechargeRecordMapper;
  61. @Autowired
  62. private UserCouponMapper userCouponMapper;
  63. @Autowired
  64. private CouponDetailMapper couponDetailMapper;
  65. @Autowired
  66. private OrderImageService orderImageService;
  67. @Autowired
  68. private OrderAlbumMapper orderAlbumMapper;
  69. @Autowired
  70. private OSSFileService OSSFileService;
  71. @Autowired
  72. private ActivityInfoService activityInfoService;
  73. @Autowired
  74. private OrderAcceptLogMapper orderAcceptLogMapper;
  75. @Autowired
  76. private OrderAlbumRepairMapper orderAlbumRepairMapper;
  77. @Autowired
  78. private ClientNoticeService clientNoticeService;
  79. @Autowired
  80. private ClientOrderService clientOrderService;
  81. @Override
  82. public List<UserOrder> getUserOrderList(UserOrder record) {
  83. logger.info("getUserOrderList");
  84. try {
  85. return userOrderMapper.queryAllUserOrder(record);
  86. } catch (Exception e) {
  87. logger.error("getUserOrderList", e);
  88. }
  89. return null;
  90. }
  91. @Override
  92. public List<UserOrder> getTop10UserOrderList(UserOrder record) {
  93. logger.info("getTop10UserOrderList");
  94. try {
  95. return userOrderMapper.queryTop10UserOrder(record);
  96. } catch (Exception e) {
  97. logger.error("getTop10UserOrderList", e);
  98. }
  99. return null;
  100. }
  101. @Override
  102. public List<UserOrder> getUserOrderByPage(Page page, UserOrder record) {
  103. logger.info("getUserOrderByPage");
  104. try {
  105. Map<String, Object> parameter = new HashMap<String, Object>();
  106. parameter.put("record", record);
  107. parameter.put(AppConstant.PAGE, page);
  108. return userOrderMapper.queryUserOrderByPage(parameter);
  109. } catch (Exception e) {
  110. logger.error("getUserOrderByPage", e);
  111. }
  112. return null;
  113. }
  114. @Override
  115. public UserOrder getUserOrderById(String id) {
  116. logger.info("getUserOrderyId");
  117. try {
  118. return userOrderMapper.selectByPrimaryKey(Integer.valueOf(id));
  119. } catch (Exception e) {
  120. logger.error("getUserOrderById", e);
  121. }
  122. return null;
  123. }
  124. @Override
  125. public UserOrder getUserOrder(UserOrder record) {
  126. logger.info("getUserOrder");
  127. try {
  128. return userOrderMapper.queryUserOrder(record);
  129. } catch (Exception e) {
  130. logger.error("getUserOrder", e);
  131. }
  132. return null;
  133. }
  134. @Override
  135. public boolean createUserOrder(UserOrder record) {
  136. logger.info("createUserOrder");
  137. try {
  138. record.setOrderCode(MbappUtil.getOrderIdByUUId());
  139. if (record.getQuantity() != null && record.getUnitPrice() != null) {
  140. BigDecimal unitPrice = record.getUnitPrice();
  141. /**
  142. * 计算价格开始
  143. */
  144. ProductInfo productInfo = new ProductInfo();
  145. productInfo.setId(record.getProductId());
  146. productInfo = productInfoMapper.queryProductInfo(productInfo);
  147. if (productInfo != null) {
  148. unitPrice = productInfo.getPrice();
  149. if (productInfo.getProductPriceList() != null && productInfo.getProductPriceList().size() > 0) {
  150. for (ProductPrice productPrice : productInfo.getProductPriceList()) {
  151. if (productPrice.getMaxCounts() != null
  152. && productPrice.getMinCounts() != null
  153. && record.getQuantity() <= productPrice.getMaxCounts()
  154. && record.getQuantity() >= productPrice.getMinCounts()) {
  155. unitPrice = productPrice.getPrice();
  156. } else if (productPrice.getMaxCounts() == null
  157. && productPrice.getMinCounts() != null
  158. && record.getQuantity() >= productPrice.getMinCounts()) {
  159. unitPrice = productPrice.getPrice();
  160. } else if (productPrice.getMinCounts() == null
  161. && productPrice.getMaxCounts() != null
  162. && record.getQuantity() <= productPrice.getMaxCounts()) {
  163. unitPrice = productPrice.getPrice();
  164. }
  165. }
  166. }
  167. }
  168. /**
  169. * 计算价格结束
  170. */
  171. BigDecimal totlePrice = unitPrice.multiply(BigDecimal.valueOf(record.getQuantity()));
  172. record.setTotlePrice(totlePrice);
  173. BigDecimal dealPrice = totlePrice;
  174. /**
  175. * 优惠券
  176. */
  177. if (record.getUserCouponId() != null) {
  178. UserCoupon userCoupon = userCouponMapper.selectByPrimaryKey(record.getUserCouponId());
  179. if (userCoupon != null) {
  180. if (record.getStoreId().equals(userCoupon.getStoreId())) {//订单ID和优惠券ID相等
  181. CouponInfo couponInfo = userCoupon.getCouponInfo();
  182. if (couponInfo != null) {
  183. if (new Date().after(couponInfo.getBeginTime()) && new Date().before(couponInfo.getEndTime())) {//在可用时间内
  184. BigDecimal discountMoney = couponInfo.getDiscountMoney();
  185. BigDecimal limitMoney = couponInfo.getLimitMoney();
  186. if (totlePrice.compareTo(limitMoney) > 0) {
  187. dealPrice = totlePrice.subtract(discountMoney);
  188. userCoupon.setIsUsed("Y");
  189. userCouponMapper.updateByPrimaryKeySelective(userCoupon);
  190. CouponDetail couponDetail = new CouponDetail();
  191. couponDetail.setId(userCoupon.getCouponDetailId());
  192. couponDetail.setUseTime(new Date());
  193. couponDetail.setUseFlag("Y");
  194. couponDetailMapper.updateByPrimaryKeySelective(couponDetail);
  195. }
  196. }
  197. }
  198. }
  199. }
  200. }
  201. record.setDealPrice(dealPrice);
  202. record.setOffPrice(totlePrice.subtract(dealPrice));
  203. double point = 0;
  204. UserInfo userInfo = new UserInfo();
  205. userInfo.setId(record.getUserId());
  206. userInfo = userInfoService.getSingleUserInfo(userInfo);
  207. if (userInfo == null) {
  208. return false;
  209. }
  210. double moneyPoint = userInfo.getMoneyPoint();
  211. if (record.getPoint() != null && record.getPoint().compareTo(BigDecimal.ZERO) > 0) {
  212. point = record.getPoint().doubleValue();
  213. if (record.getPoint().doubleValue() > moneyPoint) {
  214. point = moneyPoint;
  215. }
  216. }
  217. record.setPoint(BigDecimal.valueOf(point));
  218. record.setDealPrice(dealPrice.subtract(BigDecimal.valueOf(point)));//成交价减去积分
  219. int updates = userOrderMapper.insertSelective(record);
  220. if (StringUtils.isNotEmpty(record.getUserAddressId())) {
  221. UserAddress userAddress = userAddressMapper.selectByPrimaryKey(Integer.valueOf(record.getUserAddressId()));
  222. if (userAddress != null) {
  223. OrderAddress orderAddress = new OrderAddress();
  224. orderAddress.setOrderId(record.getId());
  225. orderAddress.setUserId(record.getUserId());
  226. orderAddress.setRealName(userAddress.getRealName());
  227. orderAddress.setTelephone(userAddress.getTelephone());
  228. orderAddress.setPostcode(userAddress.getPostcode());
  229. orderAddress.setAddress(userAddress.getAddress());
  230. orderAddress.setAddressDetail(userAddress.getAddressDetail());
  231. orderAddress.setUserAddressId(record.getUserAddressId());
  232. orderAddressMapper.insertSelective(orderAddress);
  233. }
  234. }
  235. //购买减库存。
  236. if (productInfo != null) {
  237. ProductInfo updateProduct = new ProductInfo();
  238. updateProduct.setId(productInfo.getId());
  239. updateProduct.setInventory(productInfo.getInventory() - record.getQuantity());
  240. updateProduct.setSalesVolume(productInfo.getSalesVolume() + record.getQuantity());
  241. productInfoMapper.updateByPrimaryKeySelective(updateProduct);
  242. }
  243. if (updates > 0) {
  244. if (point > 0) {
  245. //积分兑换区 只能用商城积分
  246. MemberPoint memberPoint = new MemberPoint();
  247. memberPoint.setCreateUser("web消费");
  248. memberPoint.setOrderId(record.getId() + "");
  249. memberPoint.setUserId(record.getUserId() + "");
  250. memberPoint.setMoney(String.valueOf(-point + 0.0));
  251. memberPoint.setBalance(String.valueOf(moneyPoint - point));
  252. memberPoint.setTypeFlag(AppConstant.CoinType.CONSUMPTION);
  253. memberPoint.setRemark("消费,订单号:" + record.getOrderCode());
  254. memberPointService.createMemberPoint(memberPoint);
  255. UserInfo updateUser = new UserInfo();
  256. updateUser.setId(record.getUserId());
  257. updateUser.setMoneyPoint(moneyPoint - point);
  258. userInfoService.updateUserInfo(updateUser);
  259. }
  260. return true;
  261. }
  262. }
  263. } catch (Exception e) {
  264. logger.error("createUserOrder", e);
  265. }
  266. return false;
  267. }
  268. @Override
  269. public boolean deleteUserOrder(String id) {
  270. logger.info("deleteUserOrder");
  271. try {
  272. int updates = userOrderMapper.delete(id);
  273. if (updates > 0) {
  274. return true;
  275. }
  276. } catch (Exception e) {
  277. logger.error("deleteUserOrder", e);
  278. }
  279. return false;
  280. }
  281. @Override
  282. public boolean updateUserOrder(UserOrder record) {
  283. logger.info("updateUserOrder");
  284. try {
  285. int updates = userOrderMapper.updateByPrimaryKeySelective(record);
  286. if (updates > 0) {
  287. return true;
  288. }
  289. } catch (Exception e) {
  290. logger.error("updateUserOrder", e);
  291. }
  292. return false;
  293. }
  294. @Override
  295. public Result payOrder(String orderId, double coin, double point, double cash, int payMode) {
  296. logger.info("payOrder:支付订单");
  297. try {
  298. UserOrder userOrder = new UserOrder();
  299. userOrder.setId(Integer.valueOf(orderId));
  300. userOrder = userOrderMapper.queryUserOrder(userOrder);
  301. if (userOrder == null) {
  302. return new Result(false, "支付失败,订单不存在");
  303. }
  304. double money = userOrder.getDealPrice().doubleValue();
  305. point = 0;//目前不需要支付时扣积分。
  306. if (AppConstant.PayMode.COIN == payMode) {
  307. //如果支付总额不足则用余额补足;
  308. if (money > (coin + point + cash)) {
  309. coin = money - point - cash;
  310. }
  311. }
  312. UserInfo userInfo = userInfoService.getUserInfoById(userOrder.getUserId() + "");
  313. if (userInfo == null) {
  314. return new Result(false, "支付失败,用户不存在!");
  315. }
  316. /**
  317. * 余额
  318. */
  319. double moneyCoin = userInfo.getMoneyCoin();
  320. if (coin > moneyCoin) {
  321. return new Result(false, "支付失败,余额不足");
  322. }
  323. /**
  324. * 商城积分
  325. */
  326. double moneyPoint = userInfo.getMoneyPoint();
  327. if (point > moneyPoint) {
  328. return new Result(false, "支付失败,商城积分不足");
  329. }
  330. if (money > (coin + point + cash)) {
  331. return new Result(false, "支付失败,金额不足");
  332. }
  333. if (point > 0) {
  334. //积分兑换区 只能用商城积分
  335. MemberPoint memberPoint = new MemberPoint();
  336. memberPoint.setCreateUser("系统");
  337. memberPoint.setOrderId(orderId);
  338. memberPoint.setUserId(userOrder.getUserId() + "");
  339. memberPoint.setMoney(String.valueOf(-point + 0.0));
  340. memberPoint.setBalance(String.valueOf(moneyPoint - point));
  341. memberPoint.setTypeFlag(AppConstant.CoinType.CONSUMPTION);
  342. memberPoint.setRemark("购买商品消费,订单号:" + userOrder.getOrderCode());
  343. memberPointService.createMemberPoint(memberPoint);
  344. }
  345. // 个人店铺,只能用余额支付
  346. if (coin > 0) {
  347. MemberCoin memberCoin = new MemberCoin();
  348. memberCoin.setCreateUser("系统");
  349. memberCoin.setOrderId(orderId);
  350. memberCoin.setUserId(userOrder.getUserId() + "");
  351. memberCoin.setMoney(String.valueOf(-coin + 0.0));
  352. memberCoin.setBalance(String.valueOf(moneyCoin - coin));
  353. memberCoin.setTypeFlag(AppConstant.CoinType.CONSUMPTION);
  354. memberCoin.setRemark("购买积分商品消费,订单号:" + userOrder.getOrderCode());
  355. memberCoinService.createMemberCoin(memberCoin);
  356. }
  357. UserInfo updateUser = new UserInfo();
  358. updateUser.setId(userOrder.getUserId());
  359. updateUser.setMoneyCoin(moneyCoin - coin);
  360. updateUser.setMoneyPoint(moneyPoint - point);
  361. userInfoService.updateUserInfo(updateUser);
  362. //更新为已经支付
  363. UserOrder userOrderPay = new UserOrder();
  364. userOrderPay.setId(Integer.valueOf(orderId));
  365. userOrderPay.setCoin(BigDecimal.valueOf(coin));
  366. //userOrderPay.setPoint(BigDecimal.valueOf(point));
  367. userOrderPay.setCash(BigDecimal.valueOf(cash));
  368. userOrderPay.setPayMode(payMode);
  369. userOrderPay.setPayTime(new Date());
  370. userOrderPay.setStatusFlag(AppConstant.OrderStatus.PAY_OVER);
  371. userOrderMapper.updateByPrimaryKeySelective(userOrderPay);
  372. /**
  373. * 发送短信通知商家 begin
  374. */
  375. ProductInfo productInfo = userOrder.getProductInfo();
  376. if (productInfo != null) {
  377. UserInfo shangJiaUser = userInfoService.getUserInfoById(productInfo.getStoreInfo().getUserId() + "");
  378. if (shangJiaUser != null) {
  379. MsgUtil.sendOrderSms(shangJiaUser.getPhone(), userOrder.getOrderCode(), "完成付款");
  380. }
  381. }
  382. /**
  383. * 发送短信通知商家 end
  384. */
  385. return new Result(true, "支付成功");
  386. } catch (Exception e) {
  387. logger.error("payOrder:支付订单异常", e);
  388. }
  389. return new Result(false, "支付失败");
  390. }
  391. @Override
  392. public double calculatedPrice(String orderId, double coin, double point) {
  393. logger.info("calculatedPrice:计算价格");
  394. try {
  395. UserOrder userOrder = new UserOrder();
  396. userOrder.setId(Integer.valueOf(orderId));
  397. userOrder = userOrderMapper.queryUserOrder(userOrder);
  398. double money = userOrder.getDealPrice().doubleValue();
  399. point = 0;//目前不需要支付时扣积分。
  400. double cash = money - coin - point;
  401. return cash;
  402. } catch (Exception e) {
  403. logger.error("calculatedPrice:计算价格异常", e);
  404. }
  405. return 0;
  406. }
  407. @Override
  408. public Result payOrder(HttpServletRequest request, HttpServletResponse response) {
  409. logger.info("payOrder:支付订单");
  410. try {
  411. System.out.print("微信支付回调数据开始");
  412. String inputLine;
  413. String notityXml = "";
  414. String resXml = "";
  415. try {
  416. while ((inputLine = request.getReader().readLine()) != null) {
  417. notityXml += inputLine;
  418. }
  419. request.getReader().close();
  420. } catch (Exception e) {
  421. e.printStackTrace();
  422. }
  423. System.out.println("接收到的报文:" + notityXml);
  424. Map m = WeixinUtil.xmlToMap(notityXml);
  425. if ("SUCCESS".equals(m.get("result_code").toString())) {
  426. //支付成功
  427. resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>" + "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";
  428. String attach = m.get("attach").toString();
  429. JSONObject attachJson = new JSONObject(attach);
  430. payOrder(attachJson.getString("orderId"), attachJson.getDouble("coin"),
  431. attachJson.getDouble("point"), attachJson.getDouble("cash"), AppConstant.PayMode.WEI_XIN);
  432. WxpayTemp wxpayTemp = new WxpayTemp();
  433. wxpayTemp.setOrderId(attachJson.getString("orderId"));
  434. wxpayTemp.setCoin(BigDecimal.valueOf(attachJson.getDouble("coin")));
  435. wxpayTemp.setPoint(BigDecimal.valueOf(attachJson.getDouble("point")));
  436. wxpayTemp.setCash(BigDecimal.valueOf(attachJson.getDouble("cash")));
  437. wxpayTemp.setTotalAmount(BigDecimal.valueOf(attachJson.getInt("total") / 100.0));
  438. wxpayTemp.setOutTradeNo(m.get("out_trade_no").toString());
  439. wxpayTemp.setTransactionId(m.get("transaction_id").toString());
  440. wxpayTemp.setTypeFlag(AppConstant.Aliapi.BUY);
  441. wxpayTempMapper.insertSelective(wxpayTemp);
  442. } else {
  443. resXml = "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>" + "<return_msg><![CDATA[报文为空]]></return_msg>" + "</xml> ";
  444. }
  445. System.out.println("微信支付回调数据结束");
  446. HttpSession seesion = request.getSession();
  447. seesion.setAttribute("notify", "微信支付回调");
  448. try {
  449. BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
  450. out.write(resXml.getBytes());
  451. out.flush();
  452. out.close();
  453. } catch (IOException e) {
  454. // TODO Auto-generated catch block
  455. e.printStackTrace();
  456. }
  457. } catch (Exception e) {
  458. logger.error("payOrder:支付订单异常", e);
  459. }
  460. return new Result(false, "支付失败");
  461. }
  462. @Override
  463. public Result recharge(HttpServletRequest request, HttpServletResponse response) {
  464. logger.info("recharge:支付充值");
  465. try {
  466. System.out.print("微信支付回调数据开始 支付充值");
  467. String inputLine;
  468. String notityXml = "";
  469. String resXml = "";
  470. try {
  471. while ((inputLine = request.getReader().readLine()) != null) {
  472. notityXml += inputLine;
  473. }
  474. request.getReader().close();
  475. } catch (Exception e) {
  476. e.printStackTrace();
  477. }
  478. System.out.println("接收到的报文:" + notityXml);
  479. Map m = WeixinUtil.xmlToMap(notityXml);
  480. if ("SUCCESS".equals(m.get("result_code").toString())) {
  481. //支付成功
  482. resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>" + "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";
  483. String attach = m.get("attach").toString();
  484. JSONObject attachJson = new JSONObject(attach);
  485. Integer userId = attachJson.getInt("userId");
  486. Integer money = attachJson.getInt("money") / 100;
  487. UserInfo userInfo = userInfoService.getUserInfoById(userId + "");
  488. /**
  489. * 余额
  490. */
  491. double moneyCoin = userInfo.getMoneyCoin();
  492. UserInfo updateUser = new UserInfo();
  493. updateUser.setId(userId);
  494. updateUser.setMoneyCoin(moneyCoin + money);
  495. userInfoService.updateUserInfo(updateUser);
  496. MemberCoin memberCoin = new MemberCoin();
  497. memberCoin.setCreateUser("微信充值");
  498. memberCoin.setUserId(userId + "");
  499. memberCoin.setMoney(String.valueOf(money));
  500. memberCoin.setBalance(String.valueOf(moneyCoin + money));
  501. memberCoin.setTypeFlag(AppConstant.CoinType.RECHARGE);
  502. memberCoin.setRemark("微信充值," + money);
  503. memberCoinService.createMemberCoin(memberCoin);
  504. WxpayTemp wxpayTemp = new WxpayTemp();
  505. wxpayTemp.setUserId(String.valueOf(userId));
  506. wxpayTemp.setOutTradeNo(m.get("out_trade_no").toString());
  507. wxpayTemp.setTransactionId(m.get("transaction_id").toString());
  508. wxpayTemp.setTotalAmount(BigDecimal.valueOf(money));
  509. wxpayTemp.setTypeFlag(AppConstant.Aliapi.RECHARGE);
  510. wxpayTempMapper.insertSelective(wxpayTemp);
  511. //充值记录
  512. RechargeRecord rechargeRecord = new RechargeRecord();
  513. rechargeRecord.setCreateUser("系统");
  514. rechargeRecord.setUserId(userInfo.getId());
  515. rechargeRecord.setTypeFlag(1);
  516. rechargeRecord.setMoney(BigDecimal.valueOf(money));
  517. rechargeRecord.setCash(BigDecimal.valueOf(money));
  518. rechargeRecord.setBalance(BigDecimal.valueOf(moneyCoin + money));
  519. rechargeRecord.setOutTradeNo(wxpayTemp.getOutTradeNo());
  520. rechargeRecord.setRemark("微信充值," + money);
  521. rechargeRecordMapper.insertSelective(rechargeRecord);
  522. //充值送积分
  523. activityInfoService.rechargeSongMoney(rechargeRecord);
  524. } else {
  525. resXml = "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>" + "<return_msg><![CDATA[报文为空]]></return_msg>" + "</xml> ";
  526. }
  527. System.out.println("微信支付回调数据结束");
  528. HttpSession seesion = request.getSession();
  529. seesion.setAttribute("notify", "微信支付回调");
  530. try {
  531. BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
  532. out.write(resXml.getBytes());
  533. out.flush();
  534. out.close();
  535. } catch (IOException e) {
  536. // TODO Auto-generated catch block
  537. e.printStackTrace();
  538. }
  539. } catch (Exception e) {
  540. logger.error("payOrder:支付订单异常", e);
  541. }
  542. return new Result(false, "支付失败");
  543. }
  544. @SuppressWarnings({"rawtypes", "unchecked"})
  545. private Map parseXmlToList2(String xml) {
  546. Map retMap = new HashMap();
  547. try {
  548. StringReader read = new StringReader(xml);
  549. // 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
  550. InputSource source = new InputSource(read);
  551. // 创建一个新的SAXBuilder
  552. SAXBuilder sb = new SAXBuilder();
  553. // 通过输入源构造一个Document
  554. org.jdom.Document doc = sb.build(source);
  555. Element root = (Element) doc.getRootElement();// 指向根节点
  556. List<Element> es = root.getChildren();
  557. if (es != null && es.size() != 0) {
  558. for (Element element : es) {
  559. retMap.put(element.getName(), element.getValue());
  560. }
  561. }
  562. } catch (Exception e) {
  563. e.printStackTrace();
  564. }
  565. return retMap;
  566. }
  567. /**
  568. * <p>支付宝支付成功回调接口。</p>
  569. *
  570. * @param tradeNo
  571. * @param tradeStatus
  572. */
  573. @Override
  574. public void alipaySuccess(String tradeNo, String tradeStatus) {
  575. logger.info("alipaySuccess:支付宝支付成功回调接口 tradeNo:" + tradeNo + ", tradeStatus:" + tradeStatus);
  576. try {
  577. AlipayTemp alipayTemp = new AlipayTemp();
  578. alipayTemp.setOutTradeNo(tradeNo);
  579. alipayTemp = alipayTempMapper.queryAlipayTemp(alipayTemp);
  580. if (alipayTemp != null) {
  581. if (!AppConstant.Aliapi.TRADE_SUCCESS.equals(alipayTemp.getTradeStatus())) {
  582. payOrder(alipayTemp.getOrderId() + "", alipayTemp.getCoin().doubleValue(),
  583. alipayTemp.getPoint().doubleValue(), alipayTemp.getCash().doubleValue(), AppConstant.PayMode.ALIPAY);
  584. alipayTemp.setTradeStatus(tradeStatus);
  585. alipayTempMapper.updateByPrimaryKeySelective(alipayTemp);
  586. }
  587. }
  588. } catch (Exception e) {
  589. logger.error("alipaySuccess:支付宝支付成功回调接口异常 tradeNo:" + tradeNo + ", tradeStatus:" + tradeStatus, e);
  590. }
  591. }
  592. @Override
  593. public Result cancel(UserOrder record) {
  594. logger.info("cancel:取消订单");
  595. try {
  596. UserOrder userOrder = userOrderMapper.selectByPrimaryKey(record.getId());
  597. if (userOrder != null) {
  598. if (AppConstant.OrderStatus.NO_PAY == userOrder.getStatusFlag()) {
  599. record.setStatusFlag(AppConstant.OrderStatus.CANCEL);
  600. userOrderMapper.updateByPrimaryKeySelective(record);
  601. /**
  602. * 获取产品信息
  603. */
  604. ProductInfo productInfo = new ProductInfo();
  605. productInfo.setId(userOrder.getProductId());
  606. productInfo = productInfoMapper.queryProductInfo(productInfo);
  607. //取消加库存库存。
  608. if (productInfo != null) {
  609. ProductInfo updateProduct = new ProductInfo();
  610. updateProduct.setId(productInfo.getId());
  611. updateProduct.setInventory(productInfo.getInventory() + userOrder.getQuantity());
  612. updateProduct.setSalesVolume(productInfo.getSalesVolume() - userOrder.getQuantity());
  613. productInfoMapper.updateByPrimaryKeySelective(updateProduct);
  614. }
  615. /**
  616. * 如果有优惠券,则还原
  617. */
  618. if (userOrder.getUserCouponId() != null) {
  619. UserCoupon userCoupon = userCouponMapper.selectByPrimaryKey(userOrder.getUserCouponId());
  620. if (userCoupon != null) {
  621. CouponInfo couponInfo = userCoupon.getCouponInfo();
  622. if (couponInfo != null) {
  623. userCoupon.setIsUsed("N");
  624. userCouponMapper.updateByPrimaryKeySelective(userCoupon);
  625. CouponDetail couponDetail = new CouponDetail();
  626. couponDetail.setId(userCoupon.getCouponDetailId());
  627. couponDetail.setUseTime(new Date());
  628. couponDetail.setUseFlag("N");
  629. couponDetailMapper.updateByPrimaryKeySelective(couponDetail);
  630. }
  631. }
  632. }
  633. if (userOrder.getPoint() != null && userOrder.getPoint().compareTo(BigDecimal.ZERO) > 0) {
  634. double point = userOrder.getPoint().doubleValue();
  635. UserInfo userInfo = new UserInfo();
  636. userInfo.setId(record.getUserId());
  637. userInfo = userInfoService.getSingleUserInfo(userInfo);
  638. if (userInfo == null) {
  639. return new Result(false, "用户不存在");
  640. }
  641. double moneyPoint = userInfo.getMoneyPoint();
  642. //积分兑换区 只能用商城积分
  643. MemberPoint memberPoint = new MemberPoint();
  644. memberPoint.setCreateUser("取消订单退还");
  645. memberPoint.setOrderId(userOrder.getId() + "");
  646. memberPoint.setUserId(userOrder.getUserId() + "");
  647. memberPoint.setMoney(String.valueOf(point));
  648. memberPoint.setBalance(String.valueOf(moneyPoint + point));
  649. memberPoint.setTypeFlag(AppConstant.CoinType.FAN_HUAN);
  650. memberPoint.setRemark("取消订单,订单号:" + userOrder.getOrderCode());
  651. memberPointService.createMemberPoint(memberPoint);
  652. UserInfo updateUser = new UserInfo();
  653. updateUser.setId(record.getUserId());
  654. updateUser.setMoneyPoint(moneyPoint + point);
  655. userInfoService.updateUserInfo(updateUser);
  656. }
  657. }
  658. }
  659. return new Result(true, "cancel:取消订单成功");
  660. } catch (Exception e) {
  661. logger.error("cancel:取消订单异常", e);
  662. }
  663. return new Result(false, "cancel:取消订单失败");
  664. }
  665. @Override
  666. public Result confirm(UserOrder record) {
  667. logger.info("confirm:确认完成订单");
  668. try {
  669. UserOrder userOrder = userOrderMapper.selectByPrimaryKey(record.getId());
  670. if (userOrder != null) {
  671. boolean confirmFlag = false;
  672. if (AppConstant.ProductType.IMAGE.equals(userOrder.getProductType())) {
  673. if (AppConstant.OrderStatus.ACCEPT == userOrder.getStatusFlag() ||
  674. AppConstant.OrderStatus.REWORK == userOrder.getStatusFlag()) {//修图完成
  675. if ("order_image".equals(record.getAcceptType()) || "image_album".equals(record.getAcceptType())) {
  676. confirmFlag = true;
  677. record.setStatusFlag(AppConstant.OrderStatus.FINISH);
  678. record.setConfirmTime(new Date());
  679. }
  680. }
  681. if (AppConstant.OrderAlbumStatus.WAIT_ACCEPT == userOrder.getAlbumStatus() ||
  682. AppConstant.OrderAlbumStatus.REWORK == userOrder.getAlbumStatus()) {//修图完成
  683. if ("order_album".equals(record.getAcceptType()) || "image_album".equals(record.getAcceptType())) {
  684. confirmFlag = true;
  685. record.setAlbumStatus(AppConstant.OrderAlbumStatus.FINISH);
  686. record.setAlbumConfirmTime(new Date());
  687. }
  688. }
  689. } else if (AppConstant.ProductType.PHYSICAL.equals(userOrder.getProductType())) {
  690. if (AppConstant.OrderStatus.PAY_OVER == userOrder.getStatusFlag()) {//已发货
  691. confirmFlag = true;
  692. record.setStatusFlag(AppConstant.OrderStatus.FINISH);
  693. record.setConfirmTime(new Date());
  694. }
  695. }
  696. if (confirmFlag) {
  697. userOrderMapper.updateByPrimaryKeySelective(record);
  698. //结算商家
  699. //jieSuan(userOrder.getId() + "");
  700. //
  701. // try {
  702. //
  703. // ClientNotice clientNotice = new ClientNotice();
  704. // clientNotice.setClientOrderId(userOrder.getClientOrderId());
  705. // clientNotice.setOrderId(userOrder.getId());
  706. // clientNotice.setUserId(userOrder.getUserId());
  707. // clientNotice.setProductId(userOrder.getProductId());
  708. // clientNotice.setStoreId(userOrder.getStoreId());
  709. // clientNotice.setTypeFlag(AppConstant.ClientNoticeType.CONFIRM);
  710. //
  711. // clientNoticeService.createClientNotice(clientNotice);
  712. // } catch (Exception e) {
  713. // logger.error("确认完成通知异常", e);
  714. // }
  715. if ("order_image".equals(record.getAcceptType()) || "image_album".equals(record.getAcceptType())) {
  716. /**
  717. * 获取产品信息
  718. */
  719. ProductInfo productInfo = new ProductInfo();
  720. productInfo.setId(userOrder.getProductId());
  721. productInfo = productInfoMapper.queryProductInfo(productInfo);
  722. //取消加库存库存。
  723. if (productInfo != null) {
  724. ProductInfo updateProduct = new ProductInfo();
  725. updateProduct.setId(productInfo.getId());
  726. updateProduct.setInventory(productInfo.getInventory() + userOrder.getQuantity());
  727. productInfoMapper.updateByPrimaryKeySelective(updateProduct);
  728. }
  729. //计算返片率
  730. storeInfoService.calculateRate(userOrder.getStoreId() + "");
  731. }
  732. if ("Y".equals(userOrder.getClientFlag())) {
  733. //clientOrderService.confirm(userOrder.getClientOrderId());
  734. clientOrderService.confirm(null);
  735. }
  736. }
  737. }
  738. return new Result(true, "confirm:确认完成成功");
  739. } catch (Exception e) {
  740. logger.error("confirm:确认完成异常", e);
  741. }
  742. return new Result(false, "confirm:确认完成失败");
  743. }
  744. @Override
  745. public Result jieSuan(String orderId) {
  746. logger.info("jieSuan:结算订单");
  747. try {
  748. UserOrder userOrder = new UserOrder();
  749. userOrder.setId(Integer.valueOf(orderId));
  750. userOrder = userOrderMapper.queryUserOrder(userOrder);
  751. if (userOrder != null) {
  752. if ((AppConstant.OrderStatus.FINISH == userOrder.getStatusFlag() || AppConstant.OrderStatus.END == userOrder.getStatusFlag())
  753. && !"Y".equals(userOrder.getJieSuan())) {
  754. if ((userOrder.getAlbumQuantity() > 0 && AppConstant.OrderAlbumStatus.FINISH == userOrder.getAlbumStatus()) || userOrder.getAlbumQuantity() <= 0) {
  755. MemberCoin checkMemberCoin = new MemberCoin();
  756. checkMemberCoin.setUserId(userOrder.getProductInfo().getStoreInfo().getUserId() + "");
  757. checkMemberCoin.setOrderId(orderId);
  758. checkMemberCoin.setTypeFlag(AppConstant.CoinType.SALE);
  759. checkMemberCoin = memberCoinService.getMemberCoin(checkMemberCoin);
  760. if (checkMemberCoin == null) {
  761. StoreInfo storeInfo = userOrder.getProductInfo().getStoreInfo();
  762. UserInfo shangJiaUser = userInfoService.getUserInfoById(storeInfo.getUserId() + "");
  763. SystemConfig systemConfig = systemConfigMapper.selectByPrimaryKey(1);
  764. //double money = userOrder.getDealPrice().doubleValue();
  765. //double money = userOrder.getTotlePrice().doubleValue();
  766. double money = userOrder.getDealPrice().doubleValue();
  767. //如果使用积分支付,结算时需要加上积分的值。
  768. if (userOrder.getPoint() != null && userOrder.getPoint().compareTo(BigDecimal.ZERO) > 0) {
  769. money = money + userOrder.getPoint().doubleValue();
  770. }
  771. double shangJiaCoin = shangJiaUser.getMoneyCoin();
  772. double fee = 0;
  773. if ("Y".equals(systemConfig.getUseFlag())) {//使用默认抽成比率
  774. fee = money * Double.valueOf(systemConfig.getOrderRate()) / 100.0;
  775. }
  776. if ("Y".equals(storeInfo.getRateFlag())) {//如果使用店铺自己的抽成比率
  777. fee = money * Double.valueOf(storeInfo.getOrderRate()) / 100.0;
  778. }
  779. BigDecimal bd = new BigDecimal(fee);
  780. BigDecimal bd2 = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
  781. fee = bd2.doubleValue();
  782. if (money < fee) {
  783. fee = money;
  784. }
  785. //更新商家余额
  786. MemberCoin memberCoin = new MemberCoin();
  787. memberCoin.setCreateUser("系统");
  788. memberCoin.setUserId(shangJiaUser.getId() + "");
  789. memberCoin.setOrderId(orderId);
  790. memberCoin.setMoney(String.valueOf(money - fee));
  791. memberCoin.setBalance(String.valueOf(shangJiaCoin + money - fee));
  792. memberCoin.setTypeFlag(AppConstant.CoinType.SALE);
  793. memberCoin.setRemark("售卖商品获得" + money + "订单号:" + userOrder.getOrderCode() + ";服务费:" + fee);
  794. memberCoinService.createMemberCoin(memberCoin);
  795. UserInfo updateShangJia = new UserInfo();
  796. updateShangJia.setId(shangJiaUser.getId());
  797. updateShangJia.setMoneyCoin(shangJiaCoin + money - fee);
  798. userInfoService.updateUserInfo(updateShangJia);
  799. //消费返积分
  800. activityInfoService.consumptionSongMoney(userOrder);
  801. UserOrder updateUserOrder = new UserOrder();
  802. updateUserOrder.setId(userOrder.getId());
  803. updateUserOrder.setJieSuan("Y");
  804. userOrderMapper.updateByPrimaryKeySelective(updateUserOrder);
  805. }
  806. }
  807. }
  808. }
  809. return new Result(true, "jieSuan:结算订单成功");
  810. } catch (Exception e) {
  811. logger.error("jieSuan:结算订单异常", e);
  812. }
  813. return new Result(false, "jieSuan:结算订单失败");
  814. }
  815. @Override
  816. public Result refundFail(String orderId) {
  817. logger.info("refundFail:拒绝退款");
  818. try {
  819. UserOrder userOrder = userOrderMapper.selectByPrimaryKey(Integer.valueOf(orderId));
  820. if (userOrder != null) {
  821. if (AppConstant.OrderStatus.REFUNDING == userOrder.getStatusFlag()) {
  822. UserOrder updateOrder = new UserOrder();
  823. updateOrder.setId(userOrder.getId());
  824. updateOrder.setStatusFlag(AppConstant.OrderStatus.REFUND_FAIL);
  825. userOrderMapper.updateByPrimaryKeySelective(updateOrder);
  826. }
  827. }
  828. return new Result(true, "拒绝退款成功");
  829. } catch (Exception e) {
  830. logger.error("refundFail:拒绝退款异常", e);
  831. }
  832. return new Result(false, "拒绝退款失败");
  833. }
  834. @Override
  835. public Result refundOrder(String orderId) {
  836. logger.info("refundOrder:退款");
  837. try {
  838. UserOrder userOrder = userOrderMapper.selectByPrimaryKey(Integer.valueOf(orderId));
  839. if (userOrder != null) {
  840. if (AppConstant.OrderStatus.REFUNDING == userOrder.getStatusFlag()) {
  841. double coin = userOrder.getCoin().doubleValue();
  842. // double point = userOrder.getPoint().doubleValue();
  843. double cash = userOrder.getCash().doubleValue();
  844. int payMode = userOrder.getPayMode();
  845. UserInfo userInfo = userInfoService.getUserInfoById(userOrder.getUserId() + "");
  846. /**
  847. * 余额
  848. */
  849. double moneyCoin = userInfo.getMoneyCoin();
  850. /**
  851. * 商城积分
  852. */
  853. // double moneyPoint = userInfo.getMoneyPoint();
  854. if (coin > 0) {
  855. MemberCoin memberCoin = new MemberCoin();
  856. memberCoin.setCreateUser("系统");
  857. memberCoin.setUserId(userInfo.getId() + "");
  858. memberCoin.setOrderId(orderId);
  859. memberCoin.setMoney(String.valueOf(coin + 0.0));
  860. memberCoin.setBalance(String.valueOf(moneyCoin + coin));
  861. memberCoin.setTypeFlag(AppConstant.CoinType.REFUND);
  862. memberCoin.setRemark("退款,订单号:" + userOrder.getOrderCode());
  863. memberCoinService.createMemberCoin(memberCoin);
  864. }
  865. // if (point > 0) {
  866. // MemberPoint memberPoint = new MemberPoint();
  867. // memberPoint.setCreateUser("系统");
  868. // memberPoint.setOrderId(orderId);
  869. // memberPoint.setUserId(userInfo.getId() + "");
  870. // memberPoint.setMoney(String.valueOf(point + 0.0));
  871. // memberPoint.setBalance(String.valueOf(moneyPoint + point));
  872. // memberPoint.setTypeFlag(AppConstant.CoinType.REFUND);
  873. // memberPoint.setRemark("退款,订单号:" + userOrder.getOrderCode());
  874. // memberPointService.createMemberPoint(memberPoint);
  875. // }
  876. if (cash > 0) {
  877. if (AppConstant.PayMode.ALIPAY == payMode) {
  878. AlipayTemp alipayTemp = new AlipayTemp();
  879. alipayTemp.setTradeStatus(AppConstant.Aliapi.TRADE_SUCCESS);
  880. alipayTemp.setOrderId(orderId);
  881. alipayTemp.setTypeFlag(AppConstant.Aliapi.BUY);
  882. alipayTemp = alipayTempMapper.queryAlipayTemp(alipayTemp);
  883. if (alipayTemp != null) {
  884. AlipayClientFactory.refund(alipayTemp.getOutTradeNo(), cash);
  885. }
  886. }
  887. if (AppConstant.PayMode.WEI_XIN == payMode) {
  888. WxpayTemp wxpayTemp = new WxpayTemp();
  889. wxpayTemp.setOrderId(orderId);
  890. wxpayTemp.setTypeFlag(AppConstant.Aliapi.BUY);
  891. wxpayTemp = wxpayTempMapper.queryWxpayTemp(wxpayTemp);
  892. if (wxpayTemp != null) {
  893. String out_refund_no = MbappUtil.create_out_trade_no();
  894. WxPayRefundData data = new WxPayRefundData();
  895. data.setAppid(PropertiesFileLoader.getProperties("weixinappid"));
  896. data.setMch_id(PropertiesFileLoader.getProperties("weixin_mch_id"));
  897. data.setDevice_info(AppConstant.DEVICE_INFO);
  898. data.setNonce_str(MbappUtil.create_nonce_str());
  899. data.setOut_trade_no(wxpayTemp.getOutTradeNo());
  900. data.setTransaction_id(wxpayTemp.getTransactionId());
  901. data.setOut_refund_no(out_refund_no);
  902. data.setTotal_fee((int) (cash * 100));
  903. data.setRefund_fee((int) (cash * 100));
  904. data.setOp_user_id(PropertiesFileLoader.getProperties("weixin_mch_id"));
  905. WXRefundService.refund(data, "UTF-8", PropertiesFileLoader.getProperties("weixin_cert_path"), PropertiesFileLoader.getProperties("weixin_mch_id"));
  906. wxpayTemp.setOutRefundNo(out_refund_no);
  907. wxpayTempMapper.updateByPrimaryKeySelective(wxpayTemp);
  908. }
  909. }
  910. }
  911. UserInfo updateUser = new UserInfo();
  912. updateUser.setId(userInfo.getId());
  913. updateUser.setMoneyCoin(moneyCoin + coin);
  914. // updateUser.setMoneyPoint(moneyPoint + point);
  915. userInfoService.updateUserInfo(updateUser);
  916. UserOrder updateOrder = new UserOrder();
  917. updateOrder.setId(userOrder.getId());
  918. updateOrder.setStatusFlag(AppConstant.OrderStatus.REFUND_SUCCESS);
  919. userOrderMapper.updateByPrimaryKeySelective(updateOrder);
  920. }
  921. }
  922. return new Result(true, "退款成功");
  923. } catch (Exception e) {
  924. logger.error("refundOrder:退款异常", e);
  925. }
  926. return new Result(false, "退款失败");
  927. }
  928. @Override
  929. public Result ziDong() {
  930. logger.info("ziDong:定时任务");
  931. try {
  932. //取消无效订单
  933. autoCancel();
  934. clientOrderService.autoCancel();
  935. return new Result(true, "定时任务成功");
  936. } catch (Exception e) {
  937. logger.error("ziDong:定时任务异常", e);
  938. }
  939. return new Result(false, "定时任务失败");
  940. }
  941. @Override
  942. public Result autoCancel() {
  943. logger.info("autoCancel:取消无用订单");
  944. try {
  945. //获取待取消订单
  946. List<UserOrder> userOrders = userOrderMapper.getAutoCancel();
  947. for (UserOrder userOrder : userOrders) {
  948. UserOrder record = new UserOrder();
  949. record.setId(userOrder.getId());
  950. record.setCancelReason("30分钟未支付,系统自动取消!");
  951. cancel(record);
  952. }
  953. return new Result(true, "取消无用订单成功");
  954. } catch (Exception e) {
  955. logger.error("autoCancel:取消无用订单异常", e);
  956. }
  957. return new Result(false, "取消无用订单失败");
  958. }
  959. @Override
  960. public Result autoJieSuan() {
  961. logger.info("autoJieSuan:自动结算订单");
  962. try {
  963. //获取待取消订单
  964. List<UserOrder> userOrders = userOrderMapper.getAutoJieSuan();
  965. for (UserOrder userOrder : userOrders) {
  966. jieSuan(userOrder.getId() + "");
  967. }
  968. return new Result(true, "自动结算订单成功");
  969. } catch (Exception e) {
  970. logger.error("autoJieSuan:自动结算订单异常", e);
  971. }
  972. return new Result(false, "自动结算订单失败");
  973. }
  974. /**
  975. * 返修
  976. *
  977. * @param record
  978. * @return
  979. */
  980. @Override
  981. public boolean repair(UserOrder record) {
  982. logger.info("repair");
  983. try {
  984. if (record.getId() != null && record.getId() > 0) {
  985. if ("order_image".equals(record.getAcceptType()) || "image_album".equals(record.getAcceptType())) {
  986. record.setStatusFlag(AppConstant.OrderStatus.REWORK);
  987. OrderRepair orderRepair = new OrderRepair();
  988. orderRepair.setOrderId(record.getId() + "");
  989. orderRepairMapper.repairByOrderId(orderRepair);
  990. }
  991. if ("order_album".equals(record.getAcceptType()) || "image_album".equals(record.getAcceptType())) {
  992. record.setAlbumStatus(AppConstant.OrderAlbumStatus.REWORK);
  993. OrderAlbumRepair orderAlbumRepair = new OrderAlbumRepair();
  994. orderAlbumRepair.setOrderId(record.getId() + "");
  995. orderAlbumRepairMapper.repairByOrderId(orderAlbumRepair);
  996. }
  997. int updates = userOrderMapper.updateByPrimaryKeySelective(record);
  998. if (updates > 0) {
  999. // try {
  1000. // UserOrder userOrder = new UserOrder();
  1001. // userOrder.setId(record.getId());
  1002. // userOrder = userOrderMapper.querySingleUserOrder(userOrder);
  1003. //
  1004. // ClientNotice clientNotice = new ClientNotice();
  1005. // clientNotice.setClientOrderId(userOrder.getClientOrderId());
  1006. // clientNotice.setOrderId(userOrder.getId());
  1007. // clientNotice.setUserId(userOrder.getUserId());
  1008. // clientNotice.setProductId(userOrder.getProductId());
  1009. // clientNotice.setStoreId(userOrder.getStoreId());
  1010. // clientNotice.setTypeFlag(AppConstant.ClientNoticeType.ACCEPT_OVER);
  1011. //
  1012. // clientNoticeService.createClientNotice(clientNotice);
  1013. // } catch (Exception e) {
  1014. // logger.error("审核完成通知异常", e);
  1015. // }
  1016. return true;
  1017. }
  1018. }
  1019. } catch (Exception e) {
  1020. logger.error("repair", e);
  1021. }
  1022. return false;
  1023. }
  1024. @Override
  1025. public boolean sendMsg(String orderId, String typeFlag, String message) {
  1026. logger.info("sendMsg");
  1027. try {
  1028. UserOrder userOrder = new UserOrder();
  1029. userOrder.setId(Integer.valueOf(orderId));
  1030. userOrder = userOrderMapper.queryUserOrder(userOrder);
  1031. if (userOrder != null) {
  1032. if ("1".equals(typeFlag)) {
  1033. UserInfo shangJiaUser = userInfoService.getUserInfoById(userOrder.getProductInfo().getStoreInfo().getUserId() + "");
  1034. MsgUtil.sendOrderSms(shangJiaUser.getPhone(), userOrder.getOrderCode(), message);
  1035. } else {
  1036. UserInfo userInfo = userOrder.getUserInfo();
  1037. MsgUtil.sendOrderSms(userInfo.getPhone(), userOrder.getOrderCode(), message);
  1038. }
  1039. }
  1040. return true;
  1041. } catch (Exception e) {
  1042. logger.error("sendMsg", e);
  1043. }
  1044. return false;
  1045. }
  1046. @Override
  1047. public Result autoCleanOss(UserOrder record) {
  1048. logger.info("autoCleanOss:清理订单OSS资源");
  1049. try {
  1050. //获取待取消订单
  1051. List<UserOrder> userOrders = userOrderMapper.getqueryAutoCleanOrder(record);
  1052. for (UserOrder userOrder : userOrders) {
  1053. // 清理orderImage
  1054. OrderImage orderImage = new OrderImage();
  1055. orderImage.setOrderId(String.valueOf(userOrder.getId()));
  1056. orderImageService.autoCleanOrderImage(orderImage);
  1057. // 清理orderAlbum
  1058. OrderAlbum orderAlbum = new OrderAlbum();
  1059. orderAlbum.setOrderId(String.valueOf(userOrder.getId()));
  1060. orderAlbum.setCleanFlag("N");
  1061. List<OrderAlbum> orderAlbumList = orderAlbumMapper.queryAllOrderAlbum(orderAlbum);
  1062. for (OrderAlbum album : orderAlbumList) {
  1063. album.setCleanFlag("Y");
  1064. if (StringUtils.isNotEmpty(album.getFinishedImage())) {
  1065. String artwork = album.getFinishedImage().replace(PropertiesFileLoader.getProperties("aliImageSever") + "/", "");
  1066. OSSFileService.deleteObject(artwork);
  1067. }
  1068. if (StringUtils.isNotEmpty(album.getFinishedArtwork())) {
  1069. String artwork = album.getFinishedArtwork().replace(PropertiesFileLoader.getProperties("aliImageSever") + "/", "");
  1070. OSSFileService.deleteObject(artwork);
  1071. }
  1072. orderAlbumMapper.updateByPrimaryKeySelective(album);
  1073. }
  1074. // 清理 订单 zip
  1075. String zipName = userOrder.getOrderCode() + "_";
  1076. if (StringUtils.isNotEmpty(userOrder.getZipName())) {
  1077. zipName = userOrder.getZipName() + "_";
  1078. }
  1079. String originalZip = PropertiesFileLoader.getProperties("projectname") + "/" + userOrder.getStoreId() + "/" + userOrder.getId() + "/" + zipName + "original.zip";
  1080. String finishedZip = PropertiesFileLoader.getProperties("projectname") + "/" + userOrder.getStoreId() + "/" + userOrder.getId() + "/" + zipName + "finished.zip";
  1081. OSSFileService.deleteObject(originalZip);
  1082. OSSFileService.deleteObject(finishedZip);
  1083. }
  1084. return new Result(true, "自动清理订单OSS资源成功");
  1085. } catch (Exception e) {
  1086. logger.error("autoCleanOss:自动清理订单OSS资源异常", e);
  1087. }
  1088. return new Result(false, "自动清理订单OSS资源失败");
  1089. }
  1090. @Override
  1091. public Result waitAccept(UserOrder record) {
  1092. logger.info("waitAccept:更新回片状态");
  1093. try {
  1094. UserOrder userOrder = userOrderMapper.querySingleUserOrder(record);
  1095. if (userOrder == null) {
  1096. return new Result(false, "订单不存在");
  1097. }
  1098. OrderAcceptLog orderAcceptLog = new OrderAcceptLog();
  1099. orderAcceptLog.setClientOrderId(userOrder.getClientOrderId());
  1100. orderAcceptLog.setOrderId(userOrder.getId());
  1101. orderAcceptLog.setUserId(userOrder.getUserId());
  1102. orderAcceptLog.setProductId(userOrder.getProductId());
  1103. orderAcceptLog.setStoreId(userOrder.getStoreId());
  1104. orderAcceptLog.setTypeFlag(record.getAcceptType());
  1105. if (AppConstant.OrderStatus.FINISH > userOrder.getStatusFlag()) {//如果订单尚未完成
  1106. record.setStatusFlag(AppConstant.OrderStatus.ACCEPT);
  1107. }
  1108. if (AppConstant.OrderAlbumStatus.FINISH != userOrder.getAlbumStatus()) {//相册状态不等于完成状态
  1109. record.setAlbumStatus(AppConstant.OrderAlbumStatus.WAIT_ACCEPT);
  1110. }
  1111. record.setOrderPassword(MbappUtil.getRandomNum(6));
  1112. userOrderMapper.updateByPrimaryKeySelective(record);
  1113. orderAcceptLogMapper.insertSelective(orderAcceptLog);
  1114. sendMsg(String.valueOf(userOrder.getId()), "2", "上传回片");
  1115. if ("Y".equals(userOrder.getClientFlag())) {//如果是客户端订单,通知
  1116. UserOrder checkUserOrder = new UserOrder();
  1117. checkUserOrder.setId(userOrder.getId());
  1118. checkUserOrder = userOrderMapper.querySingleUserOrder(record);
  1119. if (checkUserOrder != null && (AppConstant.OrderStatus.ACCEPT == checkUserOrder.getStatusFlag()
  1120. || (checkUserOrder.getAlbumQuantity() > 0 ? AppConstant.OrderAlbumStatus.WAIT_ACCEPT == checkUserOrder.getAlbumStatus() : true))) {
  1121. try {
  1122. ClientNotice clientNotice = new ClientNotice();
  1123. clientNotice.setClientOrderId(checkUserOrder.getClientOrderId());
  1124. clientNotice.setOrderId(checkUserOrder.getId());
  1125. clientNotice.setUserId(checkUserOrder.getUserId());
  1126. clientNotice.setProductId(checkUserOrder.getProductId());
  1127. clientNotice.setStoreId(checkUserOrder.getStoreId());
  1128. clientNotice.setTypeFlag(AppConstant.ClientNoticeType.WAIT_ACCEPT);
  1129. clientNoticeService.createClientNotice(clientNotice);
  1130. } catch (Exception e) {
  1131. logger.error("回片完成通知异常", e);
  1132. }
  1133. }
  1134. }
  1135. return new Result(true, "更新回片状态成功");
  1136. } catch (Exception e) {
  1137. logger.error("waitAccept:更新回片状态异常", e);
  1138. }
  1139. return new Result(false, "更新回片状态失败");
  1140. }
  1141. @Override
  1142. public Result extendAccept(UserOrder record) {
  1143. logger.info("extendAccept:延期订单审片时间");
  1144. try {
  1145. OrderAcceptLog orderAcceptLog = new OrderAcceptLog();
  1146. orderAcceptLog.setOrderId(record.getId());
  1147. //orderAcceptLog.setTypeFlag(record.getAcceptType());
  1148. orderAcceptLog.setStatusFlag(0);
  1149. orderAcceptLog = orderAcceptLogMapper.queryOrderAcceptLog(orderAcceptLog);
  1150. if (orderAcceptLog != null) {
  1151. orderAcceptLog.setLimitDay(15);
  1152. orderAcceptLog.setRemark(DateTimeTool.dateTimeToTimeYYYYHHmmStr(new Date()) + "审核延期");
  1153. orderAcceptLogMapper.updateByPrimaryKeySelective(orderAcceptLog);
  1154. return new Result(true, "延期订单审片时间成功");
  1155. }
  1156. } catch (Exception e) {
  1157. logger.error("extendAccept:延期订单审片时间异常", e);
  1158. }
  1159. return new Result(false, "延期订单审片时间失败");
  1160. }
  1161. @Override
  1162. public Result autoAccept() {
  1163. logger.info("autoAccept:超时自动通过");
  1164. try {
  1165. List<OrderAcceptLog> orderAcceptLogList = orderAcceptLogMapper.autoAccept(null);
  1166. for (OrderAcceptLog orderAcceptLog : orderAcceptLogList) {
  1167. if (orderAcceptLog.getStatusFlag() == 0) {
  1168. UserOrder userOrder = orderAcceptLog.getUserOrder();
  1169. if (userOrder.getStatusFlag() == AppConstant.OrderStatus.ACCEPT ||
  1170. userOrder.getAlbumStatus() == AppConstant.OrderAlbumStatus.WAIT_ACCEPT) {
  1171. sendMsg(String.valueOf(userOrder.getId()), "1", "审片超时,系统自动通过");
  1172. sendMsg(String.valueOf(userOrder.getId()), "2", "审片超时,系统自动通过");
  1173. //userOrder.setAcceptType(orderAcceptLog.getTypeFlag());
  1174. confirm(userOrder);//确认订单
  1175. orderAcceptLog.setUpdateUser(DateTimeTool.dateTimeToTimeYYYYHHmmStr(new Date()) + "系统自动审核通过");
  1176. orderAcceptLog.setStatusFlag(1);
  1177. orderAcceptLogMapper.updateByPrimaryKeySelective(orderAcceptLog);
  1178. //打压缩包
  1179. orderImageService.createZip(String.valueOf(userOrder.getId()), "finished");
  1180. }
  1181. }
  1182. }
  1183. return new Result(true, "超时自动通过成功");
  1184. } catch (Exception e) {
  1185. logger.error("autoAccept:超时自动通过异常", e);
  1186. }
  1187. return new Result(false, "超时自动通过失败");
  1188. }
  1189. @Override
  1190. public Result checkImageAndAlbum(String orderId, String repairId, String albumRepairId) {
  1191. logger.info("checkImageAndAlbum:检测数量");
  1192. try {
  1193. UserOrder resultOrder = new UserOrder();
  1194. UserOrder userOrder = new UserOrder();
  1195. userOrder.setId(Integer.valueOf(orderId));
  1196. userOrder = userOrderMapper.queryUserOrder(userOrder);
  1197. if (userOrder != null) {
  1198. resultOrder.setQuantity(userOrder.getQuantity());
  1199. resultOrder.setAlbumQuantity(userOrder.getAlbumQuantity());
  1200. OrderImage orderImage = orderImageService.checkImageNum(orderId, repairId);
  1201. if (orderImage != null) {
  1202. resultOrder.setTotalImage(orderImage.getTotalNum());
  1203. resultOrder.setNeedImage(orderImage.getNeedNum());
  1204. }
  1205. OrderAlbum orderAlbum = new OrderAlbum();
  1206. orderAlbum.setOrderId(orderId);
  1207. orderAlbum.setBaseRepairId(albumRepairId);
  1208. orderAlbum = orderAlbumMapper.checkAlbumNum(orderAlbum);
  1209. if (orderAlbum != null) {
  1210. if (StringUtils.isNotBlank(albumRepairId)) {
  1211. resultOrder.setTotalAlbum(orderAlbum.getTotalNum());
  1212. resultOrder.setNeedAlbum(orderAlbum.getNeedNum());
  1213. } else {
  1214. resultOrder.setTotalAlbum(userOrder.getAlbumQuantity());
  1215. resultOrder.setNeedAlbum(orderAlbum.getNeedNum());
  1216. }
  1217. resultOrder.setFailAlbum(orderAlbum.getFailNum());
  1218. }
  1219. }
  1220. return new Result(true, resultOrder);
  1221. } catch (Exception e) {
  1222. logger.error("refundFail:checkImageAndAlbum异常", e);
  1223. }
  1224. return new Result(false, "checkImageAndAlbum失败");
  1225. }
  1226. @Override
  1227. public Result checkRepairImageAndAlbum(String orderId, String repairId, String albumRepairId) {
  1228. logger.info("checkRepairImageAndAlbum:检测数量");
  1229. try {
  1230. UserOrder resultOrder = new UserOrder();
  1231. UserOrder userOrder = new UserOrder();
  1232. userOrder.setId(Integer.valueOf(orderId));
  1233. userOrder = userOrderMapper.querySingleUserOrder(userOrder);
  1234. if (userOrder != null) {
  1235. OrderImage orderImage = orderImageService.checkRepairImageNum(orderId, repairId);
  1236. if (orderImage != null) {
  1237. resultOrder.setTotalImage(orderImage.getTotalNum());
  1238. resultOrder.setNeedImage(orderImage.getNeedNum());
  1239. resultOrder.setFailImage(orderImage.getFailNum());
  1240. }
  1241. OrderAlbum orderAlbum = new OrderAlbum();
  1242. orderAlbum.setOrderId(orderId);
  1243. orderAlbum.setBaseRepairId(albumRepairId);
  1244. orderAlbum = orderAlbumMapper.checkRepairAlbumNum(orderAlbum);
  1245. if (orderAlbum != null) {
  1246. resultOrder.setTotalAlbum(orderAlbum.getTotalNum());
  1247. resultOrder.setNeedAlbum(orderAlbum.getNeedNum());
  1248. resultOrder.setFailAlbum(orderAlbum.getFailNum());
  1249. }
  1250. }
  1251. return new Result(true, resultOrder);
  1252. } catch (Exception e) {
  1253. logger.error("checkRepairImageAndAlbum异常", e);
  1254. }
  1255. return new Result(false, "checkRepairImageAndAlbum失败");
  1256. }
  1257. @Override
  1258. public Result updateImageAndAlbumRepair(UserOrder record) {
  1259. logger.info("updateImageAndAlbumRepair:检测数量");
  1260. try {
  1261. if (record.getImageRepairId() != null && record.getImageRepairStatus() != null) {
  1262. OrderRepair orderRepair = new OrderRepair();
  1263. orderRepair.setId(record.getImageRepairId());
  1264. orderRepair.setStatusFlag(record.getImageRepairStatus());
  1265. orderRepairMapper.updateByPrimaryKeySelective(orderRepair);
  1266. }
  1267. if (record.getAlbumRepairId() != null && record.getAlbumRepairStatus() != null) {
  1268. OrderAlbumRepair orderAlbumRepair = new OrderAlbumRepair();
  1269. orderAlbumRepair.setId(record.getAlbumRepairId());
  1270. orderAlbumRepair.setStatusFlag(record.getAlbumRepairStatus());
  1271. orderAlbumRepairMapper.updateByPrimaryKeySelective(orderAlbumRepair);
  1272. }
  1273. return new Result(true, "更新成功");
  1274. } catch (Exception e) {
  1275. logger.error("updateImageAndAlbumRepair异常", e);
  1276. }
  1277. return new Result(false, "updateImageAndAlbumRepair失败");
  1278. }
  1279. }