Search in sources :

Example 46 with Bill

use of com.itrus.portal.db.Bill in project portal by ixinportal.

the class APIService method entAuth.

/**
 * 提交企业认证申请
 *
 * @param authHmac
 *            hmac签名值,采用HmacSHA1算法
 * @param appId
 *            应用标识
 * @param productId
 *            项目产品标识
 * @param orderNumber
 *            申请流水号,审核拒绝修改提交时必填 (创建申请为空,修改申请不为空)
 * @param enterpriseType
 *            企业类型 1.企业,2.个体工商户,3.事业单位/政府机关
 * @param isThreeInOne
 *            是否三证合一
 * @param enterpriseName
 *            企业名称,事业单位名称
 * @param licenseNo
 *            营业执照注册号或统一社会信用代码,事业单位法人证书编号
 * @param orgCode
 *            组织机构代码(三证合一时非必填)
 * @param taxNo
 *            税务登记证号码(三证合一时非必填,或根据业务需要选填)
 * @param legalName
 *            法定代表人姓名(根据业务需要选填)
 * @param legalCardType
 *            证件类型(1代表身份证,2护照,3其他)
 * @param legalIdCardNo
 *            证件号码
 * @param agentName
 *            代理人姓名
 * @param agentPhone
 *            代理人手机号
 * @param agentEmail
 *            代理人邮箱
 * @param agentTelephone
 *            代理人固定电话(非必填)
 * @param agentCardType
 *            证件类型(1代表身份证,2护照,3其他)
 * @param agentIdCardNo
 *            证件号码
 * @return status 1: 表示处理正常, billId: 订单编号, orderNumber: 申请流水号 status 0:
 *         表示处理失败, message: 失败原因
 */
