package com.iamberry.rst.controllers.mq; import com.iamberry.rst.controllers.sys.SysController; import com.iamberry.rst.core.cm.*; import com.iamberry.rst.core.fm.ComplaintDetectInfo; 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.Admin; import com.iamberry.rst.faces.address.AddressService; import com.iamberry.rst.faces.cm.*; import com.iamberry.rst.faces.fm.ComplaintDetectInfoService; import com.iamberry.rst.faces.order.EfastOrderService; 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.util.SmsConfig; import com.iamberry.rst.utils.EfastUtil; import com.iamberry.rst.core.tools.KuaiDi100; import com.iamberry.wechat.tools.ResponseJson; import net.sf.json.JSONArray; import net.sf.json.JSONObject; 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 static com.iamberry.rst.util.SmsConfig.*; @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 AddressService addressService; @Autowired private CustomerService customerService; @Autowired private SysConfigService sysConfigService; @Autowired private KuaiDi100 kuaidi100; @Autowired private PostageAuthorityService postageAuthorityService; @Autowired private PostageService postageService; @Autowired private CompanyInfoService companyInfoService; @Autowired private ComplaintDetectInfoService complaintDetectInfoService; @Autowired private EfastUtil efastUtil; 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/3 * * * ?")//每三分钟执行一次 //@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); 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 = "0 0/3 * * * ?")//每三分钟执行一次 //@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(); //获取同步百胜订单的开始时间 String configParameter = sysConfigService.getSysConfig(2); //获取客诉订单同步百胜订单状态时间间隔 date.setTime(beginDate); date.set(Calendar.DATE, date.get(Calendar.DATE) - Integer.valueOf(configParameter)); order.setStartDate(format.parse(format.format(date.getTime()))); order.setSalesCreateTime(format.parse(format.format(date.getTime()))); //根据创建时间获取订单信息 List orderlist = salesOrderService.listSalesOrder(order); logger.info("需要同步订单状态的订单有:" + orderlist.size() + "个;"); 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分钟执行一次 /*@Scheduled(cron = "0 0/3 * * * ?")//每三分钟执行一次*/ // public void synchronousDelivery()throws Exception{ // // // /*同步维修订单*/ // Repair repair = new Repair(); // List listRepair = repairService.listSynchronizingRepair(repair); // if(listRepair.size() > 0){ // for(Repair re:listRepair){ // JSONObject respData = efastOrderService.getOrderFormEfastByOrderId(re.getRepairBackEfastOrderId()); // EfastOrder efastOrder = efastUtil.respDataConversion(respData); // if(efastOrder == null){ // return; // } // 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(),re.getRepairBackTel()); // } // } // // } // } // // /*同步换货订单*/ // Renewed renewed = new Renewed(); // List listRenewed = renewedService.listSynchronizingRenewed(renewed); // if(listRenewed.size() > 0){ // for(Renewed re:listRenewed){ // JSONObject respData = efastOrderService.getOrderFormEfastByOrderId(re.getRenewedBackEfastOrderId()); // EfastOrder efastOrder = efastUtil.respDataConversion(respData); // if(efastOrder == null){ // return; // } // 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(),re.getRenewedBackTel()); // } // } // } // } // /*同步补发订单*/ // Reissue reissue = new Reissue(); // List listReissue = reissueService.listSynchronizingReissue(reissue); // if(listReissue.size() > 0){ // for(Reissue re:listReissue){ // JSONObject respData = efastOrderService.getOrderFormEfastByOrderId(re.getReissueBackEfastOrderId()); // EfastOrder efastOrder = efastUtil.respDataConversion(respData); // if(efastOrder == null){ // return; // } // 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(),re.getReissueSendTel()); // // } // } // } // } // } /** * 发送发货通知 * @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 = customerService.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; } if (productType.getTypeCompany() == 4){ rejected_text = RELATION_SEND_AIBERLE; } 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; // } /**客诉系统 自动追踪发货信息**/ // @Scheduled(cron = "0 0/60 * * * ?")//每60分钟执行一次 // @Scheduled(cron = "0 0/1 * * * ?")//每1分钟执行一次 // public void syncSendBackCustomer()throws Exception{ // CmRelation cmRelation = new CmRelation(); // cmRelation.setRelationBackStatus(2); // List cmRelationList = cmRelationService.getCmRelationList(cmRelation); // for(int i=0;i map = new HashMap(); List companyInfoList = companyInfoService.listCompanyInfo(new CompanyInfo()); for (CompanyInfo ci: companyInfoList ) { /*权限去重*/ Set authorityCustomerManagerSet = new HashSet(); Set authorityFinancialManagerSet = new HashSet(); Set authorityFinancialPaymentSet = new HashSet(); PostageAuthority postageAuthority = new PostageAuthority(); postageAuthority.setAuthorityStatus(1); postageAuthority.setCompanyId(ci.getCompanyId()); List postageAuthorityList = postageAuthorityService.getPostageAuthorityList(postageAuthority); for (int j=0;j m: map.entrySet()) { Integer number = m.getValue(); Admin admin = new Admin(); admin.setAdminId(m.getKey()); admin = sysService.get(admin); String tel = admin.getAdminTel(); if(admin == null || tel == null || "".equals(tel)){ logger.info("邮费转账发送待处理短信,手机号码为空,"+ tel+"===id为"+m.getKey()); continue; } if(number == null || number == 0){ continue; } String text = MessageFormat.format(REMIND_POSTAGE_PENDING,number); smsService.sendOtherCMS(tel,text); } } /** * 查询维修超时数据并短信通知 */ @Scheduled(cron = "0 50 8 * * ?")//每天上午午9点触发 /* @Scheduled(cron = "0 0/1 * * * ?")//每2分钟执行一次*/ public void detectTimeoutNotice() throws Exception { logger.info("---------------- 询维修超时数据并短信通知开始 ---------------"); //待检测即将超时数据 List listMaintenanceCut = complaintDetectInfoService.listMaintenanceCutNotice(); //待维修即将超时数据 List listCompleteCut = complaintDetectInfoService.listCompleteCutNotice(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); if(listMaintenanceCut != null && listMaintenanceCut.size() > 0){ for(ComplaintDetectInfo info : listMaintenanceCut){ if(info.getDetectNumber() != null && info.getMaintenanceCutTime() != null){ //发送短信通知维修检测人员 String text = MessageFormat.format(SmsConfig.DETECTION_TIMEOUT_NOTIFICATION, info.getDetectNumber(),"检测超时",format.format(info.getMaintenanceCutTime())); String result = smsService.sendOtherCMS(SmsConfig.CUSTOMER_PHONE, text); logger.info("给 " + SmsConfig.CUSTOMER_PHONE + " 手机用户发送短信:" + text+"发送检测即将超时数据维修人员:"+result); } } } if(listCompleteCut != null && listCompleteCut.size() > 0){ for(ComplaintDetectInfo info : listCompleteCut){ //发送短信通知维修检测人员 if(info.getDetectNumber() != null && info.getCompleteCutTime() != null){ String text = MessageFormat.format(SmsConfig.DETECTION_TIMEOUT_NOTIFICATION, info.getDetectNumber(),"维修超时",format.format(info.getCompleteCutTime())); String result = smsService.sendOtherCMS(SmsConfig.CUSTOMER_PHONE, text); logger.info("给 " + SmsConfig.CUSTOMER_PHONE + " 手机用户发送短信:" + text+"发送维修即将超时数据维修人员:"+result); } } } logger.info("---------------- 询维修超时数据并短信通知结束 ---------------"); } }