MQTask.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440
  1. package com.iamberry.rst.controllers.mq;
  2. import com.iamberry.rst.controllers.sys.SysController;
  3. import com.iamberry.rst.core.address.City;
  4. import com.iamberry.rst.core.address.District;
  5. import com.iamberry.rst.core.address.Province;
  6. import com.iamberry.rst.core.cm.*;
  7. import com.iamberry.rst.core.order.EfastOrder;
  8. import com.iamberry.rst.core.order.ProductColor;
  9. import com.iamberry.rst.core.order.ProductType;
  10. import com.iamberry.rst.core.sms.OrderMessage;
  11. import com.iamberry.rst.core.sms.SmsMessage;
  12. import com.iamberry.rst.core.sys.Relu;
  13. import com.iamberry.rst.core.sys.SysConfig;
  14. import com.iamberry.rst.faces.address.AddressService;
  15. import com.iamberry.rst.faces.cm.*;
  16. import com.iamberry.rst.faces.order.EfastOrderService;
  17. import com.iamberry.rst.faces.product.ProductService;
  18. import com.iamberry.rst.faces.sms.MessageService;
  19. import com.iamberry.rst.faces.sms.SmsService;
  20. import com.iamberry.rst.faces.sys.SysConfigService;
  21. import com.iamberry.rst.faces.sys.SysService;
  22. import com.iamberry.rst.service.cm.mapper.CustomerInfoMapper;
  23. import com.iamberry.rst.service.sms.mapper.MessageMapper;
  24. import com.iamberry.rst.utils.KuaiDi100;
  25. import com.iamberry.wechat.tools.DateTimeUtil;
  26. import com.iamberry.wechat.tools.ResponseJson;
  27. import net.sf.json.JSONArray;
  28. import net.sf.json.JSONObject;
  29. import org.apache.commons.lang.StringUtils;
  30. import org.slf4j.Logger;
  31. import org.slf4j.LoggerFactory;
  32. import org.springframework.beans.factory.InitializingBean;
  33. import org.springframework.beans.factory.annotation.Autowired;
  34. import org.springframework.context.annotation.Lazy;
  35. import org.springframework.scheduling.annotation.Scheduled;
  36. import org.springframework.stereotype.Component;
  37. import java.text.MessageFormat;
  38. import java.text.SimpleDateFormat;
  39. import java.util.*;
  40. import java.util.concurrent.locks.Lock;
  41. import java.util.concurrent.locks.ReentrantLock;
  42. import static com.iamberry.rst.util.SmsConfig.*;
  43. import static com.iamberry.rst.utils.KuaiDi100.replace;
  44. @Component(value="mqTask")
  45. @Lazy(false)
  46. public class MQTask implements InitializingBean {
  47. private static Logger logger = LoggerFactory.getLogger(SysController.class);
  48. @Autowired
  49. private MessageService messageService;
  50. @Autowired
  51. private SmsService smsService;
  52. @Autowired
  53. private EfastOrderService efastOrderService;
  54. @Autowired
  55. private SalesOrderService salesOrderService;
  56. @Autowired
  57. private SysService sysService;
  58. @Autowired
  59. private RepairService repairService;
  60. @Autowired
  61. private AddressService addressService;
  62. @Autowired
  63. private RenewedService renewedService;
  64. @Autowired
  65. private ReissueService reissueService;
  66. @Autowired
  67. private CustomerInfoMapper customerInfoMapper;
  68. @Autowired
  69. private SysConfigService sysConfigService;
  70. private Object lock = new Object();
  71. private Object lock1 = new Object();
  72. public void afterPropertiesSet() throws Exception {
  73. }
  74. //@Scheduled(cron = "*/10 * * * * ?")
  75. //@Scheduled(cron = "0 0 9,11,14,16,18,20 * * ? ")//推送时间分别为每天早上九点、中午十一点、下午三点、下午六点、晚上八点
  76. //@Scheduled(cron = "0 0 */1 * * ?")//每小时执行一次
  77. // @Scheduled(cron = "0 0/3 * * * ?")//每三分钟执行一次
  78. public void auditMessagePush(){
  79. logger.info("------------执行消息提醒,推送待处理订单短信 start-----------");
  80. List<SmsMessage> smsMessageList = messageService.listOrderMessages();
  81. if(smsMessageList != null && smsMessageList.size() > 0){
  82. //循环推送短信
  83. for(SmsMessage smsMessage : smsMessageList){
  84. ResponseJson json = smsService.sms(smsMessage.getTel(),smsMessage.getTypes(),smsMessage.getCounts());
  85. if(json.getReturnCode() == 200){
  86. logger.info("------------推送到+"+smsMessage.getTel()+"一条"+(smsMessage.getTypes() == 1?"待处理":"驳回")+"短信成功");
  87. //设置审核通过记录为无效
  88. if(smsMessage.getTypes() == 3){
  89. OrderMessage orderMessage = new OrderMessage();
  90. orderMessage.setMessageStatus(2);
  91. orderMessage.setMessageType(3);
  92. messageService.updateOrderMessageStatus(orderMessage);
  93. }
  94. }else{
  95. logger.info("------------推送到+"+smsMessage.getTel()+"一条"+(smsMessage.getTypes() == 1?"待处理":"驳回")+"短信失败"+json.getReturnMsg());
  96. }
  97. }
  98. }
  99. }
  100. /**
  101. * 批量同步百胜订单信息 -- 客诉系统
  102. * @throws Exception
  103. */
  104. @Scheduled(cron = "0 0 */1 * * ?")//每小时执行一次
  105. //@Scheduled(cron = "0 0/2 * * * ?")//每三分钟执行一次
  106. //@Scheduled(cron = "*/10 * * * * ?")
  107. public void syncEfastOrderList() throws Exception {
  108. logger.info("---------------- 批量同步百胜订单开始 ---------------");
  109. int pageNo = 1;
  110. int pageSize = 20;
  111. boolean flag = false; //控制是否还需要获取百胜订单信息
  112. String date = "";
  113. synchronized (lock) {
  114. String configParameter = sysConfigService.getSysConfig(1);
  115. //根据时间排序查询订单信息
  116. // List<SalesOrder> orderList = salesOrderService.listSalesOrder(new SalesOrder());
  117. // if (orderList != null && orderList.size() > 0) {
  118. // SalesOrder salesOrder = orderList.get(0);
  119. // date = salesOrder.getSalesCreateTime().toString();
  120. // } else {
  121. // date = "2016-04-01";
  122. // }
  123. String endTime = configParameter;
  124. do {
  125. //批量获取百胜订单信息
  126. JSONObject obj = null;
  127. try{
  128. obj = efastOrderService.listOrderInfoFormEfast(pageNo, pageSize, configParameter);
  129. }catch (Exception e){
  130. logger.info("Efast订单获取失败,失败原因:"+e.getMessage());
  131. }
  132. if (obj == null) {
  133. return;
  134. }
  135. int totalResults = obj.getInt("total_results"); //百胜返回总页数
  136. if (pageNo < totalResults) {
  137. flag = true;
  138. pageNo++;
  139. } else {
  140. flag = false;
  141. }
  142. salesOrderService.addSalesOrderList(obj);
  143. } while (flag); //百胜返回条目数如果等于设置的分页条目数,则继续查询下一页
  144. }
  145. logger.info("---------------- 批量同步百胜订单结束 ---------------");
  146. }
  147. /**
  148. * 同步百胜订单状态等信息
  149. * @throws Exception
  150. */
  151. @Scheduled(cron = "0 0 */1 * * ?")//每小时执行一次
  152. //@Scheduled(cron = "*/10 * * * * ?")
  153. public void syncEfastOrderStatus() throws Exception {
  154. int pageNo = 1;
  155. int pageSize = 20;
  156. boolean flag = false; //控制是否还需要获取百胜订单信息
  157. /*int returnPageNo = 1;
  158. int returnPageSize = 20;
  159. boolean returnFlag = false; //控制是否还需要获取百胜退单信息*/
  160. synchronized (lock1) {
  161. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  162. Date beginDate = new Date();
  163. SalesOrder order = new SalesOrder();
  164. Calendar date = Calendar.getInstance();
  165. Relu relu = new Relu();
  166. relu.setrId(6);
  167. relu.setrIsStatus(1);
  168. //获取同步百胜订单的开始时间
  169. List<Relu> reluList = sysService.ListSysRelu(relu);
  170. if (reluList == null || reluList.size() == 0) {
  171. relu.setrNum(7);
  172. relu.setrText("0");
  173. } else {
  174. relu = reluList.get(0);
  175. }
  176. if (Integer.parseInt(relu.getrText()) > 0) {
  177. date.setTime(beginDate);
  178. date.set(Calendar.DATE, date.get(Calendar.DATE) - (int) relu.getrNum());
  179. order.setSalesCreateTime(format.parse(format.format(date.getTime())));
  180. } else {
  181. order.setSalesCreateTime(format.parse("2016-04-01"));
  182. relu.setrText("1");
  183. //从头开始同步,只同步一次
  184. //sysService.updateRelu(relu);
  185. }
  186. //根据创建时间获取订单信息
  187. List<SalesOrder> orderlist = salesOrderService.listSalesOrder(order);
  188. if (orderlist == null || orderlist.size() == 0) {
  189. return;
  190. }
  191. do {
  192. //批量获取百胜订单信息
  193. JSONObject obj = efastOrderService.listOrderInfoFormEfast(pageNo, pageSize, format.format(order.getSalesCreateTime()));
  194. if (obj == null) {
  195. return;
  196. }
  197. JSONArray orderList = obj.getJSONArray("list");
  198. if (orderList == null || orderList.size() == 0) {
  199. return;
  200. }
  201. salesOrderService.updateOrderList(orderList, orderlist);
  202. int totalResults = obj.getInt("total_results"); //百胜返回总页数
  203. if (pageNo < totalResults) {
  204. flag = true;
  205. pageNo++;
  206. } else {
  207. flag = false;
  208. }
  209. } while (flag); //百胜返回条目数如果等于设置的分页条目数,则继续查询下一页
  210. //无法实现获取退单信息,只能查出已确认未收货的订单
  211. /*do {
  212. //批量获取百胜退单信息
  213. JSONObject obj = efastOrderService.listReturnOrderFormEfast(returnPageNo, returnPageSize, format.format(date.getTime()));
  214. if (obj == null) {
  215. return;
  216. }
  217. JSONArray orderList = obj.getJSONArray("list");
  218. System.out.println("orderList="+orderList);
  219. if (orderList == null || orderList.size() == 0) {
  220. return;
  221. }
  222. salesOrderService.updateReturnOrderList(orderList, orderlist);
  223. int totalResults = obj.getInt("total_results"); //百胜返回总页数
  224. if (returnPageNo < totalResults) {
  225. returnFlag = true;
  226. returnPageNo++;
  227. } else {
  228. returnFlag = false;
  229. }
  230. } while (returnFlag); //百胜返回条目数如果等于设置的分页条目数,则继续查询下一页*/
  231. }
  232. }
  233. /**客诉系统 自动追踪发货信息**/
  234. @Scheduled(cron = "0 0/30 * * * ?")//每30分钟执行一次
  235. public void synchronousDelivery()throws Exception{
  236. /*同步维修订单*/
  237. Repair repair = new Repair();
  238. repair.setRepairSendStatus(1);
  239. List<Repair> listRepair = repairService.listSynchronizingRepair(repair);
  240. if(listRepair.size() > 0){
  241. for(Repair re:listRepair){
  242. if(re.getSalesDealCode() != null){
  243. EfastOrder efastOrder = efastOrderService.getFromEfastOrderInfo(re.getSalesDealCode());
  244. if (efastOrder.getOrderStatus() == 1){//1代表已发货 发货状态: 0(未发货)1(已发货,即已扫描出库)3(备货中)
  245. re.setRepairSendName(efastOrder.getOrderAddressName());
  246. re.setRepairSendTel(efastOrder.getOrderAddressTel());
  247. //查询省市县id
  248. Map<String,String> pccMap = provincesCitiesCounties(efastOrder);
  249. re.setProvinceNumber(Integer.valueOf(pccMap.get("provinceId")));
  250. re.setCityNumber(Integer.valueOf(pccMap.get("cityId")));
  251. re.setAreaNumber(Integer.valueOf(pccMap.get("districtId")));
  252. re.setRepairSendMergeAddress(pccMap.get("province")+"-"+pccMap.get("city")+"-"+pccMap.get("district"));
  253. re.setRepairSendAddress(efastOrder.getOrderAddress());
  254. re.setRepairSendLogisticsCompany(efastOrder.getOrderPostFirm());
  255. re.setRepairSendLogisticsNo(efastOrder.getOrderPostNum());
  256. re.setRepairSendStatus(2);
  257. Integer msg = repairService.updateRepairInfo(re,null,null);
  258. if(msg > 0){
  259. //发送维修发货通知短信
  260. sendSMS("<维修业务>",efastOrder.getOrderPostFirm(),efastOrder.getOrderPostNum(),re.getCustomerId(),"15207170059");
  261. }
  262. }
  263. }
  264. }
  265. }
  266. /*同步换货订单*/
  267. Renewed renewed = new Renewed();
  268. renewed.setRenewedSendStatus(1);
  269. List<Renewed> listRenewed = renewedService.listSynchronizingRenewed(renewed);
  270. if(listRenewed.size() > 0){
  271. for(Renewed re:listRenewed){
  272. if(re.getSalesDealCode() != null){
  273. EfastOrder efastOrder = efastOrderService.getFromEfastOrderInfo(re.getSalesDealCode());
  274. if (efastOrder.getOrderStatus() == 1){//1代表已发货 发货状态: 0(未发货)1(已发货,即已扫描出库)3(备货中)
  275. re.setRenewedSendName(efastOrder.getOrderAddressName());
  276. re.setRenewedSendTel(efastOrder.getOrderAddressTel());
  277. //查询省市县id
  278. Map<String,String> pccMap = provincesCitiesCounties(efastOrder);
  279. re.setProvinceNumber(Integer.valueOf(pccMap.get("provinceId")));
  280. re.setCityNumber(Integer.valueOf(pccMap.get("cityId")));
  281. re.setAreaNumber(Integer.valueOf(pccMap.get("districtId")));
  282. re.setRenewedSendMergeAddress(pccMap.get("province")+"-"+pccMap.get("city")+"-"+pccMap.get("district"));
  283. re.setRenewedSendAddress(efastOrder.getOrderAddress());
  284. re.setRenewedSendLogisticsCompany(efastOrder.getOrderPostFirm());
  285. re.setRenewedSendLogisticsNo(efastOrder.getOrderPostNum());
  286. re.setRenewedSendStatus(2);
  287. Integer msg = renewedService.updateRenewedInfo(re,null,null);
  288. if(msg > 0){
  289. //发送换货发货通知短信
  290. sendSMS("<换货业务>",efastOrder.getOrderPostFirm(),efastOrder.getOrderPostNum(),re.getCustomerId(),"15207170059");
  291. }
  292. }
  293. }
  294. }
  295. }
  296. /*同步补发订单*/
  297. Reissue reissue = new Reissue();
  298. reissue.setReissueSendStatus(1);
  299. List<Reissue> listReissue = reissueService.listSynchronizingReissue(reissue);
  300. if(listReissue.size() > 0){
  301. for(Reissue re:listReissue){
  302. if(re.getSalesDealCode() != null){
  303. EfastOrder efastOrder = efastOrderService.getFromEfastOrderInfo(re.getSalesDealCode());
  304. if (efastOrder.getOrderStatus() == 1){//1代表已发货 发货状态: 0(未发货)1(已发货,即已扫描出库)3(备货中)
  305. re.setReissueSendName(efastOrder.getOrderAddressName());
  306. re.setReissueSendTel(efastOrder.getOrderAddressTel());
  307. //查询省市县id
  308. Map<String,String> pccMap = provincesCitiesCounties(efastOrder);
  309. re.setProvinceNumber(Integer.valueOf(pccMap.get("provinceId")));
  310. re.setCityNumber(Integer.valueOf(pccMap.get("cityId")));
  311. re.setAreaNumber(Integer.valueOf(pccMap.get("districtId")));
  312. re.setReissueSendMergeAddress(pccMap.get("province")+"-"+pccMap.get("city")+"-"+pccMap.get("district"));
  313. re.setReissueSendAddress(efastOrder.getOrderAddress());
  314. re.setReissueSendLogisticsCompany(efastOrder.getOrderPostFirm());
  315. re.setReissueSendLogisticsNo(efastOrder.getOrderPostNum());
  316. re.setReissueSendStatus(2);
  317. Integer msg = reissueService.updateReissueInfo(re);
  318. if(msg > 0){
  319. //发送补发发货通知短信
  320. sendSMS("<补发业务>",efastOrder.getOrderPostFirm(),efastOrder.getOrderPostNum(),re.getCustomerId(),"15207170059");
  321. }
  322. }
  323. }
  324. }
  325. }
  326. }
  327. /**
  328. * 发送发货通知
  329. * @param relation 维修 换货 补发
  330. * @param postFirm 物流公司代码
  331. * @param postNum 物流单号
  332. * @param customerId 客诉主键id
  333. * @param tel 手机号
  334. */
  335. public void sendSMS(String relation,String postFirm,String postNum,Integer customerId,String tel){
  336. if(postFirm != null && !postFirm.equals("") && postNum != null && !postNum.equals("")
  337. && customerId > 0 && !tel.equals("")){
  338. postFirm = KuaiDi100.replace(postFirm);
  339. if(!postFirm.equals("")){
  340. ProductType productType = customerInfoMapper.getcompanyAffiliation(customerId);
  341. if(productType != null){
  342. String rejected_text = "";
  343. //1:美国watero; 2:上朵电动牙刷 3:优尼雅净水机
  344. if (productType.getTypeCompany() == 1){
  345. rejected_text = RELATION_SEND_WATERO;
  346. }
  347. if (productType.getTypeCompany() == 2){
  348. rejected_text = RELATION_SEND_SHANGDUO;
  349. }
  350. if (productType.getTypeCompany() == 3){
  351. rejected_text = RELATION_SEND_YULIA;
  352. }
  353. String text = MessageFormat.format(rejected_text, relation,postFirm+","+postNum);
  354. smsService.sendOtherCMS(tel,text);
  355. }
  356. }
  357. }
  358. }
  359. /**
  360. * 查询省市县id
  361. * @param
  362. */
  363. public Map<String,String> provincesCitiesCounties(EfastOrder efastOrder){
  364. Map<String,String> map = new HashMap<String, String>();
  365. String province = "";
  366. String city = "";
  367. String zone = "";
  368. //省
  369. if(efastOrder.getOrderProvince().substring(efastOrder.getOrderProvince().length() - 1,efastOrder.getOrderProvince().length()).equals("省")){
  370. province = efastOrder.getOrderProvince().substring(0,efastOrder.getOrderProvince().length() - 1);
  371. }else{
  372. province = efastOrder.getOrderProvince();
  373. }
  374. Province provinceinfo = new Province();
  375. provinceinfo.setProvince(province);
  376. List<Province> provinceList = addressService.listProvince(provinceinfo);
  377. if(provinceList.size() < 1){
  378. provinceinfo.setProvince(null);
  379. provinceList = addressService.listProvince(provinceinfo);
  380. }
  381. map.put("provinceId",String.valueOf(provinceList.get(0).getProvinceId()));
  382. map.put("province",provinceList.get(0).getProvince());
  383. //市
  384. city = efastOrder.getOrderCity().substring(0,efastOrder.getOrderCity().length() - 1);
  385. City cityInfo = new City();
  386. cityInfo.setCity(city);
  387. List<City> cityList = addressService.listCity(cityInfo);
  388. if(cityList.size() < 1){
  389. cityInfo.setCity(null);
  390. cityInfo.setProvinceId(provinceList.get(0).getProvinceId());
  391. cityList = addressService.listCity(cityInfo);
  392. }
  393. map.put("cityId",String.valueOf(cityList.get(0).getCityId()));
  394. map.put("city",cityList.get(0).getCity());
  395. //区
  396. zone = efastOrder.getOrderArea().substring(0,efastOrder.getOrderArea().length() - 1);
  397. District district = new District();
  398. district.setDistrict(zone);
  399. List<District> districtList = addressService.listDistrict(district);
  400. if(districtList.size() < 1){
  401. district.setDistrict(null);
  402. district.setCityId(cityList.get(0).getCityId());
  403. districtList = addressService.listDistrict(district);
  404. }
  405. map.put("districtId",String.valueOf(districtList.get(0).getDistrictId()));
  406. map.put("district",districtList.get(0).getDistrict());
  407. return map;
  408. }
  409. }