@PostMapping(value = "/auth/entAuth")
@ResponseBody
public Map<String, Object> entAuth(@RequestHeader("Content-Signature") String authHmac, @RequestParam(value = "appId", required = true) String appId, @RequestParam(value = "productId", required = true) String productId, @RequestParam(value = "orderNumber", required = false) String orderNumber, @RequestParam(value = "enterpriseType", required = false) String enterpriseType, @RequestParam(value = "isThreeInOne", required = true) boolean isThreeInOne, @RequestParam(value = "enterpriseName", required = false) String enterpriseName, @RequestParam(value = "licenseNo", required = false) String licenseNo, @RequestParam(value = "orgCode", required = false) String orgCode, @RequestParam(value = "taxNo", required = false) String taxNo, @RequestParam(value = "legalName", required = false) String legalName, @RequestParam(value = "legalCardType", required = false) Integer legalCardType, @RequestParam(value = "legalIdCardNo", required = false) String legalIdCardNo, @RequestParam(value = "agentName", required = false) String agentName, @RequestParam(value = "agentPhone", required = false) String agentPhone, @RequestParam(value = "agentEmail", required = false) String agentEmail, @RequestParam(value = "agentTelephone", required = false) String agentTelephone, @RequestParam(value = "agentCardType", required = false) Integer agentCardType, @RequestParam(value = "agentIdCardNo", required = false) String agentIdCardNo, HttpServletRequest request) {
    log.error("【APIService 提交申请日志】appId=" + appId + ",productId=" + productId + ",orderNumber=" + orderNumber + ",enterpriseType=" + enterpriseType + ",isThreeInOne=" + isThreeInOne + ",enterpriseName" + enterpriseName + ",licenseNo=" + licenseNo + ",orgCode=" + orgCode + ",taxNo=" + taxNo + ",legalName=" + legalName + ",legalCardType=" + legalCardType + ",legalIdCardNo=" + legalIdCardNo + ",agentName=" + agentName + ",agentPhone=" + agentPhone + ",agentEmail=" + agentEmail + ",agentTelephone=" + agentTelephone + ",agentCardType=" + agentCardType + ",agentIdCardNo=" + agentIdCardNo);
    Map<String, Object> result = new HashMap<String, Object>();
    result.put("status", 0);
    // 验证参数是否完整
    if (StringUtils.isEmpty(authHmac) || StringUtils.isEmpty(appId) || StringUtils.isEmpty(productId) || StringUtils.isEmpty(enterpriseType) || StringUtils.isEmpty(enterpriseName) || StringUtils.isEmpty(licenseNo) || StringUtils.isEmpty(agentName) || StringUtils.isEmpty(agentPhone) || StringUtils.isEmpty(agentEmail)) {
        result.put("status", 0);
        result.put("message", "提交的参数信息不完整");
        return result;
    }
    // 得到对应产品信息
    Product product = productService.getProductById(StringTools.getLong(productId)[0]);
    if (product == null) {
        result.put("status", 0);
        result.put("message", "提交的项目产品标识有误");
        return result;
    }
    // 得到应用信息 改成service
    Map<String, ApplicationInfo> appInfoMap = CacheCustomer.getAPP_INFO_MAP();
    ApplicationInfo applicationInfo = appInfoMap.get(appId);
    if (applicationInfo == null) {
        ApplicationInfoExample applicationInfoExample = new ApplicationInfoExample();
        ApplicationInfoExample.Criteria appInfoExampleCriteria = applicationInfoExample.createCriteria();
        appInfoExampleCriteria.andAppIdEqualTo(appId);
        applicationInfo = sqlSession.selectOne("com.itrus.portal.db.ApplicationInfoMapper.selectByExample", applicationInfoExample);
    }
    if (applicationInfo == null) {
        result.put("message", "应用标识不存在");
        return result;
    }
    if (!applicationInfo.getAccessIp().contains(request.getRemoteAddr()) && "1".equals(applicationInfo.getIsIpStatus())) {
        result.put("status", -1);
        result.put("message", "没有此服务权限");
        log.error("APIService_AccsessIp : " + request.getRemoteAddr());
        return result;
    }
    // 验证hmac有效性
    try {
        String macVal = CertService.hmacSha1(applicationInfo.getSecretKey().getBytes(), (appId + productId + orderNumber + enterpriseType + isThreeInOne + enterpriseName + licenseNo + orgCode + taxNo + legalName + legalCardType + legalIdCardNo + agentName + agentPhone + agentEmail + agentTelephone + agentCardType + agentIdCardNo).getBytes("utf-8"));
        // sc.getAddressKey()), false);
        if (!authHmac.equals("HMAC-SHA1 " + macVal)) {
            result.put("status", -2);
            result.put("message", "服务密钥错误");
            return result;
        }
    } catch (Exception e) {
        result.put("status", -3);
        result.put("message", "Hmac验证错误");
        e.printStackTrace();
        return result;
    }
    // orderNumber==null true:新建 , false:审核拒绝修改提交
    if (StringUtils.isEmpty(orderNumber)) {
        UserInfo userInfo = null;
        Certification certification = null;
        // 获取产品的认证等级需要认证的项
        certification = certificationService.getSelectById(product.getAuthentication());
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
        TransactionStatus status = transactionManager.getTransaction(def);
        try {
            // 判断手机号是否存在
            userInfo = userInfoService.getUserInfoByMphone(agentPhone);
            if (userInfo != null) {
            /*
					 * result.put("status", 0); result.put("message",
					 * "该手机号已经存在关联用户"); return result;
					 */
            } else {
                try {
                    int passNumber = (int) ((Math.random() * 9 + 1) * 10000000);
                    // 新建用户 随机密码默认
                    userInfo = userInfoService.registerUserInfo(agentPhone, String.valueOf(passNumber), product.getProject());
                } catch (Exception e) {
                    result.put("status", 0);
                    result.put("message", "新建用户失败,请重试");
                    return result;
                }
            }
            /**
             * 需要认证的项:0营业执照,1组织机构代码,2税务登记证,3授权书,4法定代表人/经营者 5代理人
             */
            Long[] items = StringTools.getLong(certification.getCertItems());
            // 保存企业信息
            Enterprise enterprise = new Enterprise();
            enterprise.setEnterpriseName(enterpriseName);
            enterprise.setEnterpriseNature(Integer.parseInt(enterpriseType));
            enterprise.setAuthenticationLevel(product.getAuthentication());
            enterprise = enterpriseService.saveOrUpdateEnterprise(enterprise);
            // 保存代理人信息
            userInfo.setEmail(agentEmail);
            userInfo.setRealName(agentName);
            userInfo = userInfoService.updateUserInfo(userInfo);
            // 添加企业-代理人关联关系
            userInfoEnterpriseServiceImpl.saveUserInfoEnterprise(userInfo.getId(), enterprise.getId());
            // 生成订单
            Bill bill = billService.saveBill(userInfo.getId(), enterprise.getId(), product.getId(), null, null, null, null, product.getProject(), 1, product.getPrice(), userInfo.getId(), ComNames.BILL_STATUS_3);
            String billId = UniqueIDUtils.genBilUID(bill);
            bill.setBillId(billId);
            bill.setAppId(appId);
            bill.setUid("{}");
            bill.setUid0("{}");
            bill.setOrderNumber(billId.substring(4, billId.length()));
            sqlSession.update("com.itrus.portal.db.BillMapper.updateByPrimaryKey", bill);
            sqlSession.flushStatements();
            // 保持执照证件信息
            // 是否有营业执照信息,默认false没有
            boolean hasBl = false;
            BusinessLicense businessLicense = new BusinessLicense();
            OrgCode org = new OrgCode();
            TaxRegisterCert taxregisterCert = new TaxRegisterCert();
            IdentityCard identityCard = new IdentityCard();
            Agent agent = new Agent();
            Proxy proxy = new Proxy();
            for (Long item : items) {
                if (ComNames.BUSINESS_ITEM.equals(item) && !enterprise.getEnterpriseNature().equals(3)) {
                    // 事业单位不填写营业执照
                    hasBl = true;
                    // 设置企业唯一标识
                    if (enterprise.getEnterpriseNature().equals(1) || enterprise.getEnterpriseNature().equals(2)) {
                        // 类型为企业和个体工商户:当三证合一时,企业标识为统一社会信用代码;当非三证合一时,企业标识为营业执照注册号;
                        enterprise.setEnterpriseSn(licenseNo);
                    }
                    // 保存营业执照
                    businessLicense.setEnterpriseName(enterpriseName);
                    if (isThreeInOne) {
                        businessLicense.setBusinessType(1);
                    } else {
                        businessLicense.setBusinessType(0);
                    }
                    businessLicense.setLicenseNo(licenseNo);
                    businessLicense = businessService.portSaveBusiness(enterprise.getId(), enterprise.getEnterpriseSn(), bill.getId(), userInfo.getId(), businessLicense, null != businessLicense.getId() ? 2 : 1);
                } else if (ComNames.ORG_CODE_ITEM.equals(item)) {
                    if (hasBl && businessLicense.getBusinessType().equals(1))
                        // 五证合一企业不用提交组织机构代码、税务登记信息
                        continue;
                    if (enterprise.getEnterpriseNature().equals(3)) {
                        // 类型为政府机关/事业单位:企业标识为组织机构代码
                        enterprise.setEnterpriseSn(orgCode);
                    }
                    // 保存组织机构代码
                    org.setEnterpriseName(enterpriseName);
                    org.setOrgCode(orgCode);
                    org = orgCodeService.saveOrgCode(enterprise.getId(), enterprise.getEnterpriseSn(), bill.getId(), userInfo.getId(), org, null != org.getId() ? 2 : 1);
                } else if (ComNames.TAX_CERT_ITEM.equals(item)) {
                    if (hasBl && businessLicense.getBusinessType().equals(1))
                        // 五证合一企业不用提交组织机构代码、税务登记信息
                        continue;
                    // 保存税务登记证
                    if (enterprise.getEnterpriseNature().equals(3))
                        // 事业单位不填写税务登记信息
                        continue;
                    taxregisterCert.setEnterpriseName(enterpriseName);
                    taxregisterCert.setCertNo(taxNo);
                    taxregisterCert = taxCertService.saveTaxCert(enterprise.getId(), enterprise.getEnterpriseSn(), bill.getId(), userInfo.getId(), taxregisterCert, null != taxregisterCert.getId() ? 2 : 1);
                } else if (ComNames.IDENTITY_CARD_ITEM.equals(item)) {
                    // 保存法定代表人
                    identityCard.setEnterpriseName(enterpriseName);
                    identityCard.setName(legalName);
                    identityCard.setCardType(legalCardType);
                    identityCard.setIdCode(legalIdCardNo);
                    identityCard = identityCardService.portSaveIdentityCard(enterprise.getId(), enterprise.getEnterpriseSn(), bill.getId(), userInfo.getId(), identityCard, null != identityCard.getId() ? 2 : 1);
                } else if (ComNames.AGENT_ITEM.equals(item)) {
                    // 保存代理人
                    agent.setEnterpriseName(enterpriseName);
                    agent.setName(agentName);
                    agent.setIdCode(agentIdCardNo);
                    agent.setCardType(agentCardType);
                    agent = agentService.portSaveAgent(enterprise.getId(), enterprise.getEnterpriseSn(), bill.getId(), userInfo.getId(), agent, null != agent.getId() ? 2 : 1);
                } else if (ComNames.PROXY_ITEM.equals(item)) {
                    // 保存授权书
                    proxy = proxyService.portSaveProxy(enterprise.getId(), userInfo.getUniqueId(), bill.getId(), userInfo.getId(), proxy);
                }
            }
            // 更新企业唯一标识
            enterprise = enterpriseService.updateEnterpriseSn(enterprise);
            transactionManager.commit(status);
            // 返回第三方数据
            result.put("status", 1);
            result.put("billId", bill.getBillId());
            result.put("orderNumber", bill.getOrderNumber());
            // 记录日志
            UserLog userlog = new UserLog();
            userlog.setProject(userInfo.getProject());
            userlog.setType("购买产品");
            userlog.setInfo(userInfo.getmPhone() + "购买了" + product.getName() + ",应用标识:" + appId);
            userlog.setHostId("未知");
            userlog.setSn(null == userInfo.getUniqueId() ? null : userInfo.getUniqueId());
            LogUtil.userlog(sqlSession, userlog);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            if (!status.isCompleted())
                transactionManager.rollback(status);
            UserLog userlog = new UserLog();
            userlog.setProject(product.getProject());
            userlog.setType("购买产品");
            userlog.setInfo("url:/api/auth/search,应用标识:" + appId + ",详细错误:" + e.getMessage());
            userlog.setHostId("未知");
            userlog.setSn(null == userInfo.getUniqueId() ? null : userInfo.getUniqueId());
            LogUtil.userlog(sqlSession, userlog);
            if (e.getMessage().contains("请提交完整") || e.getMessage().contains("请确认输入是否有误")) {
                result.put("message", e.getMessage());
                return result;
            }
            result.put("message", "服务端出现未知错误,请联系管理员");
            return result;
        } finally {
            if (!status.isCompleted())
                transactionManager.rollback(status);
        }
    } else {
        // 提交企业认证申请(审核拒绝修改提交时)
        Bill bill = billService.getBillByOrderNumber(orderNumber);
        if (bill == null) {
            result.put("message", "申请流水号不存在");
            return result;
        }
        UserInfo userInfo = userInfoService.getUserInfoByBillId(bill.getId());
        Enterprise enterprise = enterpriseService.getEnterpriseById(bill.getEnterprise());
        if (bill.getBillStatus() != ComNames.BILL_STATUS_4) {
            result.put("message", "该订单未审核拒绝");
            return result;
        }
        // 根据订单id获取产品需要认证项,
        List<String> certItems = sqlSession.selectList("com.itrus.portal.db.CertificationMapper.selectCertItemsByBillId", bill.getId());
        if (null == certItems || certItems.isEmpty()) {
            result.put("message", "服务端出现异常,请联系管理员");
            return result;
        }
        // 记录旧的企业唯一标识:
        String oldEnterpriseSn = enterprise.getEnterpriseSn();
        // 设置企业唯一标识
        if (enterpriseType.equals(1) || enterpriseType.equals(2)) {
            // 类型为企业和个体工商户:当三证合一时,企业标识为统一社会信用代码;当非三证合一时,企业标识为营业执照注册号;
            enterprise.setEnterpriseSn(licenseNo);
        }
        if (enterpriseType.equals(3)) {
            // 类型为政府机关/事业单位:企业标识为组织机构代码
            enterprise.setEnterpriseSn(orgCode);
        }
        // 修改企业名称
        enterprise.setEnterpriseName(enterpriseName.replace(" ", ""));
        // 修改企业性质
        enterprise.setEnterpriseNature(Integer.parseInt(enterpriseType));
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
        TransactionStatus status = transactionManager.getTransaction(def);
        try {
            // 将参数传入对象
            BusinessLicense businessLicense = new BusinessLicense();
            OrgCode orgCd = new OrgCode();
            TaxRegisterCert taxregisterCert = new TaxRegisterCert();
            IdentityCard identityCard = new IdentityCard();
            Agent agent = new Agent();
            Proxy proxy = new Proxy();
            businessLicense.setEnterpriseName(enterpriseName);
            if (isThreeInOne) {
                businessLicense.setBusinessType(1);
            } else {
                businessLicense.setBusinessType(0);
            }
            businessLicense.setLicenseNo(licenseNo);
            orgCd.setEnterpriseName(enterpriseName);
            orgCd.setOrgCode(orgCode);
            taxregisterCert.setEnterpriseName(enterpriseName);
            taxregisterCert.setCertNo(taxNo);
            identityCard.setEnterpriseName(enterpriseName);
            identityCard.setName(legalName);
            identityCard.setCardType(legalCardType);
            identityCard.setIdCode(legalIdCardNo);
            agent.setEnterpriseName(enterpriseName);
            agent.setName(agentName);
            agent.setIdCode(agentIdCardNo);
            agent.setCardType(agentCardType);
            // 删除订单关联的旧认证项,新增订单对应的新认证项
            billWebService.portSaveBillAuthenticationItems(certItems.get(0), Integer.parseInt(enterpriseType), bill.getId(), businessLicense, orgCd, taxregisterCert, identityCard, agent, proxy, enterprise, userInfo);
            // 3、判断该订单对应的企业的认证项是否为通过,若是通过,则重新设置为不通过
            if (null != enterprise.getAuthenticationLevel())
                enterprise.setAuthenticationLevel(product.getAuthentication());
            if (null != enterprise.getHasBl())
                enterprise.setHasBl(null);
            if (null != enterprise.getHasOrgCode())
                enterprise.setHasOrgCode(null);
            if (null != enterprise.getHasTaxCert())
                enterprise.setHasTaxCert(null);
            if (null != enterprise.getHasIdCard())
                enterprise.setHasIdCard(null);
            if (null != enterprise.getHasAgent())
                enterprise.setHasAgent(null);
            sqlSession.update("com.itrus.portal.db.EnterpriseMapper.updateByPrimaryKey", enterprise);
            bill.setBillStatus(ComNames.BILL_STATUS_3);
            sqlSession.update("com.itrus.portal.db.BillMapper.updateByPrimaryKeySelective", bill);
            transactionManager.commit(status);
            // 企业标识改变后,将旧目录中的图片复制到新目录中
            if (!oldEnterpriseSn.equals(enterprise.getEnterpriseSn())) {
                CopyFile.copyFile(systemConfigService.getTrustDir().getPath() + File.separator + oldEnterpriseSn, systemConfigService.getTrustDir().getPath() + File.separator + enterprise.getEnterpriseSn());
            }
            // 判断代理人手机号是否存在 true:把全部订单关联到新手机号用户
            UserInfo userInfo1 = userInfoService.getUserInfoByMphone(agentPhone);
            if (userInfo1 != null) {
                BillExample be = new BillExample();
                BillExample.Criteria bec = be.createCriteria();
                bec.andUniqueIdEqualTo(userInfo.getId());
                List<Bill> billList = sqlSession.selectList("com.itrus.portal.db.BillMapper.selectByExample", be);
                // 循环修改订单关联的用户信息
                for (Bill b : billList) {
                    b.setUniqueId(userInfo1.getId());
                    sqlSession.update("com.itrus.portal.db.BillMapper.updateByPrimaryKeySelective", b);
                }
                userInfo1.setEnterprise(userInfo.getEnterprise());
                sqlSession.update("com.itrus.portal.db.UserInfoMapper.updateByPrimaryKeySelective", userInfo1);
                userInfo.setEnterprise(null);
                sqlSession.update("com.itrus.portal.db.UserInfoMapper.updateByPrimaryKeySelective", userInfo);
                UserinfoEnterpriseExample uee = new UserinfoEnterpriseExample();
                UserinfoEnterpriseExample.Criteria ueec = uee.createCriteria();
                ueec.andUserInfoEqualTo(userInfo.getId());
                List<UserinfoEnterprise> ueList = sqlSession.selectList("com.itrus.portal.db.UserinfoEnterpriseMapper.selectByExample", uee);
                for (UserinfoEnterprise ue : ueList) {
                    ue.setUserInfo(userInfo1.getId());
                    sqlSession.update("com.itrus.portal.db.UserinfoEnterpriseMapper.updateByPrimaryKeySelective", ue);
                }
            } else {
                userInfo.setmPhone(agentPhone);
                sqlSession.update("com.itrus.portal.db.UserInfoMapper.updateByPrimaryKeySelective", userInfo);
            }
            result.put("status", 1);
            result.put("billId", bill.getBillId());
        } catch (UserInfoServiceException e) {
            if (!status.isCompleted())
                transactionManager.rollback(status);
            result.put("message", "服务端出现未知错误,请联系管理员");
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            if (!status.isCompleted())
                transactionManager.rollback(status);
            UserLog userlog = new UserLog();
            userlog.setType("修改订单");
            userlog.setInfo("url:/api/auth/search,应用标识:" + appId + ",详细错误:" + e.getMessage());
            userlog.setHostId("未知");
            userlog.setProject(userInfo.getProject());
            LogUtil.userlog(sqlSession, userlog);
            result.put("message", "服务端出现未知错误,请联系管理员");
            if (e.getMessage().contains("有误")) {
                result.put("message", e.getMessage());
            }
            return result;
        } finally {
            if (!status.isCompleted())
                transactionManager.rollback(status);
        }
        return result;
    }
}
Also used : DefaultTransactionDefinition(org.springframework.transaction.support.DefaultTransactionDefinition) HashMap(java.util.HashMap) ApplicationInfo(com.itrus.portal.db.ApplicationInfo) Product(com.itrus.portal.db.Product) TransactionStatus(org.springframework.transaction.TransactionStatus) UserInfo(com.itrus.portal.db.UserInfo) Proxy(com.itrus.portal.db.Proxy) BillExample(com.itrus.portal.db.BillExample) UserinfoEnterpriseExample(com.itrus.portal.db.UserinfoEnterpriseExample) IdentityCard(com.itrus.portal.db.IdentityCard) ApplicationInfoExample(com.itrus.portal.db.ApplicationInfoExample) Agent(com.itrus.portal.db.Agent) UserLog(com.itrus.portal.db.UserLog) JSONException(org.json.JSONException) UserInfoServiceException(com.itrus.portal.exception.UserInfoServiceException) Certification(com.itrus.portal.db.Certification) UserInfoServiceException(com.itrus.portal.exception.UserInfoServiceException) OrgCode(com.itrus.portal.db.OrgCode) BusinessLicense(com.itrus.portal.db.BusinessLicense) UserinfoEnterprise(com.itrus.portal.db.UserinfoEnterprise) Enterprise(com.itrus.portal.db.Enterprise) UserinfoEnterprise(com.itrus.portal.db.UserinfoEnterprise) Bill(com.itrus.portal.db.Bill) JSONObject(com.alibaba.fastjson.JSONObject) TaxRegisterCert(com.itrus.portal.db.TaxRegisterCert) PostMapping(org.springframework.web.bind.annotation.PostMapping) ResponseBody(org.springframework.web.bind.annotation.ResponseBody)

