package com.gk.firework.Scheduls.DL; import com.alibaba.fastjson.JSONObject; import com.gk.firework.Domain.CustomerInfo; import com.gk.firework.Domain.Enterprise; import com.gk.firework.Domain.SaleOrderDetailInfo; import com.gk.firework.Domain.SaleOrderInfo; import com.gk.firework.Domain.Utils.BeanUtils; import com.gk.firework.Domain.Utils.HttpUtils; import com.gk.firework.Domain.Utils.StringUtils; import com.gk.firework.Service.*; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import java.io.IOException; import java.util.*; /** * @author : jingjy * @date : 2022/1/26 17:15 */ @Configuration @EnableScheduling //@ConditionalOnProperty(prefix = "scheduling",name = "enabled",havingValue = "true") public class ReportOrderTask { private Logger logger = LogManager.getLogger(com.gk.firework.Scheduls.WarningTask.StockWarnTask.class); private static final String url = "http://118.190.117.180:8888"; @Value("${com.gk.firework.schedules.single.switch}") private Boolean switchBtn; @Autowired EnterpriseService enterpriseService; @Autowired SaleOrderService saleOrderService; @Autowired SaleOrderDetailService saleOrderDetailService; @Autowired StockService stockService; @Autowired CustomerService customerService; //@Scheduled(cron = "0 0 2 * * ?") //每天凌晨两点执行一次 @Scheduled(cron = "0/10 * * * * ?") //每隔10秒执行一次 private void reportOrder() { if (!switchBtn) return; //1.获取需要上传的企业信息 Listenterprises = enterpriseService.selectSaleEnterpriseForUpload(); for (Enterprise enterprise : enterprises){ if (StringUtils.isBlank(enterprise.getDlcompanycode()) || StringUtils.isBlank(enterprise.getDeviceid())){ continue; } //2.获取握手密码 DlResult result = getHandshake(enterprise); if (result == null || StringUtils.isBlank(result.getFwdz()) || StringUtils.isBlank(result.getWsmm())){ continue; } //获取企业未上传销售数据 List orderInfos = saleOrderService.getWaitUploadOrderByEnterprise(enterprise); if (orderInfos == null || orderInfos.size() == 0){ continue; } uploadOrders(orderInfos,result,enterprise); } //3.上传数据 //4.处理上传结果 } private DlResult getHandshake(Enterprise enterprise){ String respnse = null; DlResult result = new DlResult(); Map params = new HashMap();//请求参数 params.put("sbid", enterprise.getDeviceid());// params.put("dwdm", enterprise.getDlcompanycode());// try { respnse = HttpUtils.net(url+"/lsjk/Sbrz", params, "GET"); JSONObject jsonResult = JSONObject.parseObject(respnse); String wsmm = jsonResult.getString("wsmm"); String fwdz = jsonResult.getString("fwdz"); result.setFwdz(fwdz); result.setWsmm(wsmm); return result; }catch (Exception e){ return result; } } public void uploadOrders(ListorderInfos, DlResult result, Enterprise enterprise){ String servicesUrl = url+result.getFwdz(); for (SaleOrderInfo orderInfo : orderInfos){ Service service = new Service(); Call call = null; /** * * * YH * XX * 20100630151617 * XXXX * XXXX * 1 * XXXX * * XXX * 20100630151617 * * */ try { List detailInfos = saleOrderDetailService.selectByOrderCode(orderInfo.getCode()); CustomerInfo customerInfo = customerService.getById(orderInfo.getCustomer()); String date = new DateTime(orderInfo.getCreatedat()).toString("yyyyMMddHHmmss"); ReportEntity reportEntity = new ReportEntity(); reportEntity.setSjbs("YH"); reportEntity.setJylx("10"); reportEntity.setSjscsj(date); reportEntity.setDwdm(enterprise.getDlcompanycode()); reportEntity.setCjsbid(enterprise.getDeviceid()); reportEntity.setZjlx("1"); reportEntity.setZjhm(customerInfo.getIdcardnum()); ListtmsEntities = new ArrayList<>(); for (SaleOrderDetailInfo detailInfo : detailInfos){ TmsEntity tmsEntity = new TmsEntity(detailInfo.getDirectioncode(),date); tmsEntities.add(tmsEntity); } reportEntity.setTms(tmsEntities); String xml = BeanUtils.beanToXml(reportEntity,ReportEntity.class); //String xml = "YH0320160203221055ADW000000008422ADW000000008422652722194006466122028319820102191611230I4WY0F622038242016011419515311230I4WY0F622038192016011419515311230I4WY0F622038222016011419515311230I4WY0F622038262016011419515311230I4WY0F622038202016011419515311230I4WY0F622038232016011419515311230I4WY0F622038182016011419515311230I4WY0F622038172016011419515311230I4WY0F6220382120160114195153"; BASE64Encoder encoder = new BASE64Encoder(); //String str = encoder.encode(sb.toString().trim().getBytes("utf-8")); String str = encoder.encode(xml.getBytes("UTF-8")); String cjsbid = enterprise.getDeviceid();//设备ID String dwdm = enterprise.getDlcompanycode();//单位代码 String wsmm = result.getWsmm();//握手密码 call = (Call) service.createCall(); call.setTargetEndpointAddress(servicesUrl); call.setTimeout(5 * 60 * 1000);// 超时设定5分钟抛出异常 call.setOperationName("lssjsb");// 调用方法 call.setReturnType(XMLType.XSD_STRING);// 指定返回类型 call.addParameter("str", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);// 接口的参数 call.addParameter("sbid", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);// 接口的参数 call.addParameter("dwdm", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);// 接口的参数 call.addParameter("wsmm", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);// 接口的参数 String callResult = (String) call.invoke(new Object[] { str,cjsbid, dwdm,wsmm });// 调用服务并返回存在的对应数据 BASE64Decoder decoder = new BASE64Decoder(); String xmlCode = null; try { xmlCode = new String(decoder.decodeBuffer(callResult)); DlReportResult reportResult = (DlReportResult) BeanUtils.xmlToBean(xmlCode,DlReportResult.class); DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyyMMddHHmmss"); DateTime dateTime = dateTimeFormatter.parseDateTime(reportResult.getSjscsj()); Date uploadAt = dateTime.toDate(); orderInfo.setIsupload((byte)1); orderInfo.setUploadat(uploadAt); orderInfo.setReturncode(reportResult.getFhlx()); } catch (IOException e1) { e1.printStackTrace(); orderInfo.setReturncode("999"); orderInfo.setIsupload((byte)2); } } catch (Exception e) { System.out.println("调用webservice失败!" + e.getMessage()); orderInfo.setReturncode("998"); orderInfo.setIsupload((byte)2); } saleOrderService.updateById(orderInfo); } } } class DlResult{ private String wsmm; private String fwdz; DlResult() { } public DlResult(String wsmm, String fwdz) { this.wsmm = wsmm; this.fwdz = fwdz; } public String getWsmm() { return wsmm; } public void setWsmm(String wsmm) { this.wsmm = wsmm; } public String getFwdz() { return fwdz; } public void setFwdz(String fwdz) { this.fwdz = fwdz; } } @XmlRootElement(name="fh") class ReportEntity{ private String sjbs; private String jylx; private String sjscsj; private String dwdm; private String cjsbid; private String zjlx; private String zjhm; private List tms; public String getSjbs() { return sjbs; } public void setSjbs(String sjbs) { this.sjbs = sjbs; } public String getJylx() { return jylx; } public void setJylx(String jylx) { this.jylx = jylx; } public String getSjscsj() { return sjscsj; } public void setSjscsj(String sjscsj) { this.sjscsj = sjscsj; } public String getDwdm() { return dwdm; } public void setDwdm(String dwdm) { this.dwdm = dwdm; } public String getCjsbid() { return cjsbid; } public void setCjsbid(String cjsbid) { this.cjsbid = cjsbid; } public String getZjlx() { return zjlx; } public void setZjlx(String zjlx) { this.zjlx = zjlx; } public String getZjhm() { return zjhm; } public void setZjhm(String zjhm) { this.zjhm = zjhm; } @XmlElement(name="tms") public List getTms() { return tms; } public void setTms(List tms) { this.tms = tms; } } @XmlRootElement(name="tms") class TmsEntity{ private String bh; private String sj; public String getBh() { return bh; } public void setBh(String bh) { this.bh = bh; } public TmsEntity() { } public TmsEntity(String bh, String sj) { this.bh = bh; this.sj = sj; } public String getSj() { return sj; } public void setSj(String sj) { this.sj = sj; } } @XmlRootElement(name="fh") class DlReportResult{ private String sjbs; private String cjsbid; private String sjscsj; private String fhlx; private String fhsj; public String getSjbs() { return sjbs; } public void setSjbs(String sjbs) { this.sjbs = sjbs; } public String getCjsbid() { return cjsbid; } public void setCjsbid(String cjsbid) { this.cjsbid = cjsbid; } public String getSjscsj() { return sjscsj; } public void setSjscsj(String sjscsj) { this.sjscsj = sjscsj; } public String getFhlx() { return fhlx; } public void setFhlx(String fhlx) { this.fhlx = fhlx; } public String getFhsj() { return fhsj; } public void setFhsj(String fhsj) { this.fhsj = fhsj; } }