AutoSendOrder.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. package com.sqx.modules.timedtask.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.sqx.common.utils.Result;
  5. import com.sqx.modules.app.dao.UserDao;
  6. import com.sqx.modules.app.dao.UserMoneyDao;
  7. import com.sqx.modules.app.dao.UserMoneyDetailsDao;
  8. import com.sqx.modules.app.entity.UserEntity;
  9. import com.sqx.modules.app.entity.UserMoneyDetails;
  10. import com.sqx.modules.app.service.UserService;
  11. import com.sqx.modules.common.entity.CommonInfo;
  12. import com.sqx.modules.common.service.CommonInfoService;
  13. import com.sqx.modules.errand.dao.TbIndentDao;
  14. import com.sqx.modules.errand.entity.TbIndent;
  15. import com.sqx.modules.goods.dao.GoodsShopDao;
  16. import com.sqx.modules.goods.entity.GoodsShop;
  17. import com.sqx.modules.order.dao.AppOrderDao;
  18. import com.sqx.modules.order.entity.TbOrder;
  19. import com.sqx.modules.pay.controller.app.AliPayController;
  20. import com.sqx.modules.pay.dao.PayDetailsDao;
  21. import com.sqx.modules.pay.entity.PayDetails;
  22. import com.sqx.modules.pay.service.WxErrService;
  23. import com.sqx.modules.utils.SenInfoCheckUtil;
  24. import lombok.extern.slf4j.Slf4j;
  25. import org.apache.commons.lang.StringUtils;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import org.springframework.scheduling.annotation.Scheduled;
  28. import org.springframework.stereotype.Component;
  29. import org.springframework.transaction.annotation.Transactional;
  30. import org.springframework.web.bind.annotation.GetMapping;
  31. import java.math.BigDecimal;
  32. import java.text.SimpleDateFormat;
  33. import java.util.ArrayList;
  34. import java.util.Calendar;
  35. import java.util.Date;
  36. import java.util.List;
  37. @Component
  38. @Slf4j
  39. public class AutoSendOrder {
  40. @Autowired
  41. private TbIndentDao tbIndentDao;
  42. @Autowired
  43. private CommonInfoService commonInfoService;
  44. @Autowired
  45. private AppOrderDao appOrderDao;
  46. @Autowired
  47. private UserDao userDao;
  48. @Autowired
  49. private UserMoneyDao userMoneyDao;
  50. @Autowired
  51. private WxErrService wxErrService;
  52. @Autowired
  53. private UserMoneyDetailsDao userMoneyDetailsDao;
  54. @Autowired
  55. private GoodsShopDao goodsShopDao;
  56. @Autowired
  57. private UserService userService;
  58. @Autowired
  59. private PayDetailsDao payDetailsDao;
  60. // //定时自动给骑手推单
  61. // @Scheduled(cron = "0 * * * * ?", zone = "Asia/Shanghai")
  62. // public void autoSendOrder(){
  63. // CommonInfo three = commonInfoService.findOne(304);
  64. // if("是".equals(three.getValue())){
  65. // //查看所有支付以后两分钟后的订单(排除同城服务订单)
  66. // CommonInfo two = commonInfoService.findOne(302);
  67. // CommonInfo one = commonInfoService.findOne(303);
  68. // CommonInfo four = commonInfoService.findOne(273);
  69. // CommonInfo five = commonInfoService.findOne(310);
  70. // Integer maxNum = Integer.parseInt(commonInfoService.findOne(342).getValue());
  71. // Double cashDeposit = Double.valueOf(four.getValue());
  72. // Double distance = Double.valueOf(one.getValue());
  73. // String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
  74. // String date = getCurrentTime(Integer.valueOf(two.getValue()));
  75. // List<TbIndent> tbIndents = tbIndentDao.selectSendOrder(date);
  76. // //遍历这些订单,查出距离这些订单最近的骑手(骑手需要没有接单,且在订单位置xx米内)
  77. // for(int i = 0;i<tbIndents.size();i++){
  78. // GoodsShop goodsShop = goodsShopDao.selectById(tbIndents.get(i).getShopId());
  79. // try{
  80. // if("3".equals(tbIndents.get(i).getIndentType())&&"0".equals(tbIndents.get(i).getBuyType())){
  81. // //没有起点位置,只有终点位置。通过终点位置查距离内最近的骑手
  82. // Long userId = tbIndentDao.selectRiderByDictance(tbIndents.get(i).getUserLng(), tbIndents.get(i).getUserLat(),
  83. // distance,cashDeposit,maxNum);
  84. // if(userId!=null){
  85. // tbIndentDao.indentReceiv(userId, tbIndents.get(i).getIndentNumber(), format,"4");
  86. // //自动推单以后,消息通知骑手
  87. // UserEntity userEntity = userDao.selectById(userId);
  88. // List<String> msgList=new ArrayList<>();
  89. // msgList.add("接单项目");
  90. // msgList.add(userEntity.getNickName());
  91. // msgList.add(format);
  92. // msgList.add("系统自动推单");
  93. // SenInfoCheckUtil.sendRiderMsg(userEntity.getRiderOpenId(),five.getValue(),msgList,4);
  94. // userService.pushToSingleRider("系统自动推单", "系统已为您自动派单,请及时前往派送!", userEntity.getRiderClientid());
  95. // userService.sendMsgDXB(userEntity.getPhone(), "autosend", 0);
  96. // }
  97. // }else {
  98. // if(goodsShop!=null&&goodsShop.getAutoSendOrder()!=null&&goodsShop.getAutoSendOrder()==0){
  99. // //有起点位置,通过起点位置查距离内最近的骑手
  100. // Long userId = tbIndentDao.selectRiderByDictance(tbIndents.get(i).getShopLng(), tbIndents.get(i).getShopLat(),
  101. // distance, cashDeposit,maxNum);
  102. // if(userId!=null){
  103. // tbIndentDao.indentReceiv(userId, tbIndents.get(i).getIndentNumber(), format,"3");
  104. // // tbIndentDao.indentReceiving(userId, tbIndents.get(i).getIndentNumber(), format);
  105. // //自动推单以后,消息通知骑手
  106. // UserEntity userEntity = userDao.selectById(userId);
  107. // List<String> msgList=new ArrayList<>();
  108. // msgList.add("接单项目");
  109. // msgList.add(userEntity.getNickName());
  110. // msgList.add(format);
  111. // msgList.add("系统自动推单");
  112. // SenInfoCheckUtil.sendRiderMsg(userEntity.getRiderOpenId(),five.getValue(),msgList,4);
  113. // userService.pushToSingleRider("系统自动推单", "系统已为您自动派单,请及时前往派送!", userEntity.getRiderClientid());
  114. // userService.sendMsgDXB(userEntity.getPhone(), "autosend", 0);
  115. // }
  116. // }
  117. // }
  118. // }catch (Exception e){
  119. // e.printStackTrace();
  120. // log.error("定时任务自动退单异常,异常订单id:"+tbIndents.get(i).getIndentId()+",异常:"+e.getMessage(),e);
  121. // }
  122. // }
  123. // }
  124. // }
  125. //定时取消商家长时间未接单的订单
  126. // @Scheduled(cron = "0 * * * * ?", zone = "Asia/Shanghai")
  127. public void autoCancelOrder(){
  128. String overTime = getCurrentTime(5);
  129. List<TbOrder> tbOrderList = appOrderDao.selectOverTimeOrder(overTime);
  130. cancelOrder(tbOrderList);
  131. }
  132. @Transactional
  133. public void cancelOrder(List<TbOrder> tbOrderList){
  134. String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
  135. for(int i = 0;i<tbOrderList.size();i++) {
  136. TbOrder tbOrder = tbOrderList.get(i);
  137. UserEntity userEntity = userDao.selectById(tbOrder.getUserId());
  138. //已支付判断支付方式
  139. if (tbOrder.getPayType() == 2) {
  140. //余额支付,直接退还钱包
  141. userMoneyDao.updateMayMoney(1, tbOrder.getUserId(), tbOrder.getPayMoney().doubleValue());
  142. } else if(tbOrder.getPayType()==1){
  143. PayDetails payDetails = payDetailsDao.selectByOrderId(tbOrder.getOrderNumber());
  144. boolean b = wxErrService.wxRefund(payDetails);
  145. if(!b){
  146. continue;
  147. }
  148. }else{
  149. PayDetails payDetails = payDetailsDao.selectByOrderId(tbOrder.getOrderNumber());
  150. String code = AliPayController.alipayRefund(payDetails);
  151. if(StringUtils.isNotBlank(code)){
  152. log.error(code);
  153. JSONObject jsonObject = JSON.parseObject(code);
  154. JSONObject alipay_trade_refund_response = jsonObject.getJSONObject("alipay_trade_refund_response");
  155. String code1 = alipay_trade_refund_response.getString("code");
  156. if(!"10000".equals(code1)){
  157. continue;
  158. }
  159. }else{
  160. continue;
  161. }
  162. }
  163. tbOrder.setStatus(5);
  164. appOrderDao.updateById(tbOrder);
  165. //添加退款记录
  166. UserMoneyDetails userMoneyDetails = new UserMoneyDetails();
  167. userMoneyDetails.setUserId(tbOrder.getUserId());
  168. userMoneyDetails.setTitle("退款");
  169. userMoneyDetails.setType(1);
  170. userMoneyDetails.setState(2);
  171. userMoneyDetails.setMoney(tbOrder.getPayMoney());
  172. userMoneyDetails.setContent("因商家规定时间内未接单,系统已自动为您取消订单,退款到账:"+tbOrder.getPayMoney()+"元,退款按原路返回");
  173. userMoneyDetails.setCreateTime(format);
  174. userMoneyDetailsDao.insert(userMoneyDetails);
  175. //设置小程序消息推送
  176. CommonInfo one = commonInfoService.findOne(266);
  177. List<String> msgList=new ArrayList<>();
  178. msgList.add(tbOrder.getOrderNumber());
  179. msgList.add("取消订单");
  180. msgList.add(tbOrder.getPayMoney().toString());
  181. msgList.add(format);
  182. SenInfoCheckUtil.sendMsg(userEntity.getOpenId(),one.getValue(),msgList,3);
  183. userService.pushToSingle("下单失败", "因商家长时间未接单,系统已自动为您取消订单,给您带来不便请谅解,如有疑问可联系客服!", userEntity.getClientid());
  184. }
  185. }
  186. /**
  187. * 获取指定时间几分钟前的时间
  188. * @return
  189. */
  190. public String getCurrentTime(int i){
  191. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  192. Calendar beforeTime = Calendar.getInstance();
  193. beforeTime.add(Calendar.MINUTE, -i);
  194. Date beforeD = beforeTime.getTime();
  195. String time = sdf.format(beforeD);
  196. return time;
  197. }
  198. //定时更新用户的会员特权
  199. // @Scheduled(cron = "0 * * * * ?", zone = "Asia/Shanghai")
  200. public void autoUpdateVip(){
  201. String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
  202. List<UserEntity> userEntities = userDao.selectVipOverdue(date);
  203. for(int i = 0;i<userEntities.size();i++){
  204. userEntities.get(i).setIsVip(0);
  205. userDao.updateById(userEntities.get(i));
  206. }
  207. }
  208. }