Example 47 with Bill

use of com.itrus.portal.db.Bill in project portal by ixinportal.

the class APIService method entAuth1.

/*
	 * @PostMapping(value= "/auth/entAuthPay") public String entAuthPay(
	 * 
	 * @RequestHeader("Content-Signature") String authHmac,
	 * 
	 * @RequestParam("appId") String appId,
	 * 
	 * @RequestParam("productId") String productId,
	 * 
	 * @RequestParam("orderNumber") String orderNumber,
	 * 
	 * @RequestParam("enterpriseType") String enterpriseType,
	 * 
	 * @RequestParam("isThreeInOne") boolean isThreeInOne,
	 * 
	 * @RequestParam("enterpriseName") String enterpriseName,
	 * 
	 * @RequestParam("licenseNo") String licenseNo,
	 * 
	 * @RequestParam("orgCode") String orgCode,
	 * 
	 * @RequestParam("taxNo") String taxNo,
	 * 
	 * @RequestParam("legalName") String legalName,
	 * 
	 * @RequestParam("legalCardType") Integer legalCardType,
	 * 
	 * @RequestParam("legalIdCardNo") String legalIdCardNo,
	 * 
	 * @RequestParam("agentName") String agentName,
	 * 
	 * @RequestParam("agentPhone") String agentPhone,
	 * 
	 * @RequestParam("agentEmail") String agentEmail,
	 * 
	 * @RequestParam("agentTelephone")String agentTelephone,
	 * 
	 * @RequestParam("agentCardType") Integer agentCardType,
	 * 
	 * @RequestParam("agentIdCardNo")String agentIdCardNo, HttpServletRequest
	 * request,Model uiModel){ HttpSession session = request.getSession();
	 * //新创建订单设置为 代支付状态 if(StringUtils.isEmpty(orderNumber)){
	 * 
	 * //String authHmac = "123";
	 * 
	 * Map<String, Object> result = this.entAuth(authHmac, appId, productId,
	 * orderNumber, enterpriseType, isThreeInOne, enterpriseName , licenseNo,
	 * orgCode, taxNo, legalName, legalCardType, legalIdCardNo, agentName,
	 * agentPhone , agentEmail, agentTelephone, agentCardType, agentIdCardNo,
	 * request);
	 * 
	 * if(result != null && (int)result.get("status") == 1){ Bill bill =
	 * billService.getBillByOrderNumber(result.get("orderNumber").toString());
	 * Product product = sqlSession.selectOne(
	 * "com.itrus.portal.db.ProductMapper.selectByPrimaryKey",
	 * bill.getProduct()); uiModel.addAttribute("product", product);
	 * 
	 * bill.setBillStatus(1); bill.setBillSum(product.getPrice()); sqlSession
	 * .update("com.itrus.portal.db.BillMapper.updateByPrimaryKeySelective",
	 * bill); //uiModel.addAttribute("webbill", bill);
	 * session.setAttribute("webbill", bill); UserInfo userInfo =
	 * sqlSession.selectOne(
	 * "com.itrus.portal.db.UserInfoMapper.selectByPrimaryKey",
	 * bill.getUniqueId()); session.setAttribute("webuserInfo", userInfo);
	 * session.setAttribute("webverifyCodeStatus", true);// 通过 if
	 * (product.getOnpay() != null && product.getOnpay() != ""){ List<Long>
	 * onlinepays = new ArrayList<Long>(); String[] onpay =
	 * (product.getOnpay()).split(","); Map<Integer, String> map = new
	 * HashMap<Integer, String>(); for (int i = 0; i < onpay.length; i++) {
	 * OnlinePay op = sqlSession .selectOne(
	 * "com.itrus.portal.db.OnlinePayMapper.selectByPrimaryKey", onpay[i]);
	 * map.put(op.getSort(), onpay[i]); } Set<Integer> set = map.keySet();
	 * Object[] obj = set.toArray(); Arrays.sort(obj); for (int i =
	 * (onpay.length - 1); i >= 0; i--) { String a = map.get(obj[i]);
	 * onlinepays.add(Long.parseLong(a)); }
	 * 
	 * Map<Long, OnlinePay> opMap = sqlSession .selectMap(
	 * "com.itrus.portal.db.OnlinePayMapper.selectByExample", "id");
	 * uiModel.addAttribute("opMap", opMap); uiModel.addAttribute("onlinepays",
	 * onlinepays); Map<Long, PayConfig> pcMap = sqlSession .selectMap(
	 * "com.itrus.portal.db.PayConfigMapper.selectByExample", "id");
	 * uiModel.addAttribute("pcMap", pcMap); } Enterprise emterprise =
	 * sqlSession.selectOne(
	 * "com.itrus.portal.db.EnterpriseMapper.selectByPrimaryKey",
	 * bill.getEnterprise()); session.setAttribute("webenterprise",
	 * emterprise);//得到付款方姓名 DigitalCert digitalCert = sqlSession.selectOne(
	 * "com.itrus.portal.db.DigitalCertMapper.selectByPrimaryKey",
	 * product.getCert()); uiModel.addAttribute("digitalCert", digitalCert);
	 * //期限
	 * 
	 * if(StringUtils.isNotBlank(product.getPay())){ Transfer transfer =
	 * sqlSession.selectOne(
	 * "com.itrus.portal.db.TransferMapper.selectByPrimaryKey",
	 * Long.parseLong(product.getPay())); uiModel.addAttribute("transfer",
	 * transfer);//银行账户汇款 } return "ixinweb/zhifu"; } return
	 * "ixinweb/tijiaoshibai"; }else{ return "ixinweb/tijiaoshibai"; } }
	 * 
	 * @RequestMapping(value = "/to") public String to(){ return
	 * "ixinweb/apiResult"; }
	 */
/**
 * 提交企业认证申请(新加)
 *
 * @param authHmac
 *            hmac签名值,采用HmacSHA1算法
 * @param appId
 *            应用标识
 * @param productId
 *            项目产品标识
 * @param orderNumber
 *            申请流水号,审核拒绝修改提交时必填 (创建申请为空,修改申请不为空)
 * @param enterpriseType
 *            企业类型 1.企业,2.个体工商户,3.事业单位/政府机关
 * @param isThreeInOne
 *            是否三证合一
 * @param enterpriseName
 *            企业名称,事业单位名称
 * @param licenseNo
 *            营业执照注册号或统一社会信用代码,事业单位法人证书编号
 * @param orgCode
 *            组织机构代码(三证合一时非必填)
 * @param taxNo
 *            税务登记证号码(三证合一时非必填,或根据业务需要选填)
 * @param legalName
 *            法定代表人姓名(根据业务需要选填)
 * @param legalCardType
 *            证件类型(1代表身份证,2护照,3其他)
 * @param legalIdCardNo
 *            证件号码
 * @param agentName
 *            代理人姓名
 * @param agentPhone
 *            代理人手机号
 * @param agentEmail
 *            代理人邮箱
 * @param agentTelephone
 *            代理人固定电话(非必填)
 * @param agentCardType
 *            证件类型(1代表身份证,2护照,3其他)
 * @param agentIdCardNo
 *            证件号码
 * @param detailAdds
 *            配送地址
 * @param certUid
 *            特定证书信息
 * @param certsize
 *            企业用户证书数量
 * @param isenterprisecert
 *            是否购买企业证书
 * @param productType
 *            产品业务类型
 * @return status 1: 表示处理正常, billId: 订单编号, orderNumber: 申请流水号 status 0:
 *         表示处理失败, message: 失败原因
 */
