package com.iamberry.rst.controllers.mq; import com.iamberry.rst.controllers.sys.SysController; import com.iamberry.rst.core.address.City; import com.iamberry.rst.core.address.District; import com.iamberry.rst.core.address.Province; import com.iamberry.rst.core.cm.*; import com.iamberry.rst.core.order.EfastOrder; import com.iamberry.rst.core.order.ProductColor; import com.iamberry.rst.core.order.ProductType; import com.iamberry.rst.core.sms.OrderMessage; import com.iamberry.rst.core.sms.SmsMessage; import com.iamberry.rst.core.sys.Relu; import com.iamberry.rst.core.sys.SysConfig; import com.iamberry.rst.faces.address.AddressService; import com.iamberry.rst.faces.cm.*; import com.iamberry.rst.faces.order.EfastOrderService; import com.iamberry.rst.faces.product.ProductService; import com.iamberry.rst.faces.sms.MessageService; import com.iamberry.rst.faces.sms.SmsService; import com.iamberry.rst.faces.sys.SysConfigService; import com.iamberry.rst.faces.sys.SysService; import com.iamberry.rst.service.cm.mapper.CustomerInfoMapper; import com.iamberry.rst.service.sms.mapper.MessageMapper; import com.iamberry.rst.utils.KuaiDi100; import com.iamberry.wechat.tools.DateTimeUtil; import com.iamberry.wechat.tools.ResponseJson; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.text.MessageFormat; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import static com.iamberry.rst.util.SmsConfig.*; import static com.iamberry.rst.utils.KuaiDi100.replace; @Component(value="mqTask") @Lazy(false) public class MQTask implements InitializingBean { private static Logger logger = LoggerFactory.getLogger(SysController.class); @Autowired private MessageService messageService; @Autowired private SmsService smsService; @Autowired private EfastOrderService efastOrderService; @Autowired private SalesOrderService salesOrderService; @Autowired private SysService sysService; @Autowired private RepairService repairService; @Autowired private AddressService addressService; @Autowired private RenewedService renewedService; @Autowired private ReissueService reissueService; @Autowired private CustomerInfoMapper customerInfoMapper; @Autowired private SysConfigService sysConfigService; private Object lock = new Object(); private Object lock1 = new Object(); public void afterPropertiesSet() throws Exception { } //@Scheduled(cron = "*/10 * * * * ?") //@Scheduled(cron = "0 0 9,11,14,16,18,20 * * ? ")//推送时间分别为每天早上九点、中午十一点、下午三点、下午六点、晚上八点 //@Scheduled(cron = "0 0 */1 * * ?")//每小时执行一次 // @Scheduled(cron = "0 0/3 * * * ?")//每三分钟执行一次 public void auditMessagePush(){ logger.info("------------执行消息提醒,推送待处理订单短信 start-----------"); List smsMessageList = messageService.listOrderMessages(); if(smsMessageList != null && smsMessageList.size() > 0){ //循环推送短信 for(SmsMessage smsMessage : smsMessageList){ ResponseJson json = smsService.sms(smsMessage.getTel(),smsMessage.getTypes(),smsMessage.getCounts()); if(json.getReturnCode() == 200){ logger.info("------------推送到+"+smsMessage.getTel()+"一条"+(smsMessage.getTypes() == 1?"待处理":"驳回")+"短信成功"); //设置审核通过记录为无效 if(smsMessage.getTypes() == 3){ OrderMessage orderMessage = new OrderMessage(); orderMessage.setMessageStatus(2); orderMessage.setMessageType(3); messageService.updateOrderMessageStatus(orderMessage); } }else{ logger.info("------------推送到+"+smsMessage.getTel()+"一条"+(smsMessage.getTypes() == 1?"待处理":"驳回")+"短信失败"+json.getReturnMsg()); } } } } /** * 批量同步百胜订单信息 -- 客诉系统 * @throws Exception */ @Scheduled(cron = "0 0 */1 * * ?")//每小时执行一次 //@Scheduled(cron = "0 0/2 * * * ?")//每三分钟执行一次 //@Scheduled(cron = "*/10 * * * * ?") public void syncEfastOrderList() throws Exception { logger.info("---------------- 批量同步百胜订单开始 ---------------"); int pageNo = 1; int pageSize = 20; boolean flag = false; //控制是否还需要获取百胜订单信息 String date = ""; synchronized (lock) { String configParameter = sysConfigService.getSysConfig(1); //根据时间排序查询订单信息 // List orderList = salesOrderService.listSalesOrder(new SalesOrder()); // if (orderList != null && orderList.size() > 0) { // SalesOrder salesOrder = orderList.get(0); // date = salesOrder.getSalesCreateTime().toString(); // } else { // date = "2016-04-01"; // } String endTime = configParameter; do { //批量获取百胜订单信息 JSONObject obj = null; try{ obj = efastOrderService.listOrderInfoFormEfast(pageNo, pageSize, configParameter); }catch (Exception e){ logger.info("Efast订单获取失败,失败原因:"+e.getMessage()); } if (obj == null) { return; } int totalResults = obj.getInt("total_results"); //百胜返回总页数 if (pageNo < totalResults) { flag = true; pageNo++; } else { flag = false; } salesOrderService.addSalesOrderList(obj); } while (flag); //百胜返回条目数如果等于设置的分页条目数,则继续查询下一页 } logger.info("---------------- 批量同步百胜订单结束 ---------------"); } /** * 同步百胜订单状态等信息 * @throws Exception */ @Scheduled(cron = "0 0 */1 * * ?")//每小时执行一次 //@Scheduled(cron = "*/10 * * * * ?") public void syncEfastOrderStatus() throws Exception { int pageNo = 1; int pageSize = 20; boolean flag = false; //控制是否还需要获取百胜订单信息 /*int returnPageNo = 1; int returnPageSize = 20; boolean returnFlag = false; //控制是否还需要获取百胜退单信息*/ synchronized (lock1) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date beginDate = new Date(); SalesOrder order = new SalesOrder(); Calendar date = Calendar.getInstance(); Relu relu = new Relu(); relu.setrId(6); relu.setrIsStatus(1); //获取同步百胜订单的开始时间 List reluList = sysService.ListSysRelu(relu); if (reluList == null || reluList.size() == 0) { relu.setrNum(7); relu.setrText("0"); } else { relu = reluList.get(0); } if (Integer.parseInt(relu.getrText()) > 0) { date.setTime(beginDate); date.set(Calendar.DATE, date.get(Calendar.DATE) - (int) relu.getrNum()); order.setSalesCreateTime(format.parse(format.format(date.getTime()))); } else { order.setSalesCreateTime(format.parse("2016-04-01")); relu.setrText("1"); //从头开始同步,只同步一次 //sysService.updateRelu(relu); } //根据创建时间获取订单信息 List orderlist = salesOrderService.listSalesOrder(order); if (orderlist == null || orderlist.size() == 0) { return; } do { //批量获取百胜订单信息 JSONObject obj = efastOrderService.listOrderInfoFormEfast(pageNo, pageSize, format.format(order.getSalesCreateTime())); if (obj == null) { return; } JSONArray orderList = obj.getJSONArray("list"); if (orderList == null || orderList.size() == 0) { return; } salesOrderService.updateOrderList(orderList, orderlist); int totalResults = obj.getInt("total_results"); //百胜返回总页数 if (pageNo < totalResults) { flag = true; pageNo++; } else { flag = false; } } while (flag); //百胜返回条目数如果等于设置的分页条目数,则继续查询下一页 //无法实现获取退单信息,只能查出已确认未收货的订单 /*do { //批量获取百胜退单信息 JSONObject obj = efastOrderService.listReturnOrderFormEfast(returnPageNo, returnPageSize, format.format(date.getTime())); if (obj == null) { return; } JSONArray orderList = obj.getJSONArray("list"); System.out.println("orderList="+orderList); if (orderList == null || orderList.size() == 0) { return; } salesOrderService.updateReturnOrderList(orderList, orderlist); int totalResults = obj.getInt("total_results"); //百胜返回总页数 if (returnPageNo < totalResults) { returnFlag = true; returnPageNo++; } else { returnFlag = false; } } while (returnFlag); //百胜返回条目数如果等于设置的分页条目数,则继续查询下一页*/ } } /**客诉系统 自动追踪发货信息**/ @Scheduled(cron = "0 0/30 * * * ?")//每30分钟执行一次 public void synchronousDelivery()throws Exception{ /*同步维修订单*/ Repair repair = new Repair(); repair.setRepairSendStatus(1); List listRepair = repairService.listSynchronizingRepair(repair); if(listRepair.size() > 0){ for(Repair re:listRepair){ if(re.getSalesDealCode() != null){ EfastOrder efastOrder = efastOrderService.getFromEfastOrderInfo(re.getSalesDealCode()); if (efastOrder.getOrderStatus() == 1){//1代表已发货 发货状态: 0(未发货)1(已发货,即已扫描出库)3(备货中) re.setRepairSendName(efastOrder.getOrderAddressName()); re.setRepairSendTel(efastOrder.getOrderAddressTel()); //查询省市县id Map pccMap = provincesCitiesCounties(efastOrder); re.setProvinceNumber(Integer.valueOf(pccMap.get("provinceId"))); re.setCityNumber(Integer.valueOf(pccMap.get("cityId"))); re.setAreaNumber(Integer.valueOf(pccMap.get("districtId"))); re.setRepairSendMergeAddress(pccMap.get("province")+"-"+pccMap.get("city")+"-"+pccMap.get("district")); re.setRepairSendAddress(efastOrder.getOrderAddress()); re.setRepairSendLogisticsCompany(efastOrder.getOrderPostFirm()); re.setRepairSendLogisticsNo(efastOrder.getOrderPostNum()); re.setRepairSendStatus(2); Integer msg = repairService.updateRepairInfo(re,null,null); if(msg > 0){ //发送维修发货通知短信 sendSMS("<维修业务>",efastOrder.getOrderPostFirm(),efastOrder.getOrderPostNum(),re.getCustomerId(),"15207170059"); } } } } } /*同步换货订单*/ Renewed renewed = new Renewed(); renewed.setRenewedSendStatus(1); List listRenewed = renewedService.listSynchronizingRenewed(renewed); if(listRenewed.size() > 0){ for(Renewed re:listRenewed){ if(re.getSalesDealCode() != null){ EfastOrder efastOrder = efastOrderService.getFromEfastOrderInfo(re.getSalesDealCode()); if (efastOrder.getOrderStatus() == 1){//1代表已发货 发货状态: 0(未发货)1(已发货,即已扫描出库)3(备货中) re.setRenewedSendName(efastOrder.getOrderAddressName()); re.setRenewedSendTel(efastOrder.getOrderAddressTel()); //查询省市县id Map pccMap = provincesCitiesCounties(efastOrder); re.setProvinceNumber(Integer.valueOf(pccMap.get("provinceId"))); re.setCityNumber(Integer.valueOf(pccMap.get("cityId"))); re.setAreaNumber(Integer.valueOf(pccMap.get("districtId"))); re.setRenewedSendMergeAddress(pccMap.get("province")+"-"+pccMap.get("city")+"-"+pccMap.get("district")); re.setRenewedSendAddress(efastOrder.getOrderAddress()); re.setRenewedSendLogisticsCompany(efastOrder.getOrderPostFirm()); re.setRenewedSendLogisticsNo(efastOrder.getOrderPostNum()); re.setRenewedSendStatus(2); Integer msg = renewedService.updateRenewedInfo(re,null,null); if(msg > 0){ //发送换货发货通知短信 sendSMS("<换货业务>",efastOrder.getOrderPostFirm(),efastOrder.getOrderPostNum(),re.getCustomerId(),"15207170059"); } } } } } /*同步补发订单*/ Reissue reissue = new Reissue(); reissue.setReissueSendStatus(1); List listReissue = reissueService.listSynchronizingReissue(reissue); if(listReissue.size() > 0){ for(Reissue re:listReissue){ if(re.getSalesDealCode() != null){ EfastOrder efastOrder = efastOrderService.getFromEfastOrderInfo(re.getSalesDealCode()); if (efastOrder.getOrderStatus() == 1){//1代表已发货 发货状态: 0(未发货)1(已发货,即已扫描出库)3(备货中) re.setReissueSendName(efastOrder.getOrderAddressName()); re.setReissueSendTel(efastOrder.getOrderAddressTel()); //查询省市县id Map pccMap = provincesCitiesCounties(efastOrder); re.setProvinceNumber(Integer.valueOf(pccMap.get("provinceId"))); re.setCityNumber(Integer.valueOf(pccMap.get("cityId"))); re.setAreaNumber(Integer.valueOf(pccMap.get("districtId"))); re.setReissueSendMergeAddress(pccMap.get("province")+"-"+pccMap.get("city")+"-"+pccMap.get("district")); re.setReissueSendAddress(efastOrder.getOrderAddress()); re.setReissueSendLogisticsCompany(efastOrder.getOrderPostFirm()); re.setReissueSendLogisticsNo(efastOrder.getOrderPostNum()); re.setReissueSendStatus(2); Integer msg = reissueService.updateReissueInfo(re); if(msg > 0){ //发送补发发货通知短信 sendSMS("<补发业务>",efastOrder.getOrderPostFirm(),efastOrder.getOrderPostNum(),re.getCustomerId(),"15207170059"); } } } } } } /** * 发送发货通知 * @param relation 维修 换货 补发 * @param postFirm 物流公司代码 * @param postNum 物流单号 * @param customerId 客诉主键id * @param tel 手机号 */ public void sendSMS(String relation,String postFirm,String postNum,Integer customerId,String tel){ if(postFirm != null && !postFirm.equals("") && postNum != null && !postNum.equals("") && customerId > 0 && !tel.equals("")){ postFirm = KuaiDi100.replace(postFirm); if(!postFirm.equals("")){ ProductType productType = customerInfoMapper.getcompanyAffiliation(customerId); if(productType != null){ String rejected_text = ""; //1:美国watero; 2:上朵电动牙刷 3:优尼雅净水机 if (productType.getTypeCompany() == 1){ rejected_text = RELATION_SEND_WATERO; } if (productType.getTypeCompany() == 2){ rejected_text = RELATION_SEND_SHANGDUO; } if (productType.getTypeCompany() == 3){ rejected_text = RELATION_SEND_YULIA; } String text = MessageFormat.format(rejected_text, relation,postFirm+","+postNum); smsService.sendOtherCMS(tel,text); } } } } /** * 查询省市县id * @param */ public Map provincesCitiesCounties(EfastOrder efastOrder){ Map map = new HashMap(); String province = ""; String city = ""; String zone = ""; //省 if(efastOrder.getOrderProvince().substring(efastOrder.getOrderProvince().length() - 1,efastOrder.getOrderProvince().length()).equals("省")){ province = efastOrder.getOrderProvince().substring(0,efastOrder.getOrderProvince().length() - 1); }else{ province = efastOrder.getOrderProvince(); } Province provinceinfo = new Province(); provinceinfo.setProvince(province); List provinceList = addressService.listProvince(provinceinfo); if(provinceList.size() < 1){ provinceinfo.setProvince(null); provinceList = addressService.listProvince(provinceinfo); } map.put("provinceId",String.valueOf(provinceList.get(0).getProvinceId())); map.put("province",provinceList.get(0).getProvince()); //市 city = efastOrder.getOrderCity().substring(0,efastOrder.getOrderCity().length() - 1); City cityInfo = new City(); cityInfo.setCity(city); List cityList = addressService.listCity(cityInfo); if(cityList.size() < 1){ cityInfo.setCity(null); cityInfo.setProvinceId(provinceList.get(0).getProvinceId()); cityList = addressService.listCity(cityInfo); } map.put("cityId",String.valueOf(cityList.get(0).getCityId())); map.put("city",cityList.get(0).getCity()); //区 zone = efastOrder.getOrderArea().substring(0,efastOrder.getOrderArea().length() - 1); District district = new District(); district.setDistrict(zone); List districtList = addressService.listDistrict(district); if(districtList.size() < 1){ district.setDistrict(null); district.setCityId(cityList.get(0).getCityId()); districtList = addressService.listDistrict(district); } map.put("districtId",String.valueOf(districtList.get(0).getDistrictId())); map.put("district",districtList.get(0).getDistrict()); return map; } }