package com.chinacreator.videoalliance.order.service; import com.chinacreator.common.exception.BusinessException; import com.chinacreator.videoalliance.order.bean.*; import com.chinacreator.videoalliance.order.dao.SPDao; import com.chinacreator.videoalliance.order.pojo.*; import com.chinacreator.videoalliance.order.util.*; import org.codehaus.jackson.map.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.sql.SQLException; import java.util.*; /** * Create by IntelliJ IDEA. * Author: EricJin * Date: 08/14/2018 15:35 */ @Service public class UnifiedAuthService { @Autowired private SPDao spDao; // private static final String AUTH_URL = "http://10.199.99.177:86/unifiedauth/ordersync"; //TEST // private static final String AUTH_URL = "http://10.199.99.51:809/unifiedauth/ordersync"; //PROD private static final String AUTH_URL = "http://172.16.1.81:809/unifiedauth/ordersync"; //PROD /** * call the unifiedAuth service to Sycn the Order to the unifiedAuth platform * @param orderInfo * @return * @throws Exception */ public Boolean sycnOrder(OrderInfo orderInfo) throws Exception { SPInfo spInfo = spDao.findById(orderInfo.getSpid()); if(!StringUtils.isEmpty(orderInfo.getSeqnumber())){ return true; } //not need sycn Order, return true to go to order if(!checkNeededSycnOrder(orderInfo,spInfo)) return true; //if need to sycn Order , assemble the Bean and post to the unifiedAuth OrderBean orderBean = assembleOrderBean(orderInfo,spInfo); //wrap the orderBean to json ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(orderBean); System.out.println("【AuthRequ====】" + json); String resp = URLUtil.post(AUTH_URL, json,10000,"application/json"); System.out.println("【AuthResp----】" + resp); Map map = JsonUtil.jsonToMap(resp); //get the response,and check the code. if ("0000".equals(map.get("resultcode"))) return true; else throw new BusinessException(map.get("resultcode").toString(), "UnifiedAuth Failed:" + map.get("resultinfo").toString()); } private boolean checkNeededSycnOrder(OrderInfo orderInfo, SPInfo spInfo) throws Exception { //not need return false if (spInfo.getNeedUnifiedAuthSync() == null || !"1".equals(spInfo.getNeedUnifiedAuthSync().trim())) return false; //need ,then check the token if (StringUtils.isEmpty(orderInfo.getToken())) { throw new BusinessException("8002", "TOKEN参数无效"); } return true; } private OrderBean assembleOrderBean(OrderInfo orderInfo, SPInfo spInfo) throws SQLException { String sequence = DateUtils.getDateFromFormat("MMddhhmmss") + "420010" + SequenceUtils.getSequence(); orderInfo.setSeqnumber(sequence); OrderBean orderBean = new OrderBean(); orderBean.setSeqNumber(sequence); //订单流水号 orderBean.setAccessType(orderInfo.getAccess()); //h5, sdk orderBean.setToken(orderInfo.getToken()); orderBean.setOrderId(sequence); orderBean.setPhone(orderInfo.getUserid()); orderBean.setPrice(spInfo.getPrice()); if ("1".equals(orderBean.getAccessType())) orderBean.setOrderMethod("1"); //web else if ("2".equals(orderBean.getAccessType())) orderBean.setOrderMethod("5"); //app orderBean.setFeeplan(spInfo.getType() == 0 ? "3" : "1"); //0 按次--3 包周期 其他包月--1 orderBean.setUpdateType("1"); //1 订购 2 续订 orderBean.setSubscribeType("1"); orderBean.setServiceType("80"); //set product SpProduct spProduct = new SpProduct(spInfo.getSpid(),spInfo.getSpname()); orderBean.getSpProduct().add(spProduct); Product product = new Product(spInfo.getVacproductid(),spInfo.getSpname()); orderBean.getProduct().add(product); orderBean.setSpid(spInfo.getSpcode()); orderBean.setSpName(spInfo.getSpcodename()); orderBean.setDeveloperName("联通在线信息科技有限公司"); orderBean.setSpServPhone("10010"); //sp客服电话 setDate(orderBean); return orderBean; } private void setDate(OrderBean orderBean) { String format = "yyyyMMddHHmmss"; Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); String now = DateUtils.getDateFromFormat(format,calendar); //set start date orderBean.setSubscribeTime(now); orderBean.setRentDate(now); orderBean.setEffectiveDate(now); //set end date calendar.add(Calendar.MONTH,1); calendar.set(Calendar.HOUR,23); calendar.set(Calendar.MINUTE,59); calendar.set(Calendar.SECOND,59); String expireDate = DateUtils.getDateFromFormat(format,calendar); orderBean.setExpireDate(expireDate); } public static void main(String[] args) { String sequence = DateUtils.getDateFromFormat("MMddhhmmss") + "420010" + SequenceUtils.getSequence(); System.out.println(sequence); } }