@PostMapping(value = "/auth/entAuth1")
@ResponseBody
public Map<String, Object> entAuth1(@RequestHeader("Content-Signature") String authHmac, @RequestParam(value = "appId", required = true) String appId, @RequestParam(value = "productId", required = true) String productId, @RequestParam(value = "orderNumber", required = false) String orderNumber, @RequestParam(value = "enterpriseType", required = false) String enterpriseType, @RequestParam(value = "isThreeInOne", required = true) boolean isThreeInOne, @RequestParam(value = "enterpriseName", required = false) String enterpriseName, @RequestParam(value = "licenseNo", required = false) String licenseNo, @RequestParam(value = "orgCode", required = false) String orgCode, @RequestParam(value = "taxNo", required = false) String taxNo, @RequestParam(value = "legalName", required = false) String legalName, @RequestParam(value = "legalCardType", required = false) Integer legalCardType, @RequestParam(value = "legalIdCardNo", required = false) String legalIdCardNo, @RequestParam(value = "agentName", required = false) String agentName, @RequestParam(value = "agentPhone", required = false) String agentPhone, @RequestParam(value = "agentEmail", required = false) String agentEmail, @RequestParam(value = "agentTelephone", required = false) String agentTelephone, @RequestParam(value = "agentCardType", required = false) Integer agentCardType, @RequestParam(value = "agentIdCardNo", required = false) String agentIdCardNo, @RequestParam(value = "detailAdds", required = false) String detailAdds, @RequestParam(value = "certUid", required = false) String certUid, @RequestParam(value = "certsize", required = false) Integer certsize, @RequestParam(value = "isenterprisecert", required = false) Boolean isenterprisecert, @RequestParam(value = "courier", required = false) Integer courier, @RequestParam(value = "cost", required = false) Integer cost, /* @RequestParam(value = "productType", required = false)String
			 * productType,
			 */
HttpServletRequest request) {
    log.error("【APIService 提交申请日志】appId=" + appId + ",authHmac=" + authHmac + ",productId=" + productId + ",orderNumber=" + orderNumber + ",enterpriseType=" + enterpriseType + ",isThreeInOne=" + isThreeInOne + ",enterpriseName" + enterpriseName + ",licenseNo=" + licenseNo + ",orgCode=" + orgCode + ",taxNo=" + taxNo + ",legalName=" + legalName + ",legalCardType=" + legalCardType + ",legalIdCardNo=" + legalIdCardNo + ",agentName=" + agentName + ",agentPhone=" + agentPhone + ",agentEmail=" + agentEmail + ",agentTelephone=" + agentTelephone + ",agentCardType=" + agentCardType + ",agentIdCardNo=" + agentIdCardNo + ",detailAdds=" + detailAdds + ",certUid=" + certUid + ",certsize=" + certsize + ",courier=" + courier + ",cost=" + cost + ",isenterprisecert" + isenterprisecert);
    Map<String, Object> result = new HashMap<String, Object>();
    // 验证参数是否完整
    if (StringUtils.isEmpty(authHmac) || StringUtils.isEmpty(appId) || StringUtils.isEmpty(productId) || StringUtils.isEmpty(enterpriseType) || StringUtils.isEmpty(enterpriseName) || StringUtils.isEmpty(licenseNo) || /* 营业执照 */
    StringUtils.isEmpty(agentName) || StringUtils.isEmpty(agentPhone) || StringUtils.isEmpty(agentEmail)) {
        result.put("status", 0);
        result.put("message", "提交的参数信息不完整");
        return result;
    }
    log.error("企业名称位数=" + enterpriseName.length());
    if (enterpriseName.length() > 32) {
        result.put("status", -7);
        result.put("message", "企业名称超过32个汉字,请检查企业名称或联系管理员");
        return result;
    }
    // 得到对应产品信息
    Product product = productService.getProductById(StringTools.getLong(productId)[0]);
    if (product == null) {
        result.put("status", 0);
        result.put("message", "提交的项目产品标识有误");
        return result;
    }
    DigitalCert dcert = sqlSession.selectOne("com.itrus.portal.db.DigitalCertMapper.selectByPrimaryKey", product.getCert());
    if ("3".equals(dcert.getInitBuy())) {
        if (null != isenterprisecert) {
            if (isenterprisecert == false) {
                isenterprisecert = false;
            } else {
                isenterprisecert = true;
            }
        } else {
            isenterprisecert = true;
        }
    } else {
        if (null != isenterprisecert) {
            if (isenterprisecert == false) {
                isenterprisecert = false;
            } else {
                isenterprisecert = true;
            }
        } else {
            isenterprisecert = null;
        }
    }
    if ("2".equals(dcert.getCertType())) {
        if (StringUtils.isEmpty(certUid)) {
            result.put("status", 0);
            result.put("message", "提交的参数信息不完整,证书信息项不能为空");
            return result;
        }
    }
    if (StringUtils.isNotEmpty(product.getDelivery())) {
        if (StringUtils.isEmpty(detailAdds)) {
            result.put("status", 0);
            result.put("message", "提交的参数信息不完整,配送地址不能为空");
            return result;
        }
    }
    // 得到应用信息 改成service
    Map<String, ApplicationInfo> appInfoMap = CacheCustomer.getAPP_INFO_MAP();
    ApplicationInfo applicationInfo = appInfoMap.get(appId);
    if (applicationInfo == null) {
        ApplicationInfoExample applicationInfoExample = new ApplicationInfoExample();
        ApplicationInfoExample.Criteria appInfoExampleCriteria = applicationInfoExample.createCriteria();
        appInfoExampleCriteria.andAppIdEqualTo(appId);
        applicationInfo = sqlSession.selectOne("com.itrus.portal.db.ApplicationInfoMapper.selectByExample", applicationInfoExample);
    }
    if (applicationInfo == null) {
        result.put("status", 0);
        result.put("message", "应用标识不存在");
        return result;
    }
    if (!applicationInfo.getAccessIp().contains(request.getRemoteAddr()) && "1".equals(applicationInfo.getIsIpStatus())) {
        result.put("status", -1);
        result.put("message", "此IP没有此服务权限");
        log.error("APIService_AccsessIp : " + request.getRemoteAddr());
        return result;
    }
    // 验证hmac有效性
    log.error("打印isenterprisecert=" + isenterprisecert);
    try {
        if (isenterprisecert != null) {
            String macVal = CertService.hmacSha1(applicationInfo.getSecretKey().getBytes(), (appId + productId + orderNumber + enterpriseType + isThreeInOne + enterpriseName + licenseNo + orgCode + taxNo + legalName + legalCardType + legalIdCardNo + agentName + agentPhone + agentEmail + agentTelephone + agentCardType + agentIdCardNo + detailAdds + certUid + certsize + courier + cost + isenterprisecert).getBytes("utf-8"));
            if (!authHmac.equals("HMAC-SHA1 " + macVal)) {
                result.put("status", -3);
                result.put("message", "服务密钥错误");
                return result;
            }
        } else {
            String macVal = CertService.hmacSha1(applicationInfo.getSecretKey().getBytes(), (appId + productId + orderNumber + enterpriseType + isThreeInOne + enterpriseName + licenseNo + orgCode + taxNo + legalName + legalCardType + legalIdCardNo + agentName + agentPhone + agentEmail + agentTelephone + agentCardType + agentIdCardNo + detailAdds + certUid + certsize + courier + cost).getBytes("utf-8"));
            if (!authHmac.equals("HMAC-SHA1 " + macVal)) {
                result.put("status", -3);
                result.put("message", "服务密钥错误");
                return result;
            }
        }
    // Base64.encode(HMACSHA1.getHmacSHA1(csr+billId+uid+userId,
    // sc.getAddressKey()), false);
    } catch (Exception e) {
        result.put("status", -2);
        result.put("message", "Hmac验证错误");
        e.printStackTrace();
        return result;
    }
    // orderNumber==null true:新建 , false:审核拒绝修改提交
    if (StringUtils.isEmpty(orderNumber)) {
        UserInfo userInfo = null;
        Certification certification = null;
        // 获取产品的认证等级需要认证的项
        certification = certificationService.getSelectById(product.getAuthentication());
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
        TransactionStatus status = transactionManager.getTransaction(def);
        try {
            // 判断手机号是否存在
            userInfo = userInfoService.getUserInfoByMphone(agentPhone);
            if (userInfo != null) {
            /*
					 * result.put("status", 0); result.put("message",
					 * "该手机号已经存在关联用户"); return result;
					 */
            } else {
                try {
                    int passNumber = (int) ((Math.random() * 9 + 1) * 10000000);
                    // 新建用户 随机密码默认
                    userInfo = userInfoService.registerUserInfo(agentPhone, String.valueOf(passNumber), product.getProject());
                } catch (Exception e) {
                    result.put("status", -4);
                    result.put("message", "新建用户失败,请重试");
                    return result;
                }
            }
            /**
             * 需要认证的项:0营业执照,1组织机构代码,2税务登记证,3授权书,4法定代表人/经营者 5代理人
             */
            if (certification == null) {
                result.put("status", -6);
                result.put("message", "产品的认证等级未配置需要认证的项");
                return result;
            }
            Long[] items = StringTools.getLong(certification.getCertItems());
            // 保存企业信息
            Enterprise enterprise = new Enterprise();
            enterprise.setEnterpriseName(enterpriseName);
            enterprise.setEnterpriseNature(Integer.parseInt(enterpriseType));
            enterprise.setAuthenticationLevel(product.getAuthentication());
            enterprise = enterpriseService.saveOrUpdateEnterprise(enterprise);
            // 保存代理人信息
            userInfo.setEmail(agentEmail);
            userInfo.setRealName(agentName);
            userInfo = userInfoService.updateUserInfo(userInfo);
            Delivery deliver = null;
            // 判断是否配送
            if (StringUtils.isNotEmpty(product.getDelivery())) {
                // 保存配送信息
                Delivery delivery = new Delivery();
                if (courier != null && cost != null) {
                    delivery.setCourier(courier);
                    delivery.setCost(cost);
                } else {
                    // 0:1,0:0
                    String[] deliverPrices = product.getDeliveryPrice().split(",");
                    for (int j = 0; j < deliverPrices.length; j++) {
                        // [0]:0,1;[1]:0,0
                        String[] deliverpi = deliverPrices[j].split(":");
                        if (Integer.parseInt(deliverpi[0].toString()) != 0) {
                            String courier1 = deliverpi[0].toString();
                            String cost1 = deliverpi[1].toString();
                            delivery.setCourier(Integer.parseInt(courier1));
                            delivery.setCost(Integer.parseInt(cost1));
                        }
                    }
                /*String courier1 = product.getDeliveryPrice().split(":")[0];
	    				String cost1 = product.getDeliveryPrice().split(":")[1];
	    				delivery.setCourier(Integer.parseInt(courier1));
	    				delivery.setCost(Integer.parseInt(cost1));*/
                }
                delivery.setDetailAdds(detailAdds);
                delivery.setUserInfo(userInfo.getId());
                delivery.setReceiver(agentName);
                delivery.setRvPhone(agentPhone);
                deliveryService.saveDelivery(userInfo.getId(), agentName, agentPhone, delivery);
                deliver = deliveryService.getDelibery(userInfo.getId());
            }
            /*	
				String[] uid = {};
				
				
				
				JSONArray jsonArray = new JSONArray(product.getCertinfo());
				for(int i=0;i<jsonArray.length();i++){
					JSONObject jsob = JSONObject.parseObject(jsonArray.get(i).toString());
					jsob.getString("inputName");
				}*/
            // Delivery deliver = deliveryService.getDelibery(userInfo.getId());
            // 添加企业-代理人关联关系
            userInfoEnterpriseServiceImpl.saveUserInfoEnterprise(userInfo.getId(), enterprise.getId());
            // 生成订单
            Bill bill = billService.saveBill(userInfo.getId(), enterprise.getId(), product.getId(), null, null, null, null, product.getProject(), 1, product.getPrice(), userInfo.getId(), ComNames.BILL_STATUS_3);
            String billId = UniqueIDUtils.genBilUID(bill);
            bill.setBillId(billId);
            bill.setAppId(appId);
            if (deliver != null) {
                bill.setDelivery(deliver.getId());
            }
            if ("2".equals(dcert.getCertType())) {
                /*try {
						String[] cuid = certUid.split(",");
						String s2 = null;
						String s3 = null;
						
						JSONArray jsonArray = new JSONArray(product.getCertinfo());
						for(int i=0;i<jsonArray.length();i++){
							JSONObject jsob = JSONObject.parseObject(jsonArray.get(i).toString());
							String iput = jsob.getString("inputName");
							System.out.println(iput);
							if(iput!=null){
								for(int j=0;j<cuid.length;j++){
									
									s2 = ""+iput+"_"+(j+1)+":"+cuid[j]+"";
									if(s2!=null){
										s2 = ","+iput+"_"+(j+1)+""+":"+""+cuid[j]+"";
									}
									System.out.println(s2);
									
								}
							}
						}
						s3="{"+s2+"}";*/
                // 证书信息项
                bill.setUid(certUid);
            /*} catch (JSONException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					*/
            } else {
                // 证书信息项
                bill.setUid("{}");
            }
            // bill.setUid("{}");// 证书信息项
            bill.setUid0("{}");
            bill.setOrderNumber(billId.substring(4, billId.length()));
            // 判断证书数量是否为空
            if (certsize != null && certsize > 0) {
                // 购买数量
                bill.setProductNum(certsize);
            } else {
                // 购买数量
                bill.setProductNum(1);
            }
            bill.setIsenterprisecert(isenterprisecert);
            sqlSession.update("com.itrus.portal.db.BillMapper.updateByPrimaryKey", bill);
            sqlSession.flushStatements();
            // 保持执照证件信息
            // 是否有营业执照信息,默认false没有
            boolean hasBl = false;
            BusinessLicense businessLicense = new BusinessLicense();
            OrgCode org = new OrgCode();
            TaxRegisterCert taxregisterCert = new TaxRegisterCert();
            IdentityCard identityCard = new IdentityCard();
            Agent agent = new Agent();
            Proxy proxy = new Proxy();
            for (Long item : items) {
                if (ComNames.BUSINESS_ITEM.equals(item) && !enterprise.getEnterpriseNature().equals(3)) {
                    // 事业单位不填写营业执照
                    hasBl = true;
                    // 设置企业唯一标识
                    if (enterprise.getEnterpriseNature().equals(1) || enterprise.getEnterpriseNature().equals(2)) {
                        // 类型为企业和个体工商户:当三证合一时,企业标识为统一社会信用代码;当非三证合一时,企业标识为营业执照注册号;
                        enterprise.setEnterpriseSn(licenseNo);
                    }
                    // 保存营业执照
                    businessLicense.setEnterpriseName(enterpriseName);
                    if (isThreeInOne) {
                        businessLicense.setBusinessType(1);
                    } else {
                        businessLicense.setBusinessType(0);
                    }
                    businessLicense.setLicenseNo(licenseNo);
                    businessLicense = businessService.portSaveBusiness(enterprise.getId(), enterprise.getEnterpriseSn(), bill.getId(), userInfo.getId(), businessLicense, null != businessLicense.getId() ? 2 : 1);
                } else if (ComNames.ORG_CODE_ITEM.equals(item)) {
                    if (hasBl && businessLicense.getBusinessType().equals(1))
                        // 五证合一企业不用提交组织机构代码、税务登记信息
                        continue;
                    if (enterprise.getEnterpriseNature().equals(3)) {
                        // 类型为政府机关/事业单位:企业标识为组织机构代码
                        enterprise.setEnterpriseSn(orgCode);
                    }
                    // 保存组织机构代码
                    org.setEnterpriseName(enterpriseName);
                    org.setOrgCode(orgCode);
                    org = orgCodeService.saveOrgCode(enterprise.getId(), enterprise.getEnterpriseSn(), bill.getId(), userInfo.getId(), org, null != org.getId() ? 2 : 1);
                } else if (ComNames.TAX_CERT_ITEM.equals(item)) {
                    if (hasBl && businessLicense.getBusinessType().equals(1))
                        // 五证合一企业不用提交组织机构代码、税务登记信息
                        continue;
                    // 保存税务登记证
                    if (enterprise.getEnterpriseNature().equals(3))
                        // 事业单位不填写税务登记信息
                        continue;
                    taxregisterCert.setEnterpriseName(enterpriseName);
                    taxregisterCert.setCertNo(taxNo);
                    taxregisterCert = taxCertService.saveTaxCert(enterprise.getId(), enterprise.getEnterpriseSn(), bill.getId(), userInfo.getId(), taxregisterCert, null != taxregisterCert.getId() ? 2 : 1);
                } else if (ComNames.IDENTITY_CARD_ITEM.equals(item)) {
                    // 保存法定代表人
                    identityCard.setEnterpriseName(enterpriseName);
                    identityCard.setName(legalName);
                    identityCard.setCardType(legalCardType);
                    identityCard.setIdCode(legalIdCardNo);
                    identityCard = identityCardService.portSaveIdentityCard(enterprise.getId(), enterprise.getEnterpriseSn(), bill.getId(), userInfo.getId(), identityCard, null != identityCard.getId() ? 2 : 1);
                } else if (ComNames.AGENT_ITEM.equals(item)) {
                    // 保存代理人
                    agent.setEnterpriseName(enterpriseName);
                    agent.setName(agentName);
                    agent.setIdCode(agentIdCardNo);
                    agent.setCardType(agentCardType);
                    agent = agentService.portSaveAgent(enterprise.getId(), enterprise.getEnterpriseSn(), bill.getId(), userInfo.getId(), agent, null != agent.getId() ? 2 : 1);
                } else if (ComNames.PROXY_ITEM.equals(item)) {
                    // 保存授权书
                    proxy = proxyService.portSaveProxy(enterprise.getId(), userInfo.getUniqueId(), bill.getId(), userInfo.getId(), proxy);
                }
            }
            // 更新企业唯一标识
            enterprise = enterpriseService.updateEnterpriseSn(enterprise);
            transactionManager.commit(status);
            // 返回第三方数据
            result.put("status", 1);
            result.put("billId", bill.getBillId());
            result.put("orderNumber", bill.getOrderNumber());
            // 记录日志
            UserLog userlog = new UserLog();
            userlog.setProject(userInfo.getProject());
            userlog.setType("购买产品");
            userlog.setInfo(userInfo.getmPhone() + "购买了" + product.getName() + ",应用标识:" + appId);
            userlog.setHostId("未知");
            userlog.setSn(null == userInfo.getUniqueId() ? null : userInfo.getUniqueId());
            LogUtil.userlog(sqlSession, userlog);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            if (!status.isCompleted())
                transactionManager.rollback(status);
            UserLog userlog = new UserLog();
            userlog.setProject(product.getProject());
            userlog.setType("购买产品");
            userlog.setInfo("url:/api/auth/search,应用标识:" + appId + ",详细错误:" + e.getMessage());
            userlog.setHostId("未知");
            userlog.setSn(null == userInfo.getUniqueId() ? null : userInfo.getUniqueId());
            LogUtil.userlog(sqlSession, userlog);
            if (e.getMessage().contains("请提交完整") || e.getMessage().contains("请确认输入是否有误")) {
                result.put("status", 0);
                result.put("message", e.getMessage());
                return result;
            }
            result.put("status", -4);
            result.put("message", "服务端出现未知错误,请联系管理员");
            return result;
        } finally {
            if (!status.isCompleted())
                transactionManager.rollback(status);
        }
    } else {
        // 提交企业认证申请(审核拒绝修改提交时)
        Bill bill = billService.getBillByOrderNumber(orderNumber);
        if (bill == null) {
            result.put("status", -5);
            result.put("message", "申请流水号不存在");
            return result;
        }
        UserInfo userInfo = userInfoService.getUserInfoByBillId(bill.getId());
        Enterprise enterprise = enterpriseService.getEnterpriseById(bill.getEnterprise());
        if (bill.getBillStatus() != ComNames.BILL_STATUS_4) {
            result.put("status", -5);
            result.put("message", "该订单未审核拒绝");
            return result;
        }
        // 根据订单id获取产品需要认证项,
        List<String> certItems = sqlSession.selectList("com.itrus.portal.db.CertificationMapper.selectCertItemsByBillId", bill.getId());
        if (null == certItems || certItems.isEmpty()) {
            result.put("status", -4);
            result.put("message", "服务端出现异常,请联系管理员");
            return result;
        }
        // 记录旧的企业唯一标识:
        String oldEnterpriseSn = enterprise.getEnterpriseSn();
        // 设置企业唯一标识
        if (enterpriseType.equals(1) || enterpriseType.equals(2)) {
            // 类型为企业和个体工商户:当三证合一时,企业标识为统一社会信用代码;当非三证合一时,企业标识为营业执照注册号;
            enterprise.setEnterpriseSn(licenseNo);
        }
        if (enterpriseType.equals(3)) {
            // 类型为政府机关/事业单位:企业标识为组织机构代码
            enterprise.setEnterpriseSn(orgCode);
        }
        // 修改企业名称
        enterprise.setEnterpriseName(enterpriseName.replace(" ", ""));
        // 修改企业性质
        enterprise.setEnterpriseNature(Integer.parseInt(enterpriseType));
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
        TransactionStatus status = transactionManager.getTransaction(def);
        try {
            // 将参数传入对象
            BusinessLicense businessLicense = new BusinessLicense();
            OrgCode orgCd = new OrgCode();
            TaxRegisterCert taxregisterCert = new TaxRegisterCert();
            IdentityCard identityCard = new IdentityCard();
            Agent agent = new Agent();
            Proxy proxy = new Proxy();
            businessLicense.setEnterpriseName(enterpriseName);
            if (isThreeInOne) {
                businessLicense.setBusinessType(1);
            } else {
                businessLicense.setBusinessType(0);
            }
            businessLicense.setLicenseNo(licenseNo);
            orgCd.setEnterpriseName(enterpriseName);
            orgCd.setOrgCode(orgCode);
            taxregisterCert.setEnterpriseName(enterpriseName);
            taxregisterCert.setCertNo(taxNo);
            identityCard.setEnterpriseName(enterpriseName);
            identityCard.setName(legalName);
            identityCard.setCardType(legalCardType);
            identityCard.setIdCode(legalIdCardNo);
            agent.setEnterpriseName(enterpriseName);
            agent.setName(agentName);
            agent.setIdCode(agentIdCardNo);
            agent.setCardType(agentCardType);
            // 删除订单关联的旧认证项,新增订单对应的新认证项
            billWebService.portSaveBillAuthenticationItems(certItems.get(0), Integer.parseInt(enterpriseType), bill.getId(), businessLicense, orgCd, taxregisterCert, identityCard, agent, proxy, enterprise, userInfo);
            // 3、判断该订单对应的企业的认证项是否为通过,若是通过,则重新设置为不通过
            if (null != enterprise.getAuthenticationLevel())
                enterprise.setAuthenticationLevel(product.getAuthentication());
            if (null != enterprise.getHasBl())
                enterprise.setHasBl(null);
            if (null != enterprise.getHasOrgCode())
                enterprise.setHasOrgCode(null);
            if (null != enterprise.getHasTaxCert())
                enterprise.setHasTaxCert(null);
            if (null != enterprise.getHasIdCard())
                enterprise.setHasIdCard(null);
            if (null != enterprise.getHasAgent())
                enterprise.setHasAgent(null);
            sqlSession.update("com.itrus.portal.db.EnterpriseMapper.updateByPrimaryKey", enterprise);
            bill.setBillStatus(ComNames.BILL_STATUS_3);
            sqlSession.update("com.itrus.portal.db.BillMapper.updateByPrimaryKeySelective", bill);
            transactionManager.commit(status);
            // 企业标识改变后,将旧目录中的图片复制到新目录中
            if (!oldEnterpriseSn.equals(enterprise.getEnterpriseSn())) {
                CopyFile.copyFile(systemConfigService.getTrustDir().getPath() + File.separator + oldEnterpriseSn, systemConfigService.getTrustDir().getPath() + File.separator + enterprise.getEnterpriseSn());
            }
            // 判断代理人手机号是否存在 true:把全部订单关联到新手机号用户
            UserInfo userInfo1 = userInfoService.getUserInfoByMphone(agentPhone);
            if (userInfo1 != null) {
                BillExample be = new BillExample();
                BillExample.Criteria bec = be.createCriteria();
                bec.andUniqueIdEqualTo(userInfo.getId());
                List<Bill> billList = sqlSession.selectList("com.itrus.portal.db.BillMapper.selectByExample", be);
                // 循环修改订单关联的用户信息
                for (Bill b : billList) {
                    b.setUniqueId(userInfo1.getId());
                    sqlSession.update("com.itrus.portal.db.BillMapper.updateByPrimaryKeySelective", b);
                }
                userInfo1.setEnterprise(userInfo.getEnterprise());
                sqlSession.update("com.itrus.portal.db.UserInfoMapper.updateByPrimaryKeySelective", userInfo1);
                userInfo.setEnterprise(null);
                sqlSession.update("com.itrus.portal.db.UserInfoMapper.updateByPrimaryKeySelective", userInfo);
                UserinfoEnterpriseExample uee = new UserinfoEnterpriseExample();
                UserinfoEnterpriseExample.Criteria ueec = uee.createCriteria();
                ueec.andUserInfoEqualTo(userInfo.getId());
                List<UserinfoEnterprise> ueList = sqlSession.selectList("com.itrus.portal.db.UserinfoEnterpriseMapper.selectByExample", uee);
                for (UserinfoEnterprise ue : ueList) {
                    ue.setUserInfo(userInfo1.getId());
                    sqlSession.update("com.itrus.portal.db.UserinfoEnterpriseMapper.updateByPrimaryKeySelective", ue);
                }
            } else {
                userInfo.setmPhone(agentPhone);
                sqlSession.update("com.itrus.portal.db.UserInfoMapper.updateByPrimaryKeySelective", userInfo);
            }
            result.put("status", 1);
            result.put("billId", bill.getBillId());
        } catch (UserInfoServiceException e) {
            if (!status.isCompleted())
                transactionManager.rollback(status);
            result.put("status", -4);
            result.put("message", "服务端出现未知错误,请联系管理员");
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            if (!status.isCompleted())
                transactionManager.rollback(status);
            UserLog userlog = new UserLog();
            userlog.setType("修改订单");
            userlog.setInfo("url:/api/auth/entAuth1,应用标识:" + appId + ",详细错误:" + e.getMessage());
            userlog.setHostId("未知");
            userlog.setProject(userInfo.getProject());
            LogUtil.userlog(sqlSession, userlog);
            result.put("status", -4);
            result.put("message", "服务端出现未知错误,请联系管理员");
            if (e.getMessage().contains("有误")) {
                result.put("status", 0);
                result.put("message", e.getMessage());
            }
            return result;
        } finally {
            if (!status.isCompleted())
                transactionManager.rollback(status);
        }
        return result;
    }
}
Also used : DefaultTransactionDefinition(org.springframework.transaction.support.DefaultTransactionDefinition) HashMap(java.util.HashMap) ApplicationInfo(com.itrus.portal.db.ApplicationInfo) Product(com.itrus.portal.db.Product) TransactionStatus(org.springframework.transaction.TransactionStatus) UserInfo(com.itrus.portal.db.UserInfo) DigitalCert(com.itrus.portal.db.DigitalCert) Proxy(com.itrus.portal.db.Proxy) BillExample(com.itrus.portal.db.BillExample) UserinfoEnterpriseExample(com.itrus.portal.db.UserinfoEnterpriseExample) IdentityCard(com.itrus.portal.db.IdentityCard) ApplicationInfoExample(com.itrus.portal.db.ApplicationInfoExample) Agent(com.itrus.portal.db.Agent) UserLog(com.itrus.portal.db.UserLog) JSONException(org.json.JSONException) UserInfoServiceException(com.itrus.portal.exception.UserInfoServiceException) Certification(com.itrus.portal.db.Certification) UserInfoServiceException(com.itrus.portal.exception.UserInfoServiceException) OrgCode(com.itrus.portal.db.OrgCode) BusinessLicense(com.itrus.portal.db.BusinessLicense) UserinfoEnterprise(com.itrus.portal.db.UserinfoEnterprise) Enterprise(com.itrus.portal.db.Enterprise) UserinfoEnterprise(com.itrus.portal.db.UserinfoEnterprise) Bill(com.itrus.portal.db.Bill) JSONObject(com.alibaba.fastjson.JSONObject) Delivery(com.itrus.portal.db.Delivery) TaxRegisterCert(com.itrus.portal.db.TaxRegisterCert) PostMapping(org.springframework.web.bind.annotation.PostMapping) ResponseBody(org.springframework.web.bind.annotation.ResponseBody)

Example 48 with Bill

use of com.itrus.portal.db.Bill in project portal by ixinportal.

the class MakeInvoiceService method execute.

/**
 * 开票推送
 */
@PostMapping(value = "/execute")
@ResponseBody
public Map<String, Object> execute(@RequestHeader("Content-Signature") String authHmac, @RequestParam("appId") String appId, @RequestParam("billId") String billNo, HttpServletRequest request) {
    Map<String, Object> result = new HashMap<String, Object>();
    result.put("status", -2);
    // 验证参数是否完整
    if (StringUtils.isEmpty(authHmac) || StringUtils.isEmpty(appId) || StringUtils.isEmpty(billNo)) {
        result.put("message", "提交的参数信息不完整");
        return result;
    }
    // 得到应用信息 改成service
    Map<String, ApplicationInfo> appInfoMap = CacheCustomer.getAPP_INFO_MAP();
    ApplicationInfo applicationInfo = appInfoMap.get(appId);
    if (applicationInfo == null) {
        ApplicationInfoExample applicationInfoExample = new ApplicationInfoExample();
        ApplicationInfoExample.Criteria appInfoExampleCriteria = applicationInfoExample.createCriteria();
        appInfoExampleCriteria.andAppIdEqualTo(appId);
        applicationInfo = sqlSession.selectOne("com.itrus.portal.db.ApplicationInfoMapper.selectByExample", applicationInfoExample);
    }
    // 获取配置信息
    ReceiptConfig rc = sqlSession.selectOne("com.itrus.portal.db.ReceiptConfigMapper.selectByExample");
    log.debug("任务开始");
    DefaultTransactionDefinition def = new DefaultTransactionDefinition();
    def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
    TransactionStatus ts = null;
    // 验证hmac有效性
    try {
        String macVal = Base64.encode(HMACSHA1.getHmacSHA1(appId + billNo, applicationInfo.getSecretKey()), false);
        if (!authHmac.equals("HMAC-SHA1 " + macVal)) {
            result.put("status", -4);
            result.put("message", "服务密钥错误");
            return result;
        }
    } catch (Exception e) {
        result.put("status", -3);
        result.put("message", "Hmac验证错误");
        e.printStackTrace();
        return result;
    }
    try {
        String ssl_store = getClass().getClassLoader().getResource("").getPath() + File.separator + // 执行命令后,会生成该testclient.truststore
        "fapiao.truststore";
        // 证书的存取密码,即执行命令时填写的密码
        String ssl_pwd = "ixin21060921";
        System.setProperty("javax.net.ssl.trustStore", ssl_store);
        System.setProperty("javax.net.ssl.keyStorePassword", ssl_pwd);
        // String url =
        // "https://218.17.158.39:8999/fpt_dsqz/services/DZFPService?wsdl";
        HostnameVerifier hv = new HostnameVerifier() {

            public boolean verify(String urlHostName, SSLSession session) {
                System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());
                return true;
            }
        };
        HttpsURLConnection.setDefaultHostnameVerifier(hv);
        org.apache.axis.client.Service s = new org.apache.axis.client.Service();
        Call call = (Call) s.createCall();
        call.setTargetEndpointAddress(new URL(rc.getAddress()));
        call.setOperation("doService");
        Map param = new HashMap();
        param.put("billNo", billNo);
        Map<String, Object> data = sqlSession.selectOne("com.itrus.portal.db.BillMapper.selectByBillEreceipt", param);
        // Bill bill =sqlSession.selectOne("", billId);
        String xml;
        String val;
        Bill bill;
        Einvoice einvoice = null;
        Ereceipt ereceipt;
        Map<String, String> temp = null;
        String content;
        if (null != data && data.size() != 0) {
            ereceipt = sqlSession.selectOne("com.itrus.portal.db.EreceiptMapper.selectByPrimaryKey", data.get("eid"));
            content = getContent(data, ereceipt);
            log.error("[input0]{}", content);
            xml = getCommonXml("DFXJ1001", new BASE64Encoder().encodeBuffer(content.getBytes("UTF-8")), rc.getAppId());
            log.error("[input1]{}", xml);
            Object[] fn01 = { xml };
            val = (String) call.invoke(fn01);
            log.error("[output]{}", val);
            temp = parseXml(val);
            if (!temp.get("returnCode").equals("0000")) {
                // LogUtil.syslog(sqlSession, "开票推送", data.get("bill_id") + "开票推送失败,错误:" + temp.get("returnMessage"));
                log.error("ERRORLOG电子发票 {}", data.get("bill_id") + "开票推送失败,错误:" + temp.get("returnMessage"));
                result.put("status", -1);
                result.put("message", "开票推送失败");
                return result;
            }
            temp = parseXml(new String(new BASE64Decoder().decodeBuffer(temp.get("content")), "UTF-8"));
            einvoice = sqlSession.selectOne("com.itrus.portal.db.EinvoiceMapper.selectByPrimaryKey", data.get("e_invoice"));
            einvoice.setInvoiceId(temp.get("FPQQLSH"));
            einvoice.setInvoiceCode(temp.get("FP_DM"));
            einvoice.setInvoiceNo(temp.get("FP_HM"));
            einvoice.setCheckCode(temp.get("JYM"));
            einvoice.setConfirmTime(sdf.parse(temp.get("KPRQ")));
            einvoice.setDlAddress(temp.get("PDF_URL"));
            einvoice.setStatus(1);
            einvoice.setInvoiceSum(Double.valueOf(String.valueOf(data.get("bill_sum"))));
            ts = transactionManager.getTransaction(def);
            sqlSession.update("com.itrus.portal.db.EinvoiceMapper.updateByPrimaryKeySelective", einvoice);
            bill = sqlSession.selectOne("com.itrus.portal.db.BillMapper.selectByPrimaryKey", data.get("id"));
            bill.setIsInvoiced(1);
            bill.setBillTime(new Date());
            if (null == bill.getDelivery() && bill.getBillStatus() == 6) {
                bill.setBillStatus(ComNames.BILL_STATUS_8);
            }
            sqlSession.update("com.itrus.portal.db.BillMapper.updateByPrimaryKeySelective", bill);
            transactionManager.commit(ts);
            // count++;
            result.put("status", 1);
            result.put("address", temp.get("PDF_URL"));
        }
        // 返回地址
        // LogUtil.syslog(sqlSession, "开票推送", "开票推送成功,推送" +
        // billexall3.size() + "条,成功" + count + "条。");
        log.debug("任务结束");
    } catch (Exception e) {
        // LogUtil.syslog(sqlSession, "开票推送", "开票推送失败,错误:" + e.toString());
        log.error("ERRORLOG电子发票 {}", "开票推送失败,错误:" + e.toString());
        e.printStackTrace();
    } finally {
        if (ts != null && !ts.isCompleted()) {
            transactionManager.rollback(ts);
        }
    }
    return result;
}
Also used : DefaultTransactionDefinition(org.springframework.transaction.support.DefaultTransactionDefinition) HashMap(java.util.HashMap) ApplicationInfo(com.itrus.portal.db.ApplicationInfo) TransactionStatus(org.springframework.transaction.TransactionStatus) URL(java.net.URL) Einvoice(com.itrus.portal.db.Einvoice) BASE64Decoder(sun.misc.BASE64Decoder) Ereceipt(com.itrus.portal.db.Ereceipt) ApplicationInfoExample(com.itrus.portal.db.ApplicationInfoExample) Call(org.apache.axis.client.Call) BASE64Encoder(sun.misc.BASE64Encoder) SSLSession(javax.net.ssl.SSLSession) Date(java.util.Date) HostnameVerifier(javax.net.ssl.HostnameVerifier) Bill(com.itrus.portal.db.Bill) Map(java.util.Map) HashMap(java.util.HashMap) ReceiptConfig(com.itrus.portal.db.ReceiptConfig) PostMapping(org.springframework.web.bind.annotation.PostMapping) ResponseBody(org.springframework.web.bind.annotation.ResponseBody)

Example 49 with Bill

use of com.itrus.portal.db.Bill in project portal by ixinportal.

the class PayWebController method pay.

/**
 * 测试的接口
 * @param request
 * @param response
 */
@RequestMapping(produces = "text/html")
public void pay(HttpServletRequest request, HttpServletResponse response) {
    URL = request.getParameter("url");
    // 应用appid
    String appid = request.getParameter("appid");
    // 应用秘钥
    APP_SECRET_KEY = request.getParameter("appSecretKey");
    String payid = request.getParameter("payid");
    // 订单号
    String orderNo = request.getParameter("orderNo");
    // 订单号
    String money = request.getParameter("money");
    String spbill_create_ip = request.getParameter("spbill_create_ip");
    String attach = request.getParameter("attach");
    String requestURI = request.getRequestURI();
    String requestURL = request.getRequestURL().toString();
    int indexOfURI = requestURL.indexOf(requestURI);
    StringBuffer notifySB = new StringBuffer();
    StringBuffer returnSB = new StringBuffer();
    // 回调url
    String notifyStr = request.getContextPath() + "/web/pay/notifyUrl";
    // 页面跳转url
    String returnStr = request.getContextPath() + "/web/pay/returnUrl";
    notifySB.append(requestURL.substring(0, indexOfURI)).append(notifyStr);
    returnSB.append(requestURL.substring(0, indexOfURI)).append(returnStr);
    // 异步回调url
    String notify_url = notifySB.toString();
    // 页面跳转url
    String return_url = returnSB.toString();
    // 交易类型    all 获取在平台开通的支付方式 ,  alipay:支付宝 ,wechat:微信,unionPay 银联,thirdPay 第三方付款
    String pay_type = request.getParameter("pay_type");
    // 描述  商品的标题/交易标题/订单标题/订单关键字等。该参数最长为128个汉字。
    String describe = request.getParameter("body");
    // 随机字符串
    String nonce_str = PayUtil.getNonceStr();
    SortedMap<String, String> packageParams = new TreeMap<String, String>();
    packageParams.put("appid", appid);
    packageParams.put("nonce_str", nonce_str);
    packageParams.put("body", describe);
    packageParams.put("out_trade_no", orderNo);
    packageParams.put("total_fee", money.toString());
    packageParams.put("spbill_create_ip", spbill_create_ip);
    packageParams.put("notify_url", notify_url);
    packageParams.put("return_url", return_url);
    packageParams.put("pay_type", pay_type);
    packageParams.put("attach", attach);
    RequestHandler reqHandler = new RequestHandler(null, null);
    reqHandler.init(null, null, APP_SECRET_KEY);
    String sign = reqHandler.createSign(packageParams);
    String xmlParam = "<xml><appid>" + appid + "</appid>" + "<nonce_str>" + nonce_str + "</nonce_str><sign>" + sign + "</sign>" + "<body><![CDATA[" + describe.trim() + "]]></body>" + "<out_trade_no>" + orderNo + "</out_trade_no><total_fee>" + money + "</total_fee>" + "<spbill_create_ip>" + spbill_create_ip + "</spbill_create_ip><notify_url>" + notify_url + "</notify_url><return_url>" + return_url + "</return_url><pay_type>" + pay_type + "</pay_type><attach>" + attach + "</attach></xml>";
    DefaultHttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(URL);
    // DefaultTransactionDefinition def = new DefaultTransactionDefinition();
    // def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
    // TransactionStatus s = transactionManager.getTransaction(def);
    String jsonStr = null;
    try {
        httppost.setEntity(new StringEntity(xmlParam, "UTF-8"));
        HttpResponse respon = httpclient.execute(httppost);
        jsonStr = EntityUtils.toString(respon.getEntity(), "UTF-8");
        if (jsonStr.indexOf("FAIL") != -1) {
            PayUtil.showJsp(response, SytemUtil.getContextUrl(request) + "/web/pay/returnUrl1");
            return;
        } else if (jsonStr.indexOf("SUCCESS") != -1) {
            Map m = PayUtil.parseXmlToList2(jsonStr);
            String contextUrl = (String) m.get("redirect_url");
            String sign01 = (String) m.get("sign");
            // 必须进行验签,否则存在支付风险
            boolean result01 = PayUtil.validate(sign01, m, APP_SECRET_KEY);
            if (result01) {
                SortedMap<String, String> pk = new TreeMap<String, String>();
                pk.put("redirect_url", contextUrl);
                String encryString = PayUtil.getEncryString(pk, APP_SECRET_KEY);
                BillExample be = new BillExample();
                BillExample.Criteria bc = be.createCriteria();
                bc.andBillIdEqualTo(orderNo);
                Bill bill = sqlSession.selectOne("com.itrus.portal.db.BillMapper.selectByExample", be);
                OnPayInfo payInfo;
                HttpSession session = request.getSession();
                UserInfo userInfo = (UserInfo) session.getAttribute("webuserInfo");
                if (bill.getOnPayInfo() == null) {
                    payInfo = new OnPayInfo();
                    payInfo.setOnlinePay(Long.parseLong(payid));
                    payInfo.setPaySum(Double.parseDouble(money));
                    payInfo.setPayStatus(0);
                    payInfo.setDyTime(new Date());
                    payInfo.setName(String.valueOf(userInfo.getId()));
                    sqlSession.insert("com.itrus.portal.db.OnPayInfoMapper.insert", payInfo);
                    sqlSession.flushStatements();
                    bill.setOnPayInfo(payInfo.getId());
                    sqlSession.update("com.itrus.portal.db.BillMapper.updateByPrimaryKeySelective", bill);
                } else {
                    payInfo = sqlSession.selectOne("com.itrus.portal.db.OnPayInfoMapper.selectByPrimaryKey", bill.getOnPayInfo());
                    payInfo.setOnlinePay(Long.parseLong(payid));
                    payInfo.setPaySum(Double.parseDouble(money));
                    payInfo.setDyTime(new Date());
                    payInfo.setName(String.valueOf(userInfo.getId()));
                    sqlSession.update("com.itrus.portal.db.OnPayInfoMapper.updateByPrimaryKeySelective", payInfo);
                }
                // transactionManager.commit(s);
                response.sendRedirect(contextUrl + "&sign=" + encryString);
            }
            return;
        }
    } catch (Exception e) {
        LogUtil.syslog(sqlSession, "在线支付", orderNo + "在线支付错误:" + e.toString() + xmlParam + jsonStr);
        e.printStackTrace();
    }
// finally{
// if (!s.isCompleted()) {
// transactionManager.rollback(s);
// }
// }
}
Also used : HttpPost(org.apache.http.client.methods.HttpPost) HttpSession(javax.servlet.http.HttpSession) HttpResponse(org.apache.http.HttpResponse) UserInfo(com.itrus.portal.db.UserInfo) TreeMap(java.util.TreeMap) DefaultHttpClient(org.apache.http.impl.client.DefaultHttpClient) Date(java.util.Date) StringEntity(org.apache.http.entity.StringEntity) BillExample(com.itrus.portal.db.BillExample) OnPayInfo(com.itrus.portal.db.OnPayInfo) RequestHandler(com.utils.payUtils.RequestHandler) SortedMap(java.util.SortedMap) Bill(com.itrus.portal.db.Bill) Map(java.util.Map) TreeMap(java.util.TreeMap) SortedMap(java.util.SortedMap) RequestMapping(org.springframework.web.bind.annotation.RequestMapping)

Example 50 with Bill

use of com.itrus.portal.db.Bill in project portal by ixinportal.

the class PayWebController method notifyUrl.

/**
 * 客户服务器回调页面
 * [callback]<xml>
 *     <nonce_str><![CDATA[1639324264]]></nonce_str>
 *     <out_trade_no><![CDATA[TWCX20160629144115177012]]></out_trade_no>
 *     <return_code><![CDATA[SUCCESS]]></return_code>
 *     <return_msg><![CDATA[姣浠瀹氦骀]]></return_msg>
 *     <total_fee><![CDATA[0.01]]></total_fee>
 *     <transaction_id><![CDATA[2016071521001004860279928780]]></transaction_id>
 *     <sign>321D99F194DE952B6699C3E23361C06C</sign>
 *     <nonce_str>1639324264</nonce_str>
 * </xml>
 *
 * @param request
 * @param response
 * @return
 */
@RequestMapping(value = "/notifyUrl")
public String notifyUrl(HttpServletRequest request, HttpServletResponse response) {
    String line = null;
    String notifyXml = "";
    // DefaultTransactionDefinition def = new DefaultTransactionDefinition();
    // def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
    // TransactionStatus s = null;
    Map<String, String> m = null;
    try {
        if ((line = request.getReader().readLine()) != null) {
            notifyXml += line;
        }
        m = PayUtil.parseXmlToList2(notifyXml);
        String sign = m.get("sign");
        PayConfigExample pce = new PayConfigExample();
        PayConfigExample.Criteria pcc = pce.createCriteria();
        pcc.andAppIdEqualTo(m.get("appid"));
        PayConfig pc = sqlSession.selectOne("com.itrus.portal.db.PayConfigMapper.selectByExample", pce);
        APP_SECRET_KEY = pc.getSecretKey();
        boolean validate = PayUtil.validate(sign, m, APP_SECRET_KEY);
        if (validate) {
            if (("SUCCESS").equals(m.get("return_code"))) {
                // m.get("return_msg");//返回信息
                // m.get("out_trade_no");//交易订单号
                // s = transactionManager.getTransaction(def);
                BillExample be = new BillExample();
                BillExample.Criteria bc = be.createCriteria();
                bc.andBillIdEqualTo(m.get("out_trade_no"));
                Bill bill = sqlSession.selectOne("com.itrus.portal.db.BillMapper.selectByExample", be);
                bill.setBillStatus(3);
                bill.setPayTime(new Date());
                sqlSession.update("com.itrus.portal.db.BillMapper.updateByPrimaryKeySelective", bill);
                OnPayInfo payInfo = sqlSession.selectOne("com.itrus.portal.db.OnPayInfoMapper.selectByPrimaryKey", bill.getOnPayInfo());
                payInfo.setPayStatus(1);
                payInfo.setWcTime(bill.getPayTime());
                payInfo.setPayNo(m.get("transaction_id"));
                OnlinePayExample ope = new OnlinePayExample();
                OnlinePayExample.Criteria opc = ope.createCriteria();
                opc.andPayConfigEqualTo(pc.getId());
                // 1支付宝 2微信
                opc.andWayEqualTo((Integer.parseInt(m.get("pay_type")) == 0 ? 2 : 1));
                OnlinePay onlinePay = sqlSession.selectOne("com.itrus.portal.db.OnlinePayMapper.selectByExample", ope);
                payInfo.setOnlinePay(onlinePay.getId());
                // payInfo.setComment(m.get("return_msg"));
                sqlSession.update("com.itrus.portal.db.OnPayInfoMapper.updateByPrimaryKeySelective", payInfo);
                // transactionManager.commit(s);
                // 标示成功接收到
                PayUtil.sendToCFT(response, "SUCCESS");
            // m.get("total_fee");//金额
            // m.get("attach");//附加数据 在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
            } else if (("FAIL").equals(m.get("return_code"))) {
                // 第三方返回支付失败的情况
                PayUtil.sendToCFT(response, "SUCCESS");
                LogUtil.syslog(sqlSession, "在线支付", m.get("out_trade_no") + "回调错误:[callback FAIL]FAIL" + notifyXml);
            } else {
                // 标示没接收到
                PayUtil.sendToCFT(response, "FAIL");
                LogUtil.syslog(sqlSession, "在线支付", m.get("out_trade_no") + "回调错误:[callback FAIL]" + notifyXml);
            }
        // if("FAIL".equals(m.get("result_code"))) {
        // m.get("err_code");//错误码 有:SYSTEMERROR\SIGNERROR\LACK_PARAMS\PARAMS_ERROR\WECHAT_EMPTY\WECHAT_SIGNERROR\ALI_EMPTY\ALI_SIGNERROR
        // m.get("err_code_des");//错误描述 有:系统错误\平台签名失败\缺少参数\参数不合规范或域名不匹配\微信报文为空\微信签名错误\支付宝报文为空\支付宝验签失败
        // }
        }
    // for (Entry<String, String> s : m.entrySet()) {
    // System.out.println(s.getKey()+"#################"+s.getValue());
    // }
    } catch (Exception e) {
        LogUtil.syslog(sqlSession, "在线支付", m.get("out_trade_no") + "回调错误:" + e.toString() + notifyXml);
        log.error(m.get("out_trade_no") + "[callback FAIL]" + e.toString());
        e.printStackTrace();
    }
    // }
    return null;
}
Also used : PayConfig(com.itrus.portal.db.PayConfig) OnlinePayExample(com.itrus.portal.db.OnlinePayExample) PayConfigExample(com.itrus.portal.db.PayConfigExample) Date(java.util.Date) BillExample(com.itrus.portal.db.BillExample) OnPayInfo(com.itrus.portal.db.OnPayInfo) Bill(com.itrus.portal.db.Bill) OnlinePay(com.itrus.portal.db.OnlinePay) RequestMapping(org.springframework.web.bind.annotation.RequestMapping)

Aggregations

Bill (com.itrus.portal.db.Bill)74 HashMap (java.util.HashMap)45 RequestMapping (org.springframework.web.bind.annotation.RequestMapping)42 Product (com.itrus.portal.db.Product)39 UserInfo (com.itrus.portal.db.UserInfo)32 ResponseBody (org.springframework.web.bind.annotation.ResponseBody)27 Enterprise (com.itrus.portal.db.Enterprise)26 UserCert (com.itrus.portal.db.UserCert)22 JSONObject (com.alibaba.fastjson.JSONObject)21 Date (java.util.Date)20 ArrayList (java.util.ArrayList)19 BillExample (com.itrus.portal.db.BillExample)18 IOException (java.io.IOException)18 UserInfoServiceException (com.itrus.portal.exception.UserInfoServiceException)16 DigitalCert (com.itrus.portal.db.DigitalCert)15 Map (java.util.Map)12 TransactionStatus (org.springframework.transaction.TransactionStatus)10 DefaultTransactionDefinition (org.springframework.transaction.support.DefaultTransactionDefinition)10 OnPayInfo (com.itrus.portal.db.OnPayInfo)9 Proxy (com.itrus.portal.db.Proxy)9