fix:构建请求
This commit is contained in:
parent
783e6aca1d
commit
09076fe6a5
|
|
@ -11,11 +11,11 @@ spring:
|
|||
pool:
|
||||
max-active: 300
|
||||
datasource:
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:47.99.60.88}:${DATASOURCE_PORT:3306}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3307}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
username: ${DATASOURCE_USERNAME:devuser}
|
||||
password: ${DATASOURCE_PASSWORD:ckly@9069&Uk}
|
||||
elasticsearch:
|
||||
rest:
|
||||
uris: 47.99.60.88:9200
|
||||
uris: 127.0.0.1:9200
|
||||
username:
|
||||
password:
|
||||
|
|
@ -8,7 +8,7 @@ spring:
|
|||
pool:
|
||||
max-active: 300
|
||||
datasource:
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3306}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3307}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
username: ${DATASOURCE_USERNAME:root}
|
||||
password: ${DATASOURCE_PASSWORD:password}
|
||||
elasticsearch:
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ spring:
|
|||
pool:
|
||||
max-active: 300
|
||||
datasource:
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3306}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3307}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
username: ${DATASOURCE_USERNAME:root}
|
||||
password: ${DATASOURCE_PASSWORD:password}
|
||||
elasticsearch:
|
||||
|
|
|
|||
|
|
@ -11,11 +11,11 @@ spring:
|
|||
pool:
|
||||
max-active: 300
|
||||
datasource:
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:47.99.60.88}:${DATASOURCE_PORT:3306}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3307}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
username: ${DATASOURCE_USERNAME:devuser}
|
||||
password: ${DATASOURCE_PASSWORD:ckly@9069&Uk}
|
||||
elasticsearch:
|
||||
rest:
|
||||
uris: 47.99.60.88:9200
|
||||
uris: 127.0.0.1:9200
|
||||
username:
|
||||
password:
|
||||
|
|
@ -8,6 +8,6 @@ spring:
|
|||
pool:
|
||||
max-active: 300
|
||||
datasource:
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3306}/nacos?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3307}/nacos?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
username: ${DATASOURCE_USERNAME:root}
|
||||
password: ${DATASOURCE_PASSWORD:password}
|
||||
|
|
@ -8,6 +8,6 @@ spring:
|
|||
pool:
|
||||
max-active: 300
|
||||
datasource:
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3306}/nacos?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3307}/nacos?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
username: ${DATASOURCE_USERNAME:root}
|
||||
password: ${DATASOURCE_PASSWORD:password}
|
||||
|
|
@ -11,11 +11,11 @@ spring:
|
|||
pool:
|
||||
max-active: 300
|
||||
datasource:
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:47.99.60.88}:${DATASOURCE_PORT:3306}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3307}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
username: ${DATASOURCE_USERNAME:devuser}
|
||||
password: ${DATASOURCE_PASSWORD:ckly@9069&Uk}
|
||||
elasticsearch:
|
||||
rest:
|
||||
uris: 47.99.60.88:9200
|
||||
uris: 127.0.0.1:9200
|
||||
username:
|
||||
password:
|
||||
|
|
@ -8,7 +8,7 @@ spring:
|
|||
pool:
|
||||
max-active: 300
|
||||
datasource:
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3306}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3307}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
username: ${DATASOURCE_USERNAME:root}
|
||||
password: ${DATASOURCE_PASSWORD:password}
|
||||
elasticsearch:
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ spring:
|
|||
pool:
|
||||
max-active: 300
|
||||
datasource:
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3306}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3307}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
username: ${DATASOURCE_USERNAME:root}
|
||||
password: ${DATASOURCE_PASSWORD:password}
|
||||
elasticsearch:
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
53
crm/pom.xml
53
crm/pom.xml
|
|
@ -52,6 +52,59 @@
|
|||
<artifactId>mybatis-generator-core</artifactId>
|
||||
<version>1.4.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>net.sf.json-lib</groupId>
|
||||
<artifactId>json-lib</artifactId>
|
||||
<classifier>jdk15</classifier>
|
||||
<version>2.4</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.haiti</groupId>
|
||||
<artifactId>haiti</artifactId>
|
||||
<scope>system</scope>
|
||||
<version>3.0</version>
|
||||
<systemPath>${basedir}/lib/haiti-3.0.jar</systemPath>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.foresee.platform</groupId>
|
||||
<artifactId>platform-api-sdk</artifactId>
|
||||
<scope>system</scope>
|
||||
<version>1.0</version>
|
||||
<systemPath>${basedir}/lib/platform-api-sdk-1.0.jar</systemPath>
|
||||
</dependency>
|
||||
<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-frontend-jaxws -->
|
||||
<dependency>
|
||||
<groupId>org.apache.cxf</groupId>
|
||||
<artifactId>cxf-rt-frontend-jaxws</artifactId>
|
||||
<version>3.4.5</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.cxf</groupId>
|
||||
<artifactId>cxf-rt-transports-http</artifactId>
|
||||
<version>3.4.5</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.cxf</groupId>
|
||||
<artifactId>cxf-rt-transports-http-jetty</artifactId>
|
||||
<version>3.4.5</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>xom</groupId>
|
||||
<artifactId>xom</artifactId>
|
||||
<version>1.2.5</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>log4j</groupId>
|
||||
<artifactId>log4j</artifactId>
|
||||
<version>1.2.17</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ public enum CrmPoolEnum {
|
|||
ZDFDDWMDPOOL("重点辅导单位名单公海",34554),
|
||||
PXQDMDPOOL("培训签到企业名单公海",34553),
|
||||
XDMRPOOL("系统默认公海",34552),
|
||||
GSMGWZKH("公司门户网站客户",34556),
|
||||
;
|
||||
private final String name;
|
||||
private final int id;
|
||||
|
|
|
|||
|
|
@ -87,15 +87,9 @@ public class CrmCustomerController {
|
|||
@ApiOperation("保存数据")
|
||||
@SysLogHandler(behavior = BehaviorEnum.SAVE, object = "#crmModel.entity[customerName]", detail = "'新增了客户:' + #crmModel.entity[customerName]")
|
||||
public Result<Map<String, Object>> add(@RequestBody CrmBusinessSaveBO crmModel) {
|
||||
// Map<String, Object> map = crmCustomerService.addOrUpdate(crmModel, false, null);
|
||||
// return R.ok(map);
|
||||
CrmAddCustomerBo crmAddCustomerBo = new CrmAddCustomerBo();
|
||||
crmAddCustomerBo.setCrmModel(crmModel);
|
||||
// !"101011".equals(appId) && !"crmopenapi".
|
||||
crmAddCustomerBo.setAppId("101011");
|
||||
crmAddCustomerBo.setAppSecret("crmopenapi");
|
||||
crmOpenApiService.crmAddCustomer(crmAddCustomerBo);
|
||||
return R.ok();
|
||||
Map<String, Object> map = crmCustomerService.addOrUpdate(crmModel, false, null);
|
||||
// crmOpenApiService.crmAddCustomer(crmModel,"签到");
|
||||
return R.ok(map);
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
|
|
|
|||
|
|
@ -0,0 +1,4 @@
|
|||
package com.kakarote.crm.controller;
|
||||
|
||||
public class CrmEnterpriseProfileController {
|
||||
}
|
||||
|
|
@ -17,6 +17,7 @@ import com.kakarote.crm.entity.PO.CrmActivity;
|
|||
import com.kakarote.crm.entity.VO.CrmModelFiledVO;
|
||||
import com.kakarote.crm.service.CrmInstrumentService;
|
||||
import com.kakarote.crm.service.ICrmInstrumentSortService;
|
||||
import com.kakarote.crm.service.ICrmUserAnalyseService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
|
@ -27,11 +28,13 @@ import org.apache.poi.ss.usermodel.DataFormat;
|
|||
import org.apache.poi.ss.usermodel.HorizontalAlignment;
|
||||
import org.apache.poi.ss.util.CellRangeAddress;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
|
@ -57,6 +60,9 @@ public class CrmInstrumentController {
|
|||
@Autowired
|
||||
private CrmInstrumentService instrumentService;
|
||||
|
||||
@Autowired
|
||||
private ICrmUserAnalyseService iCrmUserAnalyseService;
|
||||
|
||||
|
||||
|
||||
@PostMapping("/queryModelSort")
|
||||
|
|
@ -302,4 +308,9 @@ public class CrmInstrumentController {
|
|||
|
||||
}
|
||||
|
||||
@PostMapping(value = "/getTaxPreCheckUsage/{queryDate}")
|
||||
public Result getTaxPreCheckUsage(@PathVariable("queryDate") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate queryDate) throws IOException {
|
||||
return Result.ok(iCrmUserAnalyseService.addUserAnalyse(queryDate));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ import com.kakarote.core.common.ParamAspect;
|
|||
import com.kakarote.core.common.R;
|
||||
import com.kakarote.core.common.Result;
|
||||
import com.kakarote.crm.entity.BO.CrmAddCustomerBo;
|
||||
import com.kakarote.crm.entity.BO.CrmBusinessSaveBO;
|
||||
import com.kakarote.crm.entity.BO.CrmQdInfoBo;
|
||||
import com.kakarote.crm.service.ICrmOpenApiService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
|
@ -24,8 +26,8 @@ public class CrmOpenApiController {
|
|||
@PostMapping("/crm/addCorporateSeas")
|
||||
@ApiOperation("接口新增公海数据")
|
||||
@ParamAspect
|
||||
public Result addCorporateSeas(@RequestBody CrmAddCustomerBo crmAddCustomerBo){
|
||||
crmOpenApiService.crmAddCustomer(crmAddCustomerBo);
|
||||
return R.ok();
|
||||
public Result addCorporateSeas(@RequestBody CrmQdInfoBo crmModel){
|
||||
CrmBusinessSaveBO crmBusinessSaveBO = crmOpenApiService.assemblyRequestData(crmModel);
|
||||
return R.ok(crmBusinessSaveBO);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,5 +15,5 @@ public class CrmAddCustomerBo {
|
|||
private String appSecret;
|
||||
@ApiModelProperty("客户信息对象")
|
||||
@NotEmpty(message = "客户信息不能为空!")
|
||||
private CrmBusinessSaveBO crmModel;
|
||||
private CrmQdInfoBo crmModel;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,48 @@
|
|||
package com.kakarote.crm.entity.BO;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class CrmQdInfoBo {
|
||||
|
||||
/** 微信unionid */
|
||||
private String unionId;
|
||||
|
||||
/** 企业名称 */
|
||||
private String qyName;
|
||||
|
||||
/** 用户姓名 */
|
||||
private String userName;
|
||||
/** 手机 */
|
||||
private String mobile;
|
||||
|
||||
/** 活码id */
|
||||
private String hmId;
|
||||
|
||||
/** 纳税人识别号 */
|
||||
private String nsrsbh;
|
||||
|
||||
/** 所属税务局 */
|
||||
private String sssj;
|
||||
|
||||
/** 注册时间 */
|
||||
private String zcTime;
|
||||
|
||||
/** 行业类型 */
|
||||
private String hyType;
|
||||
|
||||
/** 企业地址 */
|
||||
private String address;
|
||||
|
||||
|
||||
private String qwId;
|
||||
|
||||
//客户来源
|
||||
private String source;
|
||||
|
||||
private String appId;
|
||||
|
||||
private String appSecret;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1,7 +1,14 @@
|
|||
package com.kakarote.crm.service;
|
||||
|
||||
import com.kakarote.crm.entity.BO.CrmAddCustomerBo;
|
||||
import com.kakarote.crm.entity.BO.CrmBusinessSaveBO;
|
||||
import com.kakarote.crm.entity.BO.CrmQdInfoBo;
|
||||
|
||||
public interface ICrmOpenApiService {
|
||||
void crmAddCustomer(CrmAddCustomerBo crmAddCustomerBo);
|
||||
|
||||
Integer openAddCustomerBo(CrmAddCustomerBo crmAddCustomerBo);
|
||||
//添加用户
|
||||
void crmAddCustomer(CrmBusinessSaveBO crmModel,String source);
|
||||
|
||||
CrmBusinessSaveBO assemblyRequestData(CrmQdInfoBo crmModel);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,19 +1,24 @@
|
|||
package com.kakarote.crm.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
||||
import com.kakarote.core.exception.CrmException;
|
||||
import com.kakarote.crm.entity.BO.CrmAddCustomerBo;
|
||||
import com.kakarote.crm.entity.BO.CrmBusinessSaveBO;
|
||||
import com.kakarote.crm.entity.BO.CrmCustomerPoolBO;
|
||||
import com.kakarote.crm.entity.BO.CrmQdInfoBo;
|
||||
import com.kakarote.crm.entity.PO.CrmCustomer;
|
||||
import com.kakarote.crm.entity.VO.CrmModelFiledVO;
|
||||
import com.kakarote.crm.mapper.CrmFieldMapper;
|
||||
import com.kakarote.crm.service.ICrmCustomerService;
|
||||
import com.kakarote.crm.service.ICrmOpenApiService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
import static com.kakarote.core.common.SystemCodeEnum.SYSTEM_NO_AUTH;
|
||||
import static com.kakarote.crm.constant.CrmPoolEnum.GSMGWZKH;
|
||||
import static com.kakarote.crm.constant.CrmPoolEnum.PXQDMDPOOL;
|
||||
|
||||
@Slf4j
|
||||
|
|
@ -22,25 +27,177 @@ public class CrmOpenApiServiceImpl implements ICrmOpenApiService {
|
|||
@Autowired
|
||||
private ICrmCustomerService customerService;
|
||||
|
||||
|
||||
public void crmAddCustomer(CrmAddCustomerBo crmAddCustomerBo){
|
||||
//V1
|
||||
@Override
|
||||
public Integer openAddCustomerBo(CrmAddCustomerBo crmAddCustomerBo) {
|
||||
//权限校验
|
||||
verifyPermissions(crmAddCustomerBo.getAppId(),crmAddCustomerBo.getAppSecret());
|
||||
//数据组装
|
||||
CrmBusinessSaveBO crmBusinessSaveBO = new CrmBusinessSaveBO();
|
||||
//添加客户
|
||||
crmAddCustomer(crmBusinessSaveBO,"签到");
|
||||
return 0;
|
||||
}
|
||||
|
||||
//接口添加用户 V2
|
||||
public CrmBusinessSaveBO assemblyRequestData(CrmQdInfoBo crmModel){
|
||||
//权限校验
|
||||
verifyPermissions(crmModel.getAppId(),crmModel.getAppSecret());
|
||||
|
||||
CrmBusinessSaveBO crmBusinessSaveBO = new CrmBusinessSaveBO();
|
||||
//实体类对象
|
||||
Map<String, Object> entity = new HashMap<String, Object>();
|
||||
entity.put("customerName", crmModel.getQyName());
|
||||
entity.put("mobile", crmModel.getMobile());
|
||||
entity.put("website", crmModel.getNsrsbh());
|
||||
entity.put("email", "");
|
||||
entity.put("remark","");
|
||||
entity.put("address", "");
|
||||
crmBusinessSaveBO.setEntity(entity);
|
||||
List<CrmModelFiledVO> list = new ArrayList<>();
|
||||
//企业税号
|
||||
CrmModelFiledVO fieldZzmdcm = new CrmModelFiledVO();
|
||||
fieldZzmdcm.setFieldId(1101924);
|
||||
fieldZzmdcm.setFieldName("fieldZzmdcm");
|
||||
fieldZzmdcm.setName("企业税号");
|
||||
fieldZzmdcm.setFieldType(0);
|
||||
fieldZzmdcm.setType(1);
|
||||
fieldZzmdcm.setValue(crmModel.getNsrsbh());
|
||||
list.add(fieldZzmdcm);
|
||||
//加入时间
|
||||
CrmModelFiledVO fieldDomqff = new CrmModelFiledVO();
|
||||
fieldDomqff.setFieldId(1101923);
|
||||
fieldDomqff.setFieldName("fieldDomqff");
|
||||
fieldDomqff.setName("加入时间");
|
||||
fieldDomqff.setFieldType(0);
|
||||
fieldDomqff.setType(13);
|
||||
fieldDomqff.setValue(new Date());
|
||||
list.add(fieldDomqff);
|
||||
// 所属税务局
|
||||
CrmModelFiledVO fieldAvfjfa = new CrmModelFiledVO();
|
||||
fieldAvfjfa.setFieldId(1101922);
|
||||
fieldAvfjfa.setFieldName("fieldAvfjfa");
|
||||
fieldAvfjfa.setName("所属税务局");
|
||||
fieldAvfjfa.setFieldType(0);
|
||||
fieldAvfjfa.setType(3);
|
||||
fieldAvfjfa.setValue(crmModel.getSssj());
|
||||
list.add(fieldAvfjfa);
|
||||
//用户标记
|
||||
CrmModelFiledVO fliedMtfnrf = new CrmModelFiledVO();
|
||||
fliedMtfnrf.setFieldId(1101920);
|
||||
fliedMtfnrf.setFieldName("fliedMtfnrf");
|
||||
fliedMtfnrf.setName("用户标记");
|
||||
fliedMtfnrf.setFieldType(0);
|
||||
fliedMtfnrf.setType(3);
|
||||
fliedMtfnrf.setValue(crmModel.getSource());
|
||||
list.add(fliedMtfnrf);
|
||||
//fliedGrasid 金财云联客户 1101921
|
||||
CrmModelFiledVO fliedGrasid = new CrmModelFiledVO();
|
||||
fliedGrasid.setFieldId(1101921);
|
||||
fliedGrasid.setFieldName("fliedGrasid");
|
||||
fliedGrasid.setName("金财云联客户");
|
||||
fliedGrasid.setFieldType(0);
|
||||
fliedGrasid.setType(3);
|
||||
fliedGrasid.setValue("是");
|
||||
list.add(fliedGrasid);
|
||||
//姓名 fieldCbiasz 1101925
|
||||
CrmModelFiledVO fieldCbiasz = new CrmModelFiledVO();
|
||||
fieldCbiasz.setFieldId(1101925);
|
||||
fieldCbiasz.setFieldName("fieldCbiasz");
|
||||
fieldCbiasz.setName("姓名");
|
||||
fieldCbiasz.setFieldType(0);
|
||||
fieldCbiasz.setType(1);
|
||||
fieldCbiasz.setValue(crmModel.getUserName());
|
||||
list.add(fieldCbiasz);
|
||||
//客户所在地区 industry 1101832
|
||||
CrmModelFiledVO industry = new CrmModelFiledVO();
|
||||
industry.setFieldId(1101832);
|
||||
industry.setFieldName("industry");
|
||||
industry.setName("客户所在地区");
|
||||
industry.setFieldType(2);
|
||||
industry.setType(3);
|
||||
industry.setValue(crmModel.getAddress());
|
||||
list.add(industry);
|
||||
//客户级别 level 1101833
|
||||
CrmModelFiledVO level = new CrmModelFiledVO();
|
||||
level.setFieldId(1101833);
|
||||
level.setFieldName("level");
|
||||
level.setName("客户级别");
|
||||
level.setFieldType(2);
|
||||
level.setType(3);
|
||||
level.setValue("");
|
||||
list.add(level);
|
||||
//登录产品手机号 fliedMjrdbe 1101916
|
||||
CrmModelFiledVO fliedMjrdbe = new CrmModelFiledVO();
|
||||
fliedMjrdbe.setFieldId(1101916);
|
||||
fliedMjrdbe.setFieldName("fliedMjrdbe");
|
||||
fliedMjrdbe.setName("登录产品手机号");
|
||||
fliedMjrdbe.setFieldType(1);
|
||||
fliedMjrdbe.setType(0);
|
||||
fliedMjrdbe.setValue("");
|
||||
list.add(fliedMjrdbe);
|
||||
//开通时间 fieldAcqnin 1101917
|
||||
CrmModelFiledVO fieldAcqnin = new CrmModelFiledVO();
|
||||
fieldAcqnin.setFieldId(1101917);
|
||||
fieldAcqnin.setFieldName("fieldAcqnin");
|
||||
fieldAcqnin.setName("开通时间");
|
||||
fieldAcqnin.setFieldType(0);
|
||||
fieldAcqnin.setType(13);
|
||||
fieldAcqnin.setValue("");
|
||||
list.add(fieldAcqnin);
|
||||
//客户来源 source 1101828
|
||||
CrmModelFiledVO source = new CrmModelFiledVO();
|
||||
source.setFieldId(1101828);
|
||||
source.setFieldName("source");
|
||||
source.setName("客户来源");
|
||||
source.setFieldType(2);
|
||||
source.setType(3);
|
||||
source.setValue("金财云联");
|
||||
list.add(source);
|
||||
//5 新开票数 fieldYbwemm 1101919
|
||||
CrmModelFiledVO fieldYbwemm = new CrmModelFiledVO();
|
||||
fieldYbwemm.setFieldId(1101919);
|
||||
fieldYbwemm.setFieldName("fieldYbwemm");
|
||||
fieldYbwemm.setName("新开票数");
|
||||
fieldYbwemm.setFieldType(0);
|
||||
fieldYbwemm.setType(5);
|
||||
fieldYbwemm.setValue("");
|
||||
list.add(fieldYbwemm);
|
||||
//总开票数 fliedBcethz 1101918
|
||||
CrmModelFiledVO fliedBcethz = new CrmModelFiledVO();
|
||||
fliedBcethz.setFieldId(1101918);
|
||||
fliedBcethz.setFieldName("fliedBcethz");
|
||||
fliedBcethz.setName("总开票数");
|
||||
fliedBcethz.setFieldType(0);
|
||||
fliedBcethz.setType(5);
|
||||
fliedBcethz.setValue("");
|
||||
list.add(fliedBcethz);
|
||||
crmBusinessSaveBO.setField(list);
|
||||
//添加数据
|
||||
crmAddCustomer(crmBusinessSaveBO,crmModel.getSource());
|
||||
return crmBusinessSaveBO;
|
||||
}
|
||||
|
||||
public void crmAddCustomer(CrmBusinessSaveBO crmModel,String source){
|
||||
//判断企业是否存在
|
||||
Integer customerByQyjbxx = customerService.getCustomerByQyjbxx(crmAddCustomerBo.getCrmModel());
|
||||
Integer customerByQyjbxx = customerService.getCustomerByQyjbxx(crmModel);
|
||||
//存在用户
|
||||
if (customerByQyjbxx >0){
|
||||
|
||||
}else {
|
||||
//添加客户
|
||||
Map<String, Object> stringObjectMap = customerService.addOrUpdate(crmAddCustomerBo.getCrmModel(), false, null);
|
||||
Map<String, Object> stringObjectMap = customerService.addOrUpdate(crmModel, false, null);
|
||||
// CrmCustomer crmCustomer = (CrmCustomer) stringObjectMap.get("entity");
|
||||
Integer customerId = Integer.parseInt(stringObjectMap.get("customerId").toString());
|
||||
log.info("添加成功stringObjectMap:{}",stringObjectMap.toString());
|
||||
//转入公海
|
||||
CrmCustomerPoolBO poolBO = new CrmCustomerPoolBO();
|
||||
poolBO.setIds(Arrays.asList(customerId));
|
||||
poolBO.setPoolId(PXQDMDPOOL.getId());
|
||||
if ("签到".equals(source)){
|
||||
poolBO.setPoolId(PXQDMDPOOL.getId());
|
||||
}else if ("公司门户网站客户".equals(source)){
|
||||
poolBO.setPoolId(GSMGWZKH.getId());
|
||||
}
|
||||
customerService.updateCustomerByIds(poolBO);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,62 @@
|
|||
package com.kakarote.crm.util;
|
||||
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
import java.security.Key;
|
||||
|
||||
public class AecUtils {
|
||||
|
||||
public static String decrypt(String encryptText, String key) throws Exception {
|
||||
try {
|
||||
|
||||
/*byte[] raw = key.getBytes("utf-8");
|
||||
SecretKeySpec keySpec = new SecretKeySpec(raw, "AES");
|
||||
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
|
||||
cipher.init(Cipher.DECRYPT_MODE, keySpec);
|
||||
//先用base64解码
|
||||
byte[] encrypted1 = new Base64().decode(encryptText);
|
||||
byte[] original = cipher.doFinal(encrypted1);
|
||||
return new String(original, "utf-8");*/
|
||||
|
||||
|
||||
// 将十六进制字符串转换为字节数组
|
||||
byte[] encryptedBytes = new byte[encryptText.length() / 2];
|
||||
for (int i = 0; i < encryptText.length(); i += 2) {
|
||||
encryptedBytes[i / 2] = (byte) ((Character.digit(encryptText.charAt(i), 16) << 4)
|
||||
+ Character.digit(encryptText.charAt(i + 1), 16));
|
||||
}
|
||||
byte[] keyByte = key.getBytes("utf-8");
|
||||
Key keyClass = new SecretKeySpec(keyByte, "AES");
|
||||
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
|
||||
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyClass.getEncoded(), "AES"));
|
||||
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
|
||||
return new String(decryptedBytes, "utf-8");
|
||||
} catch (Exception e) {
|
||||
throw new Exception("解密出错:", e);
|
||||
}
|
||||
}
|
||||
|
||||
public static String encrypt(String encryptText, String key) throws Exception {
|
||||
try {
|
||||
byte[] keyByte = key.getBytes("utf-8");
|
||||
Key keyClass = new SecretKeySpec(keyByte, "AES");
|
||||
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
|
||||
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(keyClass.getEncoded(), "AES"));
|
||||
byte[] encryptedBytes = cipher.doFinal(encryptText.getBytes("utf-8"));
|
||||
//return Base64.encode(encryptedBytes);
|
||||
|
||||
// 转换为十六进制字符串
|
||||
StringBuilder hexString = new StringBuilder();
|
||||
for (byte b : encryptedBytes) {
|
||||
String hex = Integer.toHexString(0xFF & b);
|
||||
if (hex.length() == 1) {
|
||||
hexString.append('0');
|
||||
}
|
||||
hexString.append(hex);
|
||||
}
|
||||
return hexString.toString();
|
||||
}catch (Exception e) {
|
||||
throw new Exception("加密出错:", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,201 @@
|
|||
package com.kakarote.crm.util.xml;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import javax.xml.bind.JAXBContext;
|
||||
import javax.xml.bind.JAXBException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 金三xml对象管理类工具
|
||||
*
|
||||
* @author panpan 2015-12-05
|
||||
*/
|
||||
public class G3ObjManager {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(G3ObjManager.class);
|
||||
private static final Map<String, JAXBContext> ALL_CONTENT_MAP = new HashMap<String, JAXBContext>();
|
||||
// 用于非个税之外
|
||||
private static JAXBContext context = null;
|
||||
|
||||
// 涉税服务管理
|
||||
private static JAXBContext contextSsfwgl = null;
|
||||
|
||||
// 用于个税
|
||||
private static JAXBContext contextGs = null;
|
||||
|
||||
// 用于企业所得税
|
||||
private static JAXBContext contextQysds = null;
|
||||
|
||||
// 用于核心技术报文
|
||||
private static JAXBContext contextService = null;
|
||||
|
||||
// 用于联合办税与国税交互的接口对象
|
||||
private static JAXBContext contextLhbs = null;
|
||||
// 用于企业所得税年度
|
||||
private static JAXBContext contextNdsds2017 = null;
|
||||
|
||||
// 用于国税
|
||||
private static JAXBContext contextGuos = null;
|
||||
|
||||
// 用于办费
|
||||
private static JAXBContext contextBf = null;
|
||||
|
||||
// 用于财产和行为税
|
||||
private static JAXBContext contextCchxws = null;
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
*/
|
||||
public static void init() {
|
||||
try {
|
||||
context = JAXBContext.newInstance("cn.gov.chinatax");
|
||||
contextSsfwgl = JAXBContext.newInstance("cn.gov.chinatax.ssfwgl");
|
||||
contextGuos = JAXBContext.newInstance("cn.gov.chinatax.guos");
|
||||
contextGs = JAXBContext.newInstance("cn.gov.chinatax.grsds");
|
||||
contextQysds = JAXBContext.newInstance("cn.gov.chinatax.qysds.qysds2018");
|
||||
contextService = JAXBContext.newInstance("cn.gov.chinatax.service");
|
||||
contextLhbs = JAXBContext.newInstance("cn.gov.chinatax.lhbs");
|
||||
contextNdsds2017 = JAXBContext.newInstance("cn.gov.chinatax.ndsds.ndsds2017");
|
||||
contextCchxws = JAXBContext.newInstance("cn.gov.chinatax.ccxws");
|
||||
} catch (JAXBException e) {
|
||||
logger.error("初始化JAXBContext出错:", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化社保xmlbean对象
|
||||
*/
|
||||
public static void init_bf() {
|
||||
try {
|
||||
// long starttime = System.currentTimeMillis();
|
||||
contextBf = JAXBContext.newInstance("cn.gov.chinatax.bf");
|
||||
contextService = JAXBContext.newInstance("cn.gov.chinatax.service");
|
||||
} catch (JAXBException e) {
|
||||
logger.error("初始化社保办费JAXBContext出错:", e);
|
||||
}
|
||||
}
|
||||
|
||||
public static void initContextMap(String... packageNames) {
|
||||
if (null != packageNames && 0 < packageNames.length) {
|
||||
for (String name : packageNames) {
|
||||
try {
|
||||
ALL_CONTENT_MAP.put(name, JAXBContext.newInstance(name));
|
||||
} catch (Exception e) {
|
||||
logger.error("load JAXBContext[" + name + "] error:", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static JAXBContext getContext(Object obj) {
|
||||
return getContext(obj, context);
|
||||
}
|
||||
|
||||
public static void setContext(JAXBContext context) {
|
||||
G3ObjManager.context = context;
|
||||
}
|
||||
|
||||
public static JAXBContext getContextSsfwgl(Object obj) {
|
||||
return getContext(obj, contextSsfwgl);
|
||||
}
|
||||
|
||||
public static void setContextSsfwgl(JAXBContext context) {
|
||||
G3ObjManager.contextSsfwgl = context;
|
||||
}
|
||||
|
||||
public static JAXBContext getContextGs(Object obj) {
|
||||
return getContext(obj, contextGs);
|
||||
}
|
||||
|
||||
public static void setContextGs(JAXBContext contextGs) {
|
||||
G3ObjManager.contextGs = contextGs;
|
||||
}
|
||||
|
||||
public static JAXBContext getContextService(Object obj) {
|
||||
return getContext(obj, contextService);
|
||||
}
|
||||
|
||||
public static void setContextService(JAXBContext contextService) {
|
||||
G3ObjManager.contextService = contextService;
|
||||
}
|
||||
|
||||
public static JAXBContext getContextLhbs(Object obj) {
|
||||
return getContext(obj, contextLhbs);
|
||||
}
|
||||
|
||||
public static void setContextLhbs(JAXBContext contextLhbs) {
|
||||
G3ObjManager.contextLhbs = contextLhbs;
|
||||
}
|
||||
|
||||
public static JAXBContext getContextNdsds2017(Object obj) {
|
||||
return getContext(obj, contextNdsds2017);
|
||||
}
|
||||
|
||||
public static void setContextNdsds2017(JAXBContext contextNdsds2017) {
|
||||
G3ObjManager.contextNdsds2017 = contextNdsds2017;
|
||||
}
|
||||
|
||||
public static JAXBContext getContextGuos(Object obj) {
|
||||
return getContext(obj, contextGuos);
|
||||
}
|
||||
|
||||
public static void setContextGuos(JAXBContext contextGuos) {
|
||||
G3ObjManager.contextGuos = contextGuos;
|
||||
}
|
||||
|
||||
public static JAXBContext getContextQysds(Object obj) {
|
||||
return getContext(obj, contextQysds);
|
||||
}
|
||||
|
||||
public static void setContextQysds(JAXBContext contextQysds) {
|
||||
G3ObjManager.contextQysds = contextQysds;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the contextBf
|
||||
*/
|
||||
public static JAXBContext getContextBf(Object obj) {
|
||||
return getContext(obj, contextBf);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param contextBf the contextBf to set
|
||||
*/
|
||||
public static void setContextBf(JAXBContext contextBf) {
|
||||
G3ObjManager.contextBf = contextBf;
|
||||
}
|
||||
|
||||
|
||||
public static JAXBContext getContextCchxws(Object obj) {
|
||||
return getContext(obj, contextCchxws);
|
||||
}
|
||||
|
||||
public static void setContextCchxws(JAXBContext contextCchxws) {
|
||||
G3ObjManager.contextCchxws = contextCchxws;
|
||||
}
|
||||
|
||||
private static JAXBContext getContext(Object obj, JAXBContext defaultJaxbContext) {
|
||||
if (null != defaultJaxbContext) {
|
||||
return defaultJaxbContext;
|
||||
} else {
|
||||
try {
|
||||
Class<?> clazz = obj.getClass();
|
||||
String clazzName = clazz.getName();
|
||||
clazzName = clazzName.substring(0, clazzName.lastIndexOf("."));
|
||||
logger.info("加载JAXBContext容器开始,clazzName=" + clazzName);
|
||||
JAXBContext context = ALL_CONTENT_MAP.get(clazzName);
|
||||
if (null == context) {
|
||||
context = JAXBContext.newInstance(clazzName);
|
||||
ALL_CONTENT_MAP.put(clazzName, context);
|
||||
}
|
||||
logger.info("加载JAXBContext容器完成,clazzName=" + clazzName);
|
||||
|
||||
return context;
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,342 @@
|
|||
package com.kakarote.crm.util.xml;
|
||||
|
||||
import com.haiti.exception.CustomException;
|
||||
import net.sf.json.JSON;
|
||||
import net.sf.json.JSONObject;
|
||||
import net.sf.json.xml.XMLSerializer;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.xml.bind.*;
|
||||
import javax.xml.stream.XMLInputFactory;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.stream.XMLStreamReader;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.StringReader;
|
||||
import java.io.StringWriter;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
|
||||
public class XmlUtils {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(XmlUtils.class);
|
||||
|
||||
|
||||
private static JAXBContext context = null;
|
||||
|
||||
private static XMLSerializer xmlSerializer=null;
|
||||
|
||||
static {
|
||||
init();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
*/
|
||||
public static void init() {
|
||||
|
||||
if(xmlSerializer == null){
|
||||
xmlSerializer=new XMLSerializer();
|
||||
xmlSerializer.setTypeHintsEnabled(false);//json转xml数据格式时是否增加type属性 false
|
||||
}
|
||||
/*if(context == null){
|
||||
context = JAXBContext.newInstance("cn.gov.chinatax");
|
||||
}*/
|
||||
|
||||
}
|
||||
|
||||
public static <T> JAXBElement<T> getBeanByChinatax(String xml, Class<T> clazz) throws JAXBException, XMLStreamException {
|
||||
long startTime = System.currentTimeMillis();
|
||||
JAXBElement<T> obj = null;
|
||||
if (clazz == null)
|
||||
return null;
|
||||
if (xml == null || " ".equals(xml.trim()))
|
||||
return null;
|
||||
try {
|
||||
JAXBContext context = JAXBContext.newInstance(clazz);
|
||||
Unmarshaller um = context.createUnmarshaller();
|
||||
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
|
||||
XMLStreamReader reader = xmlInputFactory.createXMLStreamReader(new StringReader(xml));
|
||||
obj = um.unmarshal(reader, clazz);
|
||||
}catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
}
|
||||
logger.debug("xml2Obj 耗时:" + (System.currentTimeMillis() - startTime) + " 毫秒");
|
||||
return obj;
|
||||
}
|
||||
|
||||
public static <T> JAXBElement<T> getBeanByClass(String xml, Class<T> clazz) throws JAXBException, XMLStreamException {
|
||||
long startTime = System.currentTimeMillis();
|
||||
JAXBElement<T> obj = null;
|
||||
if (clazz == null)
|
||||
return null;
|
||||
if (xml == null || " ".equals(xml.trim()))
|
||||
return null;
|
||||
try {
|
||||
JAXBContext context = JAXBContext.newInstance(clazz);
|
||||
Unmarshaller um = context.createUnmarshaller();
|
||||
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
|
||||
XMLStreamReader reader = xmlInputFactory.createXMLStreamReader(new StringReader(xml));
|
||||
obj = um.unmarshal(reader, clazz);
|
||||
}catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
}
|
||||
logger.debug("xml2Obj 耗时:" + (System.currentTimeMillis() - startTime) + " 毫秒");
|
||||
return obj;
|
||||
}
|
||||
|
||||
/**
|
||||
* xml报文转换成实体object
|
||||
*
|
||||
* @param xml
|
||||
* 需要转换的业务报文
|
||||
* @param obj
|
||||
* 需要转换的bean,必须实体化
|
||||
* @return 转换后的实体bean,返回带有值的对象
|
||||
* @throws
|
||||
* @throws Exception
|
||||
*/
|
||||
public static Object xmlToObj(String xml, Object obj)
|
||||
throws UnsupportedEncodingException, JAXBException {
|
||||
long startTime = System.currentTimeMillis();
|
||||
if (obj == null)
|
||||
return null;
|
||||
if (xml == null || " ".equals(xml.trim()))
|
||||
return null;
|
||||
xml = formatObjXmlHead(xml, obj);
|
||||
try {
|
||||
//JAXBContext context = JAXBContext.newInstance(obj.getClass());
|
||||
Unmarshaller um = context.createUnmarshaller();
|
||||
obj = um.unmarshal(new ByteArrayInputStream(xml.getBytes("UTF-8")));
|
||||
} catch (JAXBException e) {
|
||||
|
||||
throw e;
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
|
||||
throw e;
|
||||
}
|
||||
logger.debug("xml2Obj 耗时:" + (System.currentTimeMillis() - startTime)
|
||||
+ " 毫秒");
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
||||
public static String objToXml(Object object){
|
||||
Marshaller marshaller = null;
|
||||
try {
|
||||
marshaller = context.createMarshaller();
|
||||
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
|
||||
marshaller.setProperty(Marshaller.JAXB_ENCODING, "utf-8");//编码格式
|
||||
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, false);//是否隐藏xml格式声明
|
||||
StringWriter writer = new StringWriter();
|
||||
|
||||
marshaller.marshal(object, writer);
|
||||
return writer.toString();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* object对象转换业务报文xml
|
||||
*
|
||||
* @param obj
|
||||
* 需要转换的对象obj
|
||||
* @return 返回业务报文xml
|
||||
* @throws JAXBException
|
||||
* @throws Exception
|
||||
*/
|
||||
public static String obj2xml(Object obj) throws CustomException {
|
||||
long startTime = System.currentTimeMillis();
|
||||
|
||||
if (obj == null)
|
||||
return null;
|
||||
StringWriter sw = new StringWriter();
|
||||
try {
|
||||
//JAXBContext context = G3ObjManager.getContext();
|
||||
Marshaller mars = G3ObjManager.getContext(obj).createMarshaller();
|
||||
mars.setProperty(Marshaller.JAXB_ENCODING,"utf-8");//编码格式
|
||||
mars.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);// 是否格式化生成的xml串
|
||||
mars.setProperty(Marshaller.JAXB_FRAGMENT, false);// 是否省略xm头声明信息
|
||||
mars.marshal(obj, sw);
|
||||
} catch (JAXBException e) {
|
||||
logger.error ( obj.getClass () +":JAXBException:"+ e.getMessage ());
|
||||
CustomException ex = new CustomException("实体化需要转换的obj出错:", e);
|
||||
throw ex;
|
||||
} catch (Exception e) {
|
||||
logger.error ( obj.getClass () +":Exception:"+ e.getMessage ());
|
||||
CustomException ex = new CustomException("obj转换xml出错:", e);
|
||||
throw ex;
|
||||
}
|
||||
|
||||
logger.debug("obj2xml 耗时:" + (System.currentTimeMillis() - startTime)
|
||||
+ " 毫秒");
|
||||
|
||||
return formatTaxMLHead(sw.toString(), obj);
|
||||
}
|
||||
|
||||
/**
|
||||
* xml报文转换成实体object
|
||||
*
|
||||
* @param xml
|
||||
* 需要转换的业务报文
|
||||
* @param obj
|
||||
* 需要转换的bean,必须实体化
|
||||
* @return 转换后的实体bean,返回带有值的对象
|
||||
* @throws CustomException
|
||||
* @throws Exception
|
||||
*/
|
||||
public static Object xml2Obj(String xml, Object obj)
|
||||
throws CustomException {
|
||||
long startTime = System.currentTimeMillis();
|
||||
if (obj == null)
|
||||
return null;
|
||||
if (xml == null || " ".equals(xml.trim()))
|
||||
return null;
|
||||
xml = formatObjXmlHead(xml, obj);
|
||||
try {
|
||||
//JAXBContext context = JAXBContext.newInstance(obj.getClass());
|
||||
Unmarshaller um = G3ObjManager.getContext(obj).createUnmarshaller();
|
||||
obj = um.unmarshal(new ByteArrayInputStream(xml.getBytes("UTF-8")));
|
||||
} catch (JAXBException e) {
|
||||
CustomException ex = new CustomException("实体化需要转换的obj出错:", e);
|
||||
throw ex;
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
CustomException ex = new CustomException("xml转换obj出错:", e);
|
||||
throw ex;
|
||||
} catch (Exception e) {
|
||||
CustomException ex = new CustomException("xml转换obj出错:", e);
|
||||
throw ex;
|
||||
}
|
||||
logger.debug("xml2Obj 耗时:" + (System.currentTimeMillis() - startTime)
|
||||
+ " 毫秒");
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static String objToXml(Object object,Class clazz){
|
||||
Marshaller marshaller = null;
|
||||
try {
|
||||
JAXBContext context = JAXBContext.newInstance(clazz);
|
||||
marshaller = context.createMarshaller();
|
||||
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
|
||||
marshaller.setProperty(Marshaller.JAXB_ENCODING, "utf-8");//编码格式
|
||||
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, false);//是否隐藏xml格式声明
|
||||
StringWriter writer = new StringWriter();
|
||||
|
||||
marshaller.marshal(object, writer);
|
||||
return writer.toString();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化金三的报文头 后续可以补充格式化其它的一些头信息
|
||||
*
|
||||
* @param xml
|
||||
* @param obj
|
||||
* @return
|
||||
*/
|
||||
public static String formatTaxMLHead(String xml, Object obj) {
|
||||
String objName = obj.getClass().getName();
|
||||
objName = objName.substring(objName.lastIndexOf('.') + 1);
|
||||
xml = xml.replaceAll(objName, "taxML");
|
||||
return xml;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化对象bean需要的报文头
|
||||
*
|
||||
* @param xml
|
||||
* @param obj
|
||||
* @return
|
||||
*/
|
||||
public static String formatObjXmlHead(String xml, Object obj) {
|
||||
String objName = obj.getClass().getName();
|
||||
objName = objName.substring(objName.lastIndexOf('.') + 1);
|
||||
//xml = xml.replaceAll("taxML", objName);
|
||||
//暂时处理核心征管返回的特殊格式的报文(财务报表包含ns2:节点),以后根据具体的来处理。
|
||||
xml = xml.replaceAll("taxML", objName);
|
||||
return xml;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化金三的报文头 后续可以补充格式化其它的一些头信息(用于核心技术报文)
|
||||
* @param xml
|
||||
* @param obj
|
||||
* @return
|
||||
*/
|
||||
public static String formatServiceHead(String xml, Object obj) {
|
||||
String objName = obj.getClass().getName();
|
||||
objName = objName.substring(objName.lastIndexOf('.') + 1);
|
||||
xml = xml.replaceAll(objName, "service");
|
||||
return xml;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化对象bean需要的报文头(用于核心技术报文)
|
||||
* @param xml
|
||||
* @param obj
|
||||
* @return
|
||||
*/
|
||||
public static String formatServiceXmlHead(String xml, Object obj) {
|
||||
String objName = obj.getClass().getName();
|
||||
objName = objName.substring(objName.lastIndexOf('.') + 1);
|
||||
//xml = xml.replaceAll("taxML", objName);
|
||||
//暂时处理核心征管返回的特殊格式的报文(财务报表包含ns2:节点),以后根据具体的来处理。
|
||||
xml = xml.replaceAll("service", objName);
|
||||
return xml;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化对象bean需要的报文头(用于财务报表格式化)
|
||||
*
|
||||
* @param xml
|
||||
* @param obj
|
||||
* @return
|
||||
*/
|
||||
public static String formatObjXmlHead(String xml, Object obj, String node) {
|
||||
String objName = obj.getClass().getName();
|
||||
objName = objName.substring(objName.lastIndexOf('.') + 1);
|
||||
//xml = xml.replaceAll("taxML", objName);
|
||||
//暂时处理核心征管返回的特殊格式的报文(财务报表包含ns2:节点),以后根据具体的来处理。
|
||||
xml = xml.replaceAll(node, objName).replaceAll("ns2:", "").replaceAll("ns2", "");
|
||||
return xml;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* json 转xml字符串
|
||||
* @param json net.sf.json 参数
|
||||
* @param rootElementName 第一个节点名称
|
||||
* */
|
||||
public static String jsonToXml(JSON json, String rootElementName){
|
||||
xmlSerializer.setRootName(rootElementName);
|
||||
return xmlSerializer.write(json);
|
||||
}
|
||||
|
||||
/**
|
||||
* xml 转json字符串
|
||||
* @param xml net.sf.json 参数
|
||||
* */
|
||||
public static JSON xmlToJson(String xml){
|
||||
String json = xmlSerializer.read(xml).toString();
|
||||
json=json.replaceAll("\\[\\]", "\"\"");
|
||||
return JSONObject.fromObject(json);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
package com.kakarote.crm.webService;
|
||||
|
||||
import javax.jws.WebService;
|
||||
|
||||
@WebService(targetNamespace = "etax.jiangxi.chinatax.gov.cn")
|
||||
public interface IEtaxService {
|
||||
|
||||
public String doService(String sid,String xml);
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package com.kakarote.crm.webService.config;
|
||||
|
||||
import lombok.Data;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Data
|
||||
@Component
|
||||
@ConfigurationProperties(prefix = "taxwebservice")
|
||||
public class TaxWebServiceConfig {
|
||||
private String etaxServiceUrl;
|
||||
private String etaxServiceUrlTwo;
|
||||
private String loginPassword;
|
||||
private String encryptKey;
|
||||
private String tranOrg;
|
||||
private String tranUser;
|
||||
private String service_ver;
|
||||
private String channelId;
|
||||
private String linkURL;
|
||||
private String clientNo;
|
||||
private String sm2PublicKey;
|
||||
private String sm2PrivateKey;
|
||||
private String url;
|
||||
private String key;
|
||||
private String channelCode;
|
||||
private String aecEncryptKey;
|
||||
}
|
||||
|
|
@ -0,0 +1,127 @@
|
|||
package com.kakarote.crm.webService.util;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
@XmlType(name = "head",propOrder = {"tran_id",
|
||||
"channel_id","tran_seq","tran_date",
|
||||
"tran_time","tran_org","tran_user",
|
||||
"file_path","return_msg","service_ver","expand"})
|
||||
public class HeadType {
|
||||
|
||||
private String tran_id;
|
||||
|
||||
private String channel_id;
|
||||
|
||||
private String tran_seq;
|
||||
|
||||
private String tran_date;
|
||||
|
||||
private String tran_time;
|
||||
|
||||
private String tran_org;
|
||||
|
||||
private String tran_user;
|
||||
|
||||
private String file_path;
|
||||
|
||||
private String service_ver;
|
||||
|
||||
private ReturnMsg return_msg;
|
||||
|
||||
|
||||
private List<ParamListType> expand;
|
||||
|
||||
|
||||
public String getTran_id() {
|
||||
return tran_id;
|
||||
}
|
||||
|
||||
public void setTran_id(String tran_id) {
|
||||
this.tran_id = tran_id;
|
||||
}
|
||||
|
||||
public String getChannel_id() {
|
||||
return channel_id;
|
||||
}
|
||||
|
||||
public void setChannel_id(String channel_id) {
|
||||
this.channel_id = channel_id;
|
||||
}
|
||||
|
||||
public String getTran_seq() {
|
||||
return tran_seq;
|
||||
}
|
||||
|
||||
public void setTran_seq(String tran_seq) {
|
||||
this.tran_seq = tran_seq;
|
||||
}
|
||||
|
||||
public String getTran_date() {
|
||||
return tran_date;
|
||||
}
|
||||
|
||||
public void setTran_date(String tran_date) {
|
||||
this.tran_date = tran_date;
|
||||
}
|
||||
|
||||
public String getTran_time() {
|
||||
return tran_time;
|
||||
}
|
||||
|
||||
public void setTran_time(String tran_time) {
|
||||
this.tran_time = tran_time;
|
||||
}
|
||||
|
||||
public String getTran_org() {
|
||||
return tran_org;
|
||||
}
|
||||
|
||||
public void setTran_org(String tran_org) {
|
||||
this.tran_org = tran_org;
|
||||
}
|
||||
|
||||
public String getTran_user() {
|
||||
return tran_user;
|
||||
}
|
||||
|
||||
public void setTran_user(String tran_user) {
|
||||
this.tran_user = tran_user;
|
||||
}
|
||||
|
||||
public String getFile_path() {
|
||||
return file_path;
|
||||
}
|
||||
|
||||
public void setFile_path(String file_path) {
|
||||
this.file_path = file_path;
|
||||
}
|
||||
|
||||
public String getService_ver() {
|
||||
return service_ver;
|
||||
}
|
||||
|
||||
public void setService_ver(String service_ver) {
|
||||
this.service_ver = service_ver;
|
||||
}
|
||||
|
||||
public List<ParamListType> getExpand() {
|
||||
return expand;
|
||||
}
|
||||
|
||||
public void setExpand(List<ParamListType> expand) {
|
||||
this.expand = expand;
|
||||
}
|
||||
|
||||
public ReturnMsg getReturn_msg() {
|
||||
return return_msg;
|
||||
}
|
||||
|
||||
public void setReturn_msg(ReturnMsg return_msg) {
|
||||
this.return_msg = return_msg;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
package com.kakarote.crm.webService.util;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
public class ParamListType {
|
||||
|
||||
|
||||
private String name;
|
||||
|
||||
private String value;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
package com.kakarote.crm.webService.util;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
@XmlType(name="return_msg")
|
||||
public class ReturnMsg {
|
||||
|
||||
@XmlElement(name="reason")
|
||||
private String reason;
|
||||
|
||||
@XmlElement(name="message")
|
||||
private String message;
|
||||
|
||||
@XmlElement(name="code")
|
||||
private String code;
|
||||
|
||||
public String getReason() {
|
||||
return reason;
|
||||
}
|
||||
|
||||
public void setReason(String reason) {
|
||||
this.reason = reason;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public void setMessage(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(String code) {
|
||||
this.code = code;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,262 @@
|
|||
package com.kakarote.crm.webService.util;
|
||||
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
import cn.hutool.core.lang.UUID;
|
||||
import com.aliyun.oss.ServiceException;
|
||||
import com.ctc.wstx.util.DataUtil;
|
||||
import com.foresee.platform.api.exception.PlatformApiException;
|
||||
import com.kakarote.core.exception.CrmException;
|
||||
import com.kakarote.crm.util.AecUtils;
|
||||
import com.kakarote.crm.util.xml.XmlUtils;
|
||||
import com.kakarote.crm.webService.IEtaxService;
|
||||
import com.kakarote.crm.webService.config.TaxWebServiceConfig;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.xml.bind.JAXBElement;
|
||||
import javax.xml.bind.JAXBException;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.ws.BindingProvider;
|
||||
import java.rmi.ServerException;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
@Component
|
||||
public class WebServiceUtil {
|
||||
|
||||
private static final Logger log= LoggerFactory.getLogger(WebServiceUtil.class);
|
||||
|
||||
|
||||
/**
|
||||
* 响应报文Service 格式化
|
||||
* */
|
||||
public static XmlService getResponse(String responseStr) {
|
||||
try{
|
||||
JAXBElement<XmlService> doServiceResponse= XmlUtils.getBeanByClass(responseStr, XmlService.class);
|
||||
XmlService responseValue=doServiceResponse.getValue();
|
||||
|
||||
HeadType head=responseValue.getHead();
|
||||
ReturnMsg returnMsg=head.getReturn_msg();
|
||||
String code=returnMsg.getCode();
|
||||
if(!"000".equals(code)){//接口调用失败
|
||||
log.error("接口调用失败:"+returnMsg.getMessage()+"。详细信息:"+returnMsg.getReason());
|
||||
throw new CrmException(500, returnMsg.getMessage()+"。详细信息:"+returnMsg.getReason());
|
||||
}
|
||||
return responseValue;
|
||||
|
||||
}catch (JAXBException ex){
|
||||
log.error("响应报文xml格式错误:"+responseStr,ex);
|
||||
throw new CrmException(500,"xml格式错误");
|
||||
}catch (XMLStreamException ex){
|
||||
log.error("响应报文xml格式错误:"+responseStr,ex);
|
||||
throw new CrmException(500,"xml格式错误");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 响应报文格式化
|
||||
* @param responseStr service 报文中的body
|
||||
* @param responseStr key sm4密钥
|
||||
* @param responseStr clazz xml格式类class
|
||||
* */
|
||||
public static <T> Object getResponseBody(String responseStr, String key, Class clazz) {
|
||||
|
||||
try{
|
||||
String ss= AecUtils.decrypt(responseStr,key);
|
||||
log.error("responseStr:"+ss);
|
||||
if(clazz!=null){
|
||||
JAXBElement<Object> serviceJAXBElement= XmlUtils.getBeanByClass(ss,clazz);
|
||||
return serviceJAXBElement.getValue();
|
||||
}else {
|
||||
return XmlUtils.xmlToJson(ss);
|
||||
}
|
||||
}catch (PlatformApiException ex){
|
||||
log.error("响应报文body解密失败:"+responseStr,ex);
|
||||
throw new CrmException(500,"解密失败");
|
||||
}catch (JAXBException ex){
|
||||
log.error("响应报文xml格式错误:"+responseStr,ex);
|
||||
throw new CrmException(500,"xml格式错误");
|
||||
}catch (XMLStreamException ex){
|
||||
log.error("响应报文xml格式错误:"+responseStr,ex);
|
||||
throw new CrmException(500,"xml格式错误");
|
||||
}catch (Exception ex){
|
||||
log.error("系统错误!",ex);
|
||||
throw new CrmException(500,"系统错误!");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 装填head 技术报文
|
||||
* */
|
||||
public static HeadType getRequestHead(String tranId,String channelId, String tranOrg, String tranUser, String service_ver, List<ParamListType> expand){
|
||||
HeadType headType= new HeadType();
|
||||
headType.setTran_id(tranId); //服务Id 固定
|
||||
headType.setChannel_id(channelId); //渠道ID 固定
|
||||
headType.setTran_org(tranOrg);
|
||||
headType.setTran_org(tranUser);
|
||||
// String tran_date = DateUtils.dateTimeNow("yyyy-MM-dd");
|
||||
LocalDate today = LocalDate.now(); // 获取当前日期
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||
String tran_date = today.format(formatter);
|
||||
headType.setTran_date(tran_date);//请求时间
|
||||
headType.setTran_time(String.valueOf(Instant.now().getEpochSecond()));
|
||||
headType.setService_ver(service_ver);
|
||||
headType.setExpand(expand);
|
||||
|
||||
return headType;
|
||||
}
|
||||
|
||||
/**
|
||||
* 装填head 技术报文
|
||||
* 其他固定参数
|
||||
* */
|
||||
public static HeadType getRequestHead(String tranId, List<ParamListType> expand, TaxWebServiceConfig properties){
|
||||
return getRequestHead(tranId,properties.getChannelId(),properties.getTranOrg(),properties.getTranUser(),properties.getService_ver(),expand);
|
||||
}
|
||||
|
||||
public static List<ParamListType> createDefaultExpand(String channelId){
|
||||
List<ParamListType> expand=new ArrayList<>();
|
||||
ParamListType paramType1=new ParamListType();
|
||||
paramType1.setName("identityType");
|
||||
paramType1.setValue(channelId);
|
||||
expand.add(paramType1);
|
||||
ParamListType paramType2=new ParamListType();
|
||||
paramType2.setName("encryptFlag");
|
||||
paramType2.setValue("1");
|
||||
expand.add(paramType2);
|
||||
|
||||
ParamListType paramType3 = new ParamListType();
|
||||
paramType3.setName("encryptType");
|
||||
paramType3.setValue("16Aes");
|
||||
expand.add(paramType3);
|
||||
|
||||
return expand;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 业务报文 转为xml并进行加密操作
|
||||
* */
|
||||
public static String getRequestBody(Object obj,String key,Class clazz){
|
||||
String requestBody=XmlUtils.objToXml(obj,clazz);
|
||||
try {
|
||||
return AecUtils.encrypt(requestBody,key);
|
||||
} catch (Exception e) {
|
||||
log.error("请求业务报文加密失败:"+requestBody,e);
|
||||
throw new ServiceException("加密失败");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 业务报文 Json转为xml并进行加密操作
|
||||
* */
|
||||
public static String getRequestBodyByJson(JSONObject obj, String rootName, String key){
|
||||
String requestBody=XmlUtils.jsonToXml(obj,rootName);
|
||||
// TODO: 2024-09-20 处理一些可能的乱码问题
|
||||
requestBody = requestBody.replaceAll(" >",">").replaceAll("
","");
|
||||
try {
|
||||
return AecUtils.encrypt(requestBody,key);
|
||||
} catch (Exception e) {
|
||||
log.error("请求业务报文加密失败:"+requestBody,e);
|
||||
throw new ServiceException("加密失败");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 组装WebService的xml请求参数
|
||||
* @param sid 服务Id
|
||||
* @param body 业务参数
|
||||
*/
|
||||
public static String createRequestXml(String sid,String body,TaxWebServiceConfig taxWebServiceConfig) throws Exception{
|
||||
//数据加密
|
||||
body = AecUtils.encrypt(body, taxWebServiceConfig.getAecEncryptKey());
|
||||
// String tran_date = DateUtils.dateTimeNow("yyyyMMdd");
|
||||
LocalDate today = LocalDate.now(); // 获取当前日期
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
|
||||
String tran_date = today.format(formatter);
|
||||
XmlService service = new XmlService();
|
||||
HeadType head = new HeadType();
|
||||
head.setTran_id(sid);
|
||||
head.setChannel_id(taxWebServiceConfig.getChannelId());
|
||||
head.setTran_seq(UUID.fastUUID().toString().replaceAll("-",""));
|
||||
head.setTran_date(tran_date);
|
||||
head.setTran_time(String.valueOf(Instant.now().getEpochSecond()));
|
||||
head.setTran_org(taxWebServiceConfig.getTranOrg());
|
||||
head.setTran_user(taxWebServiceConfig.getTranUser());
|
||||
head.setFile_path("");
|
||||
head.setService_ver(taxWebServiceConfig.getService_ver());
|
||||
|
||||
List<ParamListType> expand = new ArrayList<ParamListType>();
|
||||
ParamListType paramType = new ParamListType();
|
||||
paramType.setName("identityType");
|
||||
paramType.setValue(taxWebServiceConfig.getChannelId());
|
||||
expand.add(paramType);
|
||||
paramType = new ParamListType();
|
||||
paramType.setName("encryptFlag");
|
||||
paramType.setValue("1"); //加密标志
|
||||
expand.add(paramType);
|
||||
|
||||
paramType = new ParamListType();
|
||||
paramType.setName("encryptType");
|
||||
paramType.setValue("16Aes");
|
||||
expand.add(paramType);
|
||||
|
||||
head.setExpand(expand);
|
||||
service.setHead(head);
|
||||
String ywbw = "<![CDATA[" + body + "]]>";
|
||||
service.setBody(ywbw);
|
||||
String requestXml = XmlUtils.objToXml(service,XmlService.class);
|
||||
requestXml = requestXml.replaceAll(""", "\"")
|
||||
.replaceAll("'", "'")
|
||||
.replaceAll("&", "&")
|
||||
.replaceAll("<", "<")
|
||||
.replaceAll(">", ">")
|
||||
.replaceAll("\\n","");
|
||||
|
||||
// 使用正则表达式定位 <service> 到 <body> 之前的内容并去除空格
|
||||
Pattern pattern = Pattern.compile("<service>(.*?)<body>", Pattern.DOTALL);
|
||||
Matcher matcher = pattern.matcher(requestXml);
|
||||
if (matcher.find()) {
|
||||
String serviceToBodyPart = matcher.group(1).replaceAll("[\\n\\r\\t\\s+]", "");
|
||||
requestXml = matcher.replaceFirst("<service>" + serviceToBodyPart + "<body>");
|
||||
}
|
||||
return requestXml;
|
||||
}
|
||||
|
||||
/**
|
||||
* 服务配置类
|
||||
* */
|
||||
public static IEtaxService getEtaxService(TaxWebServiceConfig taxWebServiceConfig){
|
||||
JaxWsProxyFactoryBean proxy = new JaxWsProxyFactoryBean();
|
||||
proxy.setAddress(taxWebServiceConfig.getEtaxServiceUrlTwo());
|
||||
proxy.setServiceClass(IEtaxService.class);
|
||||
return (IEtaxService) proxy.create();
|
||||
}
|
||||
|
||||
/**
|
||||
* 服务配置类
|
||||
* */
|
||||
public static IEtaxService getEtaxService(TaxWebServiceConfig taxWebServiceConfig,int connectionTimeout,int receiveTimeout){
|
||||
JaxWsProxyFactoryBean proxy = new JaxWsProxyFactoryBean();
|
||||
proxy.setAddress(taxWebServiceConfig.getEtaxServiceUrlTwo());
|
||||
proxy.setServiceClass(IEtaxService.class);
|
||||
IEtaxService etaxService = (IEtaxService) proxy.create();
|
||||
// 设置连接超时和响应超时
|
||||
BindingProvider bindingProvider = (BindingProvider) etaxService;
|
||||
Map<String, Object> requestContext = bindingProvider.getRequestContext();
|
||||
requestContext.put("javax.xml.ws.client.connectionTimeout", connectionTimeout); // 连接超时时间(单位:毫秒)
|
||||
requestContext.put("javax.xml.ws.client.receiveTimeout", receiveTimeout); // 响应超时时间(单位:毫秒)
|
||||
return etaxService;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
package com.kakarote.crm.webService.util;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
|
||||
@XmlRootElement(name="service")
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
@XmlType(name = "service",propOrder = {"head","body"})
|
||||
public class XmlService {
|
||||
|
||||
private HeadType head;
|
||||
|
||||
private String body;
|
||||
|
||||
public HeadType getHead() {
|
||||
return head;
|
||||
}
|
||||
|
||||
public void setHead(HeadType head) {
|
||||
this.head = head;
|
||||
}
|
||||
|
||||
public String getBody() {
|
||||
return body;
|
||||
}
|
||||
|
||||
public void setBody(String body) {
|
||||
this.body = body;
|
||||
}
|
||||
}
|
||||
|
|
@ -8,16 +8,33 @@ spring:
|
|||
pool:
|
||||
max-active: 300
|
||||
datasource:
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:47.99.60.88}:${DATASOURCE_PORT:3306}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3307}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
username: ${DATASOURCE_USERNAME:devuser}
|
||||
password: ${DATASOURCE_PASSWORD:ckly@9069&Uk}
|
||||
elasticsearch:
|
||||
rest:
|
||||
uris: 47.99.60.88:9200
|
||||
uris: 127.0.0.1:9200
|
||||
username:
|
||||
password:
|
||||
|
||||
app:
|
||||
url: "https://v3-demo.lqyuns.com"
|
||||
base_url : "http://localhost:8080/system/user/getDataByDate"
|
||||
url: https://v3-demo.lqyuns.com
|
||||
base_url : https://v3-demo.lqyuns.com/system/user/getDataByDate
|
||||
|
||||
taxwebservice:
|
||||
etaxServiceUrl: https://wxbs.jiangxi.chinatax.gov.cn/etaxApiYsc/service/eTaxService?wsdl
|
||||
etaxServiceUrlTwo: https://wxbs.jiangxi.chinatax.gov.cn/etaxApiYsc/service/eTaxService?wsdl
|
||||
loginPassword: 96E79218965EB72C92A549DD5A330112
|
||||
encryptKey: 69307564386d5a626b7879746f49454b
|
||||
tranOrg: 13600000000
|
||||
tranUser: ANDROID
|
||||
service_ver: V1.0
|
||||
channelId: JXSW.DZSWJ.SQZL.FX
|
||||
linkURL: https://wxbs.jiangxi.chinatax.gov.cn/etaxbk/product/initExecuteMenu
|
||||
clientNo: JXFX.DLJZ.SBFW
|
||||
sm2PublicKey: 043541E235BEAEB734294FD672F858564D91756A6B65348BA68AA1AB0BF870526CECE6B5BF63E62389AE3DF428E5490EFEC0918F5F57066A3FFA9E9E699B675B8D
|
||||
sm2PrivateKey: 586BA1CD35F1905EE521B4213407991AEFC13E2C076724058DC7E38B083F0D5A
|
||||
url: https://wxbs.jiangxi.chinatax.gov.cn/etaxbk/product/initExecute
|
||||
key: 586BA1CD35F1905EE521B4213407991AEFC13E2C076724058DC7E38B083F0D5A
|
||||
channelCode: JXFX.DLJZ.SBFW
|
||||
aecEncryptKey: etax_api_key_ysc
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ spring:
|
|||
pool:
|
||||
max-active: 300
|
||||
datasource:
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3306}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3307}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
username: ${DATASOURCE_USERNAME:root}
|
||||
password: ${DATASOURCE_PASSWORD:password}
|
||||
elasticsearch:
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ spring:
|
|||
pool:
|
||||
max-active: 300
|
||||
datasource:
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3306}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3307}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
username: ${DATASOURCE_USERNAME:root}
|
||||
password: ${DATASOURCE_PASSWORD:password}
|
||||
elasticsearch:
|
||||
|
|
|
|||
|
|
@ -9,12 +9,12 @@ spring:
|
|||
nacos:
|
||||
config:
|
||||
enabled: true
|
||||
server-addr: 192.168.100.136:8848
|
||||
server-addr: 127.0.0.1:8848
|
||||
file-extension: yaml
|
||||
prefix: crm
|
||||
discovery:
|
||||
enabled: true
|
||||
server-addr: 192.168.100.136:8848
|
||||
server-addr: 127.0.0.1:8848
|
||||
sentinel:
|
||||
filter:
|
||||
enabled: false
|
||||
|
|
@ -22,7 +22,7 @@ spring:
|
|||
dashboard: ${SENTINEL_DASHBOARD_HOST:127.0.0.1}:${SENTINEL_DASHBOARD_PORT:8080}
|
||||
datasource:
|
||||
flow:
|
||||
server-addr: 192.168.100.136:8848
|
||||
server-addr: 127.0.0.1:8848
|
||||
dataId: ${spring.application.name}-flow-rules
|
||||
groupId: SENTINEL_GROUP
|
||||
rule-type: flow
|
||||
|
|
@ -34,10 +34,10 @@ seata:
|
|||
type: nacos
|
||||
nacos:
|
||||
namespace:
|
||||
serverAddr: 192.168.100.136:8848
|
||||
serverAddr: 127.0.0.1:8848
|
||||
group: SEATA_GROUP
|
||||
registry:
|
||||
type: nacos
|
||||
nacos:
|
||||
application: seata-server
|
||||
server-addr: 192.168.100.136:8848
|
||||
server-addr: 127.0.0.1:8848
|
||||
|
|
|
|||
|
|
@ -0,0 +1,4 @@
|
|||
jdbc.driverClass=com.mysql.cj.jdbc.Driver
|
||||
jdbc.connectionURL=jdbc:mysql://localhost:3306/test_crm?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
|
||||
jdbc.userId=root
|
||||
jdbc.password=122333zwz
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE generatorConfiguration
|
||||
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
|
||||
|
||||
<generatorConfiguration>
|
||||
<properties resource="generator.properties"/>
|
||||
<context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
|
||||
<property name="beginningDelimiter" value="`"/>
|
||||
<property name="endingDelimiter" value="`"/>
|
||||
<property name="javaFileEncoding" value="UTF-8"/>
|
||||
<!-- 为模型生成序列化方法-->
|
||||
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
|
||||
<!-- 为生成的Java模型创建一个toString方法 -->
|
||||
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
|
||||
<!--生成mapper.xml时覆盖原文件-->
|
||||
<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />
|
||||
<!--可以自定义生成model的代码注释-->
|
||||
<commentGenerator type="com.kakarote.crm.util.CommentGenerator">
|
||||
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
|
||||
<property name="suppressAllComments" value="true"/>
|
||||
<property name="suppressDate" value="true"/>
|
||||
<property name="addRemarkComments" value="true"/>
|
||||
</commentGenerator>
|
||||
<!--配置数据库连接-->
|
||||
<jdbcConnection driverClass="${jdbc.driverClass}"
|
||||
connectionURL="${jdbc.connectionURL}"
|
||||
userId="${jdbc.userId}"
|
||||
password="${jdbc.password}">
|
||||
<!--解决mysql驱动升级到8.0后不生成指定数据库代码的问题-->
|
||||
<property name="nullCatalogMeansCurrent" value="true" />
|
||||
</jdbcConnection>
|
||||
<!--指定生成model的路径-->
|
||||
<javaModelGenerator targetPackage="com.kakarote.crm.entity.PO" targetProject="src\main\java"/>
|
||||
<!--指定生成mapper.xml的路径-->
|
||||
<sqlMapGenerator targetPackage="com.kakarote.crm.mapper.xml" targetProject="src\main\java"/>
|
||||
<!--指定生成mapper接口的的路径-->
|
||||
<javaClientGenerator type="XMLMAPPER" targetPackage="com.kakarote.crm.mapper"
|
||||
targetProject="src\main\java"/>
|
||||
<!--生成全部表tableName设为%-->
|
||||
<table tableName="%" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
|
||||
enableSelectByExample="false" selectByExampleQueryId="false">
|
||||
|
||||
<property name="useActualColumnNames" value="false"/>
|
||||
<property name="constructorBased" value="false"/>
|
||||
<generatedKey column="id" sqlStatement="JDBC" identity="true"/>
|
||||
</table>
|
||||
|
||||
</context>
|
||||
</generatorConfiguration>
|
||||
|
|
@ -2,6 +2,13 @@ package com.kakarote.crm;
|
|||
|
||||
import com.kakarote.crm.entity.PO.*;
|
||||
import com.kakarote.crm.service.*;
|
||||
import com.kakarote.crm.util.AecUtils;
|
||||
import com.kakarote.crm.webService.config.TaxWebServiceConfig;
|
||||
import com.kakarote.crm.webService.util.WebServiceUtil;
|
||||
import com.kakarote.crm.webService.util.XmlService;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
|
@ -408,6 +415,69 @@ public class testQyjxfp {
|
|||
|
||||
|
||||
}
|
||||
@Getter
|
||||
@Setter
|
||||
class Params {
|
||||
String djxh;
|
||||
String fxscsjq;
|
||||
String fxscsjz;
|
||||
@Override
|
||||
public String toString() {
|
||||
return "{" +
|
||||
"djxh:'" + djxh + '\'' +
|
||||
", fxscsjq:'" + fxscsjq + '\'' +
|
||||
", fxscsjz:'" + fxscsjz + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
class Body {
|
||||
private String sid;
|
||||
private String params;
|
||||
|
||||
public String getSid() {
|
||||
return sid;
|
||||
}
|
||||
|
||||
public void setSid(String sid) {
|
||||
this.sid = sid;
|
||||
}
|
||||
|
||||
public String getParams() {
|
||||
return params;
|
||||
}
|
||||
|
||||
public void setParams(String params) {
|
||||
this.params = params;
|
||||
}
|
||||
}
|
||||
@Autowired
|
||||
private TaxWebServiceConfig config;
|
||||
@Test
|
||||
public void getTaxWebService() throws Exception {
|
||||
Body object = new Body();
|
||||
Params params = new Params();
|
||||
params.setDjxh("10113601000074228118");
|
||||
params.setFxscsjq("2023-01-01");
|
||||
params.setFxscsjz("2023-12-31");
|
||||
object.setSid("JXSW.DZSWJ.CSXT.QYTSFXMXCX");
|
||||
object.setParams(params.toString());
|
||||
String sid = object.getSid ();
|
||||
System.out.println("config:"+config.getEtaxServiceUrl());
|
||||
System.out.println("config:"+config.getAecEncryptKey());
|
||||
String requestXml = WebServiceUtil.createRequestXml (sid, object.getParams (), config);
|
||||
|
||||
System.out.println ("requestXml = " + requestXml);
|
||||
|
||||
String response = WebServiceUtil.getEtaxService (config).doService (sid, requestXml);
|
||||
|
||||
System.out.println ("response = " + response);
|
||||
|
||||
XmlService service = WebServiceUtil.getResponse (response);
|
||||
|
||||
String respJson = AecUtils.decrypt (service.getBody (), config.getAecEncryptKey ());
|
||||
|
||||
System.out.println ("respJson = " + respJson);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@ spring:
|
|||
pool:
|
||||
max-active: 300
|
||||
datasource:
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:47.99.60.88}:${DATASOURCE_PORT:3306}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3307}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
username: ${DATASOURCE_USERNAME:devuser}
|
||||
password: ${DATASOURCE_PASSWORD:ckly@9069&Uk}
|
||||
elasticsearch:
|
||||
rest:
|
||||
uris: 47.99.60.88:9200
|
||||
uris: 127.0.0.1:9200
|
||||
username:
|
||||
password:
|
||||
|
|
@ -8,6 +8,6 @@ spring:
|
|||
pool:
|
||||
max-active: 300
|
||||
datasource:
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3306}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3307}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
username: ${DATASOURCE_USERNAME:root}
|
||||
password: ${DATASOURCE_PASSWORD:password}
|
||||
|
|
@ -8,6 +8,6 @@ spring:
|
|||
pool:
|
||||
max-active: 300
|
||||
datasource:
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3306}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3307}/wk_crm_single?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
username: ${DATASOURCE_USERNAME:root}
|
||||
password: ${DATASOURCE_PASSWORD:password}
|
||||
|
|
@ -8,6 +8,6 @@ spring:
|
|||
pool:
|
||||
max-active: 300
|
||||
datasource:
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:47.99.60.88}:${DATASOURCE_PORT:3306}/nacos?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:127.0.0.1}:${DATASOURCE_PORT:3307}/nacos?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=Asia/Shanghai&useAffectedRows=true
|
||||
username: ${DATASOURCE_USERNAME:devuser}
|
||||
password: ${DATASOURCE_PASSWORD:ckly@9069&Uk}
|
||||
|
|
@ -51,7 +51,7 @@ crm:
|
|||
ignoreUrl:
|
||||
- /adminSuite/dataReceive
|
||||
- /crmCustomer/queryPageList
|
||||
- /openApi/crm/addCorporateSeas
|
||||
- //crm/addCorporateSeas
|
||||
upgradeFile:
|
||||
#升级文件地址
|
||||
url: D:/工具/version.json
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 66 KiB |
|
|
@ -1,574 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset=utf-8>
|
||||
<meta name=viewport content="width=device-width,initial-scale=1">
|
||||
<meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
|
||||
<title>悟空CRM</title>
|
||||
<script src=./static/client.js></script>
|
||||
<link rel="shortcut icon" href=./favicon.ico>
|
||||
<link href=./static/css/chunk-elementUI.5264af88.css rel=stylesheet>
|
||||
<link href=./static/css/chunk-libs.a43834e7.css rel=stylesheet>
|
||||
<link href=./static/css/app.90882411.css rel=stylesheet>
|
||||
</head>
|
||||
<body>
|
||||
<div id=app></div>
|
||||
<script>!function (c) {
|
||||
function n(n) {
|
||||
for (var h, k, f = n[0], b = n[1], d = n[2], t = 0, o = []; t < f.length; t++) k = f[t], e[k] && o.push(e[k][0]), e[k] = 0;
|
||||
for (h in b) Object.prototype.hasOwnProperty.call(b, h) && (c[h] = b[h]);
|
||||
for (r && r(n); o.length;) o.shift()();
|
||||
return a.push.apply(a, d || []), u()
|
||||
}
|
||||
|
||||
function u() {
|
||||
for (var c, n = 0; n < a.length; n++) {
|
||||
for (var u = a[n], h = !0, k = 1; k < u.length; k++) {
|
||||
var b = u[k];
|
||||
0 !== e[b] && (h = !1)
|
||||
}
|
||||
h && (a.splice(n--, 1), c = f(f.s = u[0]))
|
||||
}
|
||||
return c
|
||||
}
|
||||
|
||||
var h = {}, k = {runtime: 0}, e = {runtime: 0}, a = [];
|
||||
|
||||
function f(n) {
|
||||
if (h[n]) return h[n].exports;
|
||||
var u = h[n] = {i: n, l: !1, exports: {}};
|
||||
return c[n].call(u.exports, u, u.exports, f), u.l = !0, u.exports
|
||||
}
|
||||
|
||||
f.e = function (c) {
|
||||
var n = [];
|
||||
k[c] ? n.push(k[c]) : 0 !== k[c] && {
|
||||
"chunk-00c7": 1,
|
||||
"chunk-2188": 1,
|
||||
"chunk-cb6b": 1,
|
||||
"chunk-027a": 1,
|
||||
"chunk-66b5": 1,
|
||||
"chunk-02ac": 1,
|
||||
"chunk-03fc": 1,
|
||||
"chunk-068f": 1,
|
||||
"chunk-08ff": 1,
|
||||
"chunk-09de": 1,
|
||||
"chunk-0cb6": 1,
|
||||
"chunk-0f76": 1,
|
||||
"chunk-ed4e": 1,
|
||||
"chunk-1372": 1,
|
||||
"chunk-1820": 1,
|
||||
"chunk-186a": 1,
|
||||
"chunk-1943": 1,
|
||||
"chunk-1fa8": 1,
|
||||
"chunk-2325": 1,
|
||||
"chunk-2551": 1,
|
||||
"chunk-25b9": 1,
|
||||
"chunk-26e0": 1,
|
||||
"chunk-2c91": 1,
|
||||
"chunk-2d6b": 1,
|
||||
"chunk-3090": 1,
|
||||
"chunk-324a": 1,
|
||||
"chunk-326a": 1,
|
||||
"chunk-5160": 1,
|
||||
"chunk-419c": 1,
|
||||
"chunk-49f2": 1,
|
||||
"chunk-74ef": 1,
|
||||
"chunk-346a": 1,
|
||||
"chunk-b9f2": 1,
|
||||
"chunk-387d": 1,
|
||||
"chunk-3c5a": 1,
|
||||
"chunk-3c97": 1,
|
||||
"chunk-52fe": 1,
|
||||
"chunk-76a5": 1,
|
||||
"chunk-51e1": 1,
|
||||
"chunk-5caa": 1,
|
||||
"chunk-4300": 1,
|
||||
"chunk-a8f2": 1,
|
||||
"chunk-435c": 1,
|
||||
"chunk-40df": 1,
|
||||
"chunk-61e4": 1,
|
||||
"chunk-4483": 1,
|
||||
"chunk-0b2d": 1,
|
||||
"chunk-39be": 1,
|
||||
"chunk-4695": 1,
|
||||
"chunk-46f2": 1,
|
||||
"chunk-1901": 1,
|
||||
"chunk-73cb": 1,
|
||||
"chunk-0af9": 1,
|
||||
"chunk-0aff": 1,
|
||||
"chunk-270c": 1,
|
||||
"chunk-2f87": 1,
|
||||
"chunk-30c8": 1,
|
||||
"chunk-35ad": 1,
|
||||
"chunk-3a02": 1,
|
||||
"chunk-49c3": 1,
|
||||
"chunk-4dd3": 1,
|
||||
"chunk-6376": 1,
|
||||
"chunk-6f54": 1,
|
||||
"chunk-8f3b": 1,
|
||||
"chunk-a61a": 1,
|
||||
"chunk-c5bc": 1,
|
||||
"chunk-d1f5": 1,
|
||||
"chunk-ba99": 1,
|
||||
"chunk-2942": 1,
|
||||
"chunk-587e": 1,
|
||||
"chunk-5e63": 1,
|
||||
"chunk-629d": 1,
|
||||
"chunk-6859": 1,
|
||||
"chunk-6e72": 1,
|
||||
"chunk-459d": 1,
|
||||
"chunk-8a85": 1,
|
||||
"chunk-6f59": 1,
|
||||
"chunk-519f": 1,
|
||||
"chunk-cba6": 1,
|
||||
"chunk-0638": 1,
|
||||
"chunk-3605": 1,
|
||||
"chunk-232a": 1,
|
||||
"chunk-2636": 1,
|
||||
"chunk-4e75": 1,
|
||||
"chunk-533b": 1,
|
||||
"chunk-573b": 1,
|
||||
"chunk-633c": 1,
|
||||
"chunk-70c7": 1,
|
||||
"chunk-a4c0": 1,
|
||||
"chunk-e1c0": 1,
|
||||
"chunk-0977": 1,
|
||||
"chunk-2f24": 1,
|
||||
"chunk-64c6": 1,
|
||||
"chunk-7641": 1,
|
||||
"chunk-c2be": 1,
|
||||
"chunk-ce8d": 1,
|
||||
"chunk-5e27": 1,
|
||||
"chunk-7a35": 1,
|
||||
"chunk-9fb9": 1,
|
||||
"chunk-ab03": 1,
|
||||
"chunk-ab8e": 1,
|
||||
"chunk-f926": 1,
|
||||
"chunk-2338": 1,
|
||||
"chunk-6012": 1,
|
||||
"chunk-717f": 1,
|
||||
"chunk-7294": 1,
|
||||
"chunk-7946": 1,
|
||||
"chunk-5803": 1,
|
||||
"chunk-f396": 1,
|
||||
"chunk-51d2": 1,
|
||||
"chunk-0cdb": 1,
|
||||
"chunk-0f26": 1,
|
||||
"chunk-1306": 1,
|
||||
"chunk-64e7": 1,
|
||||
"chunk-3b0a": 1,
|
||||
"chunk-4e69": 1,
|
||||
"chunk-7ec8": 1,
|
||||
"chunk-7d45": 1,
|
||||
"chunk-7da3": 1,
|
||||
"chunk-7f6a": 1,
|
||||
"chunk-8f6d": 1,
|
||||
"chunk-9451": 1,
|
||||
"chunk-9550": 1,
|
||||
"chunk-9f69": 1,
|
||||
"chunk-a256": 1,
|
||||
"chunk-aa3f": 1,
|
||||
"chunk-b2b9": 1,
|
||||
"chunk-c0c4": 1,
|
||||
"chunk-cf98": 1,
|
||||
"chunk-d9b5": 1,
|
||||
"chunk-f43a": 1,
|
||||
"chunk-07de": 1,
|
||||
"chunk-660a": 1,
|
||||
"chunk-9e4a": 1,
|
||||
"chunk-0b36": 1,
|
||||
"chunk-4b55": 1,
|
||||
"chunk-e961": 1,
|
||||
"chunk-f764": 1,
|
||||
"chunk-7e5d": 1,
|
||||
"chunk-26c1": 1,
|
||||
"chunk-16ba": 1,
|
||||
"chunk-e9616": 1,
|
||||
"chunk-63a7": 1,
|
||||
"chunk-3d9d": 1,
|
||||
"chunk-e412": 1
|
||||
}[c] && n.push(k[c] = new Promise(function (n, u) {
|
||||
for (var h = "static/css/" + ({}[c] || c) + "." + {
|
||||
"chunk-00c7": "87e911d0",
|
||||
"chunk-2188": "6a4eada2",
|
||||
"chunk-cb6b": "81015ccf",
|
||||
"chunk-027a": "34a07892",
|
||||
"chunk-66b5": "f406e74f",
|
||||
"chunk-02ac": "5a0f51dc",
|
||||
"chunk-03fc": "9b85e6b8",
|
||||
"chunk-068f": "50f74a58",
|
||||
"chunk-08ff": "fe8eaad3",
|
||||
"chunk-09de": "e3aa0d23",
|
||||
"chunk-0cb6": "601b1e5a",
|
||||
"chunk-0f76": "9256b47f",
|
||||
"chunk-ed4e": "d0b43eda",
|
||||
"chunk-1372": "b29d6d16",
|
||||
"chunk-1820": "f4c6c16d",
|
||||
"chunk-186a": "06bc197a",
|
||||
"chunk-1943": "f2fc8376",
|
||||
"chunk-1fa8": "fa9f7c51",
|
||||
"chunk-2325": "bb624fe1",
|
||||
"chunk-2551": "26013d5e",
|
||||
"chunk-25b9": "87e7d9ae",
|
||||
"chunk-26e0": "c8602977",
|
||||
"chunk-2c91": "04b70769",
|
||||
"chunk-2d6b": "4b8c4d7f",
|
||||
"chunk-3090": "6cfa5bff",
|
||||
"chunk-324a": "38d77d71",
|
||||
"chunk-326a": "da804d12",
|
||||
"chunk-33b5": "31d6cfe0",
|
||||
"chunk-5160": "48dae377",
|
||||
"chunk-419c": "8105ab45",
|
||||
"chunk-49f2": "b38b5281",
|
||||
"chunk-74ef": "3ec945a7",
|
||||
"chunk-346a": "94b035e9",
|
||||
"chunk-b9f2": "4eac3b55",
|
||||
"chunk-387d": "da4f4f5f",
|
||||
"chunk-3c5a": "7ca47d59",
|
||||
"chunk-3c97": "c10e9799",
|
||||
"chunk-52fe": "f88a9ff4",
|
||||
"chunk-76a5": "38bdfbe2",
|
||||
"chunk-51e1": "bedd43a8",
|
||||
"chunk-5caa": "c709ff11",
|
||||
"chunk-4300": "1b48e1ce",
|
||||
"chunk-a8f2": "54674717",
|
||||
"chunk-435c": "1d5dd185",
|
||||
"chunk-40df": "93c36aa9",
|
||||
"chunk-61e4": "bf896499",
|
||||
"chunk-4483": "f909ba6f",
|
||||
"chunk-0b2d": "4f3235ae",
|
||||
"chunk-39be": "39ecc3de",
|
||||
"chunk-4695": "84c041ed",
|
||||
"chunk-46f2": "a0acfbf5",
|
||||
"chunk-1901": "b0d5c333",
|
||||
"chunk-73cb": "13285109",
|
||||
"chunk-0af9": "0ffe0ddc",
|
||||
"chunk-0aff": "ce78e025",
|
||||
"chunk-270c": "fbfea475",
|
||||
"chunk-2f87": "6607b7a7",
|
||||
"chunk-30c8": "671e1f81",
|
||||
"chunk-35ad": "b22c533c",
|
||||
"chunk-3a02": "1e59cf3a",
|
||||
"chunk-49c3": "0fed4869",
|
||||
"chunk-4dd3": "f8c18e64",
|
||||
"chunk-6376": "83bda978",
|
||||
"chunk-6f54": "02548f05",
|
||||
"chunk-8f3b": "dce808db",
|
||||
"chunk-a61a": "f6a24c38",
|
||||
"chunk-c5bc": "3ca1b256",
|
||||
"chunk-d1f5": "ce249be2",
|
||||
"chunk-ba99": "791e9769",
|
||||
"chunk-2942": "97583e3d",
|
||||
"chunk-587e": "e0132193",
|
||||
"chunk-5e63": "cb0cf121",
|
||||
"chunk-629d": "e6a319b4",
|
||||
"chunk-6859": "8d8609a3",
|
||||
"chunk-6e72": "f909ba6f",
|
||||
"chunk-459d": "ce498ae1",
|
||||
"chunk-8a85": "def599d8",
|
||||
"chunk-6f59": "f5425d78",
|
||||
"chunk-519f": "ff54e0f4",
|
||||
"chunk-753d": "31d6cfe0",
|
||||
MTm3: "31d6cfe0",
|
||||
"chunk-cba6": "55e5b403",
|
||||
"chunk-0638": "2b824051",
|
||||
"chunk-3605": "f909ba6f",
|
||||
"chunk-232a": "b2f6217d",
|
||||
"chunk-2636": "0fbcaa75",
|
||||
"chunk-4e75": "08fbba6e",
|
||||
"chunk-533b": "3aa8c362",
|
||||
"chunk-573b": "b379c0bd",
|
||||
"chunk-633c": "d9f5b380",
|
||||
"chunk-70c7": "e3bb2ca0",
|
||||
"chunk-a4c0": "7f50e84a",
|
||||
"chunk-e1c0": "4f3cf49d",
|
||||
"chunk-0977": "d97189d8",
|
||||
"chunk-2f24": "11af8ffe",
|
||||
"chunk-64c6": "35c3a6f2",
|
||||
"chunk-7641": "3ed0f5db",
|
||||
"chunk-c2be": "d01993da",
|
||||
"chunk-ce8d": "3d0729c2",
|
||||
"chunk-5e27": "2cee2c19",
|
||||
"chunk-7a35": "ed876bd6",
|
||||
"chunk-9fb9": "6342bfdf",
|
||||
"chunk-ab03": "15a408c8",
|
||||
"chunk-ab8e": "934814db",
|
||||
"chunk-f926": "0b0be299",
|
||||
"chunk-2338": "7d2c228d",
|
||||
"chunk-6012": "f9252835",
|
||||
"chunk-717f": "6f721f4a",
|
||||
"chunk-7294": "5ae038e3",
|
||||
"chunk-7946": "1bfd42ac",
|
||||
"chunk-5803": "2ba1f892",
|
||||
"chunk-f396": "bae9e09d",
|
||||
"chunk-51d2": "bb7204b0",
|
||||
"chunk-0cdb": "6af8d55c",
|
||||
"chunk-0f26": "c3e3c1d7",
|
||||
"chunk-1306": "a1a42e43",
|
||||
"chunk-64e7": "2ba30166",
|
||||
"chunk-3b0a": "187a5bf0",
|
||||
"chunk-4e69": "91770475",
|
||||
"chunk-7ec8": "355232b2",
|
||||
"chunk-7d45": "11e4c649",
|
||||
"chunk-7da3": "50b8d02c",
|
||||
"chunk-7f6a": "89197c47",
|
||||
"chunk-8f6d": "a63a02b0",
|
||||
"chunk-9451": "63615e14",
|
||||
"chunk-9550": "7ff268c5",
|
||||
"chunk-9f69": "a376338b",
|
||||
"chunk-a256": "54a6226f",
|
||||
"chunk-aa3f": "88b93c84",
|
||||
"chunk-b2b9": "bac6481d",
|
||||
"chunk-c0c4": "267da21a",
|
||||
"chunk-cf98": "090f2def",
|
||||
"chunk-d9b5": "43a564c1",
|
||||
"chunk-f43a": "b97ff00b",
|
||||
fnnb: "31d6cfe0",
|
||||
"chunk-07de": "a3c1177c",
|
||||
"chunk-660a": "242ae2d0",
|
||||
"chunk-9e4a": "96313ff8",
|
||||
"chunk-0b36": "b81fbdc5",
|
||||
"chunk-4b55": "04848a98",
|
||||
"chunk-e961": "75698935",
|
||||
"chunk-f764": "7e8b8a03",
|
||||
"chunk-7e5d": "5ad8b59b",
|
||||
"chunk-26c1": "67e5d6e3",
|
||||
"chunk-16ba": "e3df73cb",
|
||||
"chunk-e9616": "75698935",
|
||||
"chunk-63a7": "179deeb1",
|
||||
"chunk-3d9d": "6ce37377",
|
||||
"chunk-e412": "f1164a90"
|
||||
}[c] + ".css", k = f.p + h, e = document.getElementsByTagName("link"), a = 0; a < e.length; a++) {
|
||||
var b = (t = e[a]).getAttribute("data-href") || t.getAttribute("href");
|
||||
if ("stylesheet" === t.rel && (b === h || b === k)) return n()
|
||||
}
|
||||
var d = document.getElementsByTagName("style");
|
||||
for (a = 0; a < d.length; a++) {
|
||||
var t;
|
||||
if ((b = (t = d[a]).getAttribute("data-href")) === h || b === k) return n()
|
||||
}
|
||||
var r = document.createElement("link");
|
||||
r.rel = "stylesheet", r.type = "text/css", r.onload = n, r.onerror = function (n) {
|
||||
var h = n && n.target && n.target.src || k,
|
||||
e = new Error("Loading CSS chunk " + c + " failed.\n(" + h + ")");
|
||||
e.request = h, u(e)
|
||||
}, r.href = k, document.getElementsByTagName("head")[0].appendChild(r)
|
||||
}).then(function () {
|
||||
k[c] = 0
|
||||
}));
|
||||
var u = e[c];
|
||||
if (0 !== u) if (u) n.push(u[2]); else {
|
||||
var h = new Promise(function (n, h) {
|
||||
u = e[c] = [n, h]
|
||||
});
|
||||
n.push(u[2] = h);
|
||||
var a, b = document.getElementsByTagName("head")[0], d = document.createElement("script");
|
||||
d.charset = "utf-8", d.timeout = 120, f.nc && d.setAttribute("nonce", f.nc), d.src = function (c) {
|
||||
return f.p + "static/js/" + ({}[c] || c) + "." + {
|
||||
"chunk-00c7": "f4bc9ffa",
|
||||
"chunk-2188": "80d78afe",
|
||||
"chunk-cb6b": "a2b3f2b6",
|
||||
"chunk-027a": "43bda39d",
|
||||
"chunk-66b5": "fbaa06b0",
|
||||
"chunk-02ac": "78dcbe09",
|
||||
"chunk-03fc": "182e1d64",
|
||||
"chunk-068f": "5fa0be87",
|
||||
"chunk-08ff": "ef4ae389",
|
||||
"chunk-09de": "082602f6",
|
||||
"chunk-0cb6": "7e485c35",
|
||||
"chunk-0f76": "84ee3177",
|
||||
"chunk-ed4e": "955b662b",
|
||||
"chunk-1372": "4ce246a7",
|
||||
"chunk-1820": "a4d09dc4",
|
||||
"chunk-186a": "19ceca5e",
|
||||
"chunk-1943": "e2c0f719",
|
||||
"chunk-1fa8": "4e979848",
|
||||
"chunk-2325": "09d9b68e",
|
||||
"chunk-2551": "0b4685df",
|
||||
"chunk-25b9": "b76749f5",
|
||||
"chunk-26e0": "dfba0b1f",
|
||||
"chunk-2c91": "b3dbb515",
|
||||
"chunk-2d6b": "ff453c97",
|
||||
"chunk-3090": "ab142759",
|
||||
"chunk-324a": "7132f009",
|
||||
"chunk-326a": "e36205b0",
|
||||
"chunk-33b5": "3f8a0c1d",
|
||||
"chunk-5160": "d2c2cf27",
|
||||
"chunk-419c": "d02b466a",
|
||||
"chunk-49f2": "d70afc3d",
|
||||
"chunk-74ef": "8fc73e70",
|
||||
"chunk-346a": "b1bf77cc",
|
||||
"chunk-b9f2": "a02fe4df",
|
||||
"chunk-387d": "d04cd2fa",
|
||||
"chunk-3c5a": "02626b65",
|
||||
"chunk-3c97": "a154de9c",
|
||||
"chunk-52fe": "7a24f138",
|
||||
"chunk-76a5": "12c6be7a",
|
||||
"chunk-51e1": "7b63a2d8",
|
||||
"chunk-5caa": "ca87e5b6",
|
||||
"chunk-4300": "aa1a6ade",
|
||||
"chunk-a8f2": "8117dee3",
|
||||
"chunk-435c": "ebe943e8",
|
||||
"chunk-40df": "9f100fa5",
|
||||
"chunk-61e4": "49d524e7",
|
||||
"chunk-4483": "ae72b6c9",
|
||||
"chunk-0b2d": "bc1ff937",
|
||||
"chunk-39be": "0117c384",
|
||||
"chunk-4695": "36cc9345",
|
||||
"chunk-46f2": "5232b953",
|
||||
"chunk-1901": "fcc384a7",
|
||||
"chunk-73cb": "e7fb9274",
|
||||
"chunk-0af9": "6962981e",
|
||||
"chunk-0aff": "4612829a",
|
||||
"chunk-270c": "04c36a9c",
|
||||
"chunk-2f87": "1263f4fa",
|
||||
"chunk-30c8": "c0bc96f4",
|
||||
"chunk-35ad": "15c2df5a",
|
||||
"chunk-3a02": "046291f4",
|
||||
"chunk-49c3": "4b9428af",
|
||||
"chunk-4dd3": "c2a7d1a9",
|
||||
"chunk-6376": "34016f71",
|
||||
"chunk-6f54": "f7ff771e",
|
||||
"chunk-8f3b": "755b6b4d",
|
||||
"chunk-a61a": "8ac7fd4c",
|
||||
"chunk-c5bc": "f33c42bc",
|
||||
"chunk-d1f5": "90513e70",
|
||||
"chunk-ba99": "8cfc9676",
|
||||
"chunk-2942": "015a2e6a",
|
||||
"chunk-587e": "2e02af09",
|
||||
"chunk-5e63": "0e699251",
|
||||
"chunk-629d": "892292f9",
|
||||
"chunk-6859": "95a5882b",
|
||||
"chunk-6e72": "2c4c0cce",
|
||||
"chunk-459d": "acc1ed4a",
|
||||
"chunk-8a85": "79c66bf1",
|
||||
"chunk-6f59": "471daf37",
|
||||
"chunk-519f": "f03bbbd9",
|
||||
"chunk-753d": "357bb5b4",
|
||||
MTm3: "fa93eb96",
|
||||
"chunk-cba6": "c9d68f82",
|
||||
"chunk-0638": "29e51161",
|
||||
"chunk-3605": "dae5ab8c",
|
||||
"chunk-232a": "8f0e450a",
|
||||
"chunk-2636": "2f87371a",
|
||||
"chunk-4e75": "a50bc45b",
|
||||
"chunk-533b": "538d4b98",
|
||||
"chunk-573b": "24e1f64a",
|
||||
"chunk-633c": "8a61cde3",
|
||||
"chunk-70c7": "c66be922",
|
||||
"chunk-a4c0": "333c7678",
|
||||
"chunk-e1c0": "6095ae86",
|
||||
"chunk-0977": "ceb7281d",
|
||||
"chunk-2f24": "7b94d6e9",
|
||||
"chunk-64c6": "1ef1a569",
|
||||
"chunk-7641": "6238e6b4",
|
||||
"chunk-c2be": "6bcb9d1b",
|
||||
"chunk-ce8d": "31777503",
|
||||
"chunk-5e27": "9651e5aa",
|
||||
"chunk-7a35": "3a31d55a",
|
||||
"chunk-9fb9": "f78c7d95",
|
||||
"chunk-ab03": "098d04da",
|
||||
"chunk-ab8e": "893a5208",
|
||||
"chunk-f926": "df19a17d",
|
||||
"chunk-2338": "cbb7872e",
|
||||
"chunk-6012": "95f76858",
|
||||
"chunk-717f": "7081f019",
|
||||
"chunk-7294": "98b2da37",
|
||||
"chunk-7946": "cb54cb4e",
|
||||
"chunk-5803": "15a6810f",
|
||||
"chunk-f396": "229ca50a",
|
||||
"chunk-51d2": "3b610de8",
|
||||
"chunk-0cdb": "b7f2abab",
|
||||
"chunk-0f26": "24281cfe",
|
||||
"chunk-1306": "ab916581",
|
||||
"chunk-64e7": "15e818e8",
|
||||
"chunk-3b0a": "a2c385fd",
|
||||
"chunk-4e69": "4d97d2f2",
|
||||
"chunk-7ec8": "4472084c",
|
||||
"chunk-7d45": "67adbcc2",
|
||||
"chunk-7da3": "d5503b24",
|
||||
"chunk-7f6a": "d48033e0",
|
||||
"chunk-8f6d": "931bbbac",
|
||||
"chunk-9451": "c19ddd25",
|
||||
"chunk-9550": "bc795f22",
|
||||
"chunk-9f69": "73f41b50",
|
||||
"chunk-a256": "3074fb57",
|
||||
"chunk-aa3f": "8e236e2c",
|
||||
"chunk-b2b9": "338de19e",
|
||||
"chunk-c0c4": "14cc8fc4",
|
||||
"chunk-cf98": "afe9b484",
|
||||
"chunk-d9b5": "c402687d",
|
||||
"chunk-f43a": "1f3a623f",
|
||||
fnnb: "2a9e9de9",
|
||||
"chunk-07de": "5bec708d",
|
||||
"chunk-660a": "5813bcda",
|
||||
"chunk-9e4a": "352af8e3",
|
||||
"chunk-0b36": "4ba486ae",
|
||||
"chunk-4b55": "09c57f00",
|
||||
"chunk-e961": "e79bad4d",
|
||||
"chunk-f764": "11de8879",
|
||||
"chunk-7e5d": "339e768d",
|
||||
"chunk-26c1": "64e39c78",
|
||||
"chunk-16ba": "a2834197",
|
||||
"chunk-e9616": "4d8bdeec",
|
||||
"chunk-63a7": "1bcfbeb2",
|
||||
"chunk-3d9d": "fa980996",
|
||||
"chunk-e412": "65c04ced"
|
||||
}[c] + ".js"
|
||||
}(c), a = function (n) {
|
||||
d.onerror = d.onload = null, clearTimeout(t);
|
||||
var u = e[c];
|
||||
if (0 !== u) {
|
||||
if (u) {
|
||||
var h = n && ("load" === n.type ? "missing" : n.type), k = n && n.target && n.target.src,
|
||||
a = new Error("Loading chunk " + c + " failed.\n(" + h + ": " + k + ")");
|
||||
a.type = h, a.request = k, u[1](a)
|
||||
}
|
||||
e[c] = void 0
|
||||
}
|
||||
};
|
||||
var t = setTimeout(function () {
|
||||
a({type: "timeout", target: d})
|
||||
}, 12e4);
|
||||
d.onerror = d.onload = a, b.appendChild(d)
|
||||
}
|
||||
return Promise.all(n)
|
||||
}, f.m = c, f.c = h, f.d = function (c, n, u) {
|
||||
f.o(c, n) || Object.defineProperty(c, n, {enumerable: !0, get: u})
|
||||
}, f.r = function (c) {
|
||||
"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(c, Symbol.toStringTag, {value: "Module"}), Object.defineProperty(c, "__esModule", {value: !0})
|
||||
}, f.t = function (c, n) {
|
||||
if (1 & n && (c = f(c)), 8 & n) return c;
|
||||
if (4 & n && "object" == typeof c && c && c.__esModule) return c;
|
||||
var u = Object.create(null);
|
||||
if (f.r(u), Object.defineProperty(u, "default", {
|
||||
enumerable: !0,
|
||||
value: c
|
||||
}), 2 & n && "string" != typeof c) for (var h in c) f.d(u, h, function (n) {
|
||||
return c[n]
|
||||
}.bind(null, h));
|
||||
return u
|
||||
}, f.n = function (c) {
|
||||
var n = c && c.__esModule ? function () {
|
||||
return c.default
|
||||
} : function () {
|
||||
return c
|
||||
};
|
||||
return f.d(n, "a", n), n
|
||||
}, f.o = function (c, n) {
|
||||
return Object.prototype.hasOwnProperty.call(c, n)
|
||||
}, f.p = "./", f.oe = function (c) {
|
||||
throw c
|
||||
};
|
||||
var b = window.webpackJsonp = window.webpackJsonp || [], d = b.push.bind(b);
|
||||
b.push = n, b = b.slice();
|
||||
for (var t = 0; t < b.length; t++) n(b[t]);
|
||||
var r = d;
|
||||
u()
|
||||
}([]);</script>
|
||||
<script src=./static/js/chunk-elementUI.ef935fa1.js></script>
|
||||
<script src=./static/js/chunk-libs.d3b42b4d.js></script>
|
||||
<script src=./static/js/app.154de1c9.js></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,100 +0,0 @@
|
|||
!(function () {
|
||||
var Sys = {};
|
||||
var ua = navigator.userAgent.toLowerCase();
|
||||
|
||||
var regMap = {
|
||||
msie: '/msie ([\\d.]+)/',
|
||||
firefox: '/firefox\\/([\\d.]+)/',
|
||||
chrome: '/chrome\\/([\\d.]+)/',
|
||||
opera: '/opera.([\\d.]+)/',
|
||||
safari: '/version\\/([\\d.]+).*safari/'
|
||||
};
|
||||
|
||||
var o;
|
||||
if (ua.match(eval(regMap.msie))) {
|
||||
o = ua.match(eval(regMap.msie));
|
||||
Sys = {
|
||||
appName: 'IE',
|
||||
version: o[1]
|
||||
}
|
||||
} else if (ua.match(eval(regMap.firefox))) {
|
||||
o = ua.match(eval(regMap.firefox));
|
||||
Sys = {
|
||||
appName: 'Firefox',
|
||||
version: o[1]
|
||||
}
|
||||
} else if (ua.match(eval(regMap.chrome))) {
|
||||
o = ua.match(eval(regMap.chrome));
|
||||
Sys = {
|
||||
appName: 'Chrome',
|
||||
version: o[1]
|
||||
}
|
||||
} else if (ua.match(eval(regMap.opera))) {
|
||||
o = ua.match(eval(regMap.opera));
|
||||
Sys = {
|
||||
appName: 'Opera',
|
||||
version: o[1]
|
||||
}
|
||||
} else if (ua.match(eval(regMap.safari))) {
|
||||
o = ua.match(eval(regMap.safari));
|
||||
Sys = {
|
||||
appName: 'Safari',
|
||||
version: o[1]
|
||||
}
|
||||
} else if (ua.indexOf('edge')) {
|
||||
Sys = {
|
||||
appName: 'Edge'
|
||||
}
|
||||
} else {
|
||||
if (navigator.appName === 'Microsoft Internet Explorer') {
|
||||
Sys = {
|
||||
appName: 'IE',
|
||||
version: '6.0'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
window.onload = function() {
|
||||
var n = document.createElement('div')
|
||||
n.style.position = 'fixed'
|
||||
n.style.bottom = '2px'
|
||||
n.style.left = '0'
|
||||
n.style.right = '0'
|
||||
n.style.textAlign = 'center'
|
||||
n.style.fontSize = '12px'
|
||||
n.style.color = '#999'
|
||||
n.style.zIndex = 1
|
||||
|
||||
var i = document.createElement('img')
|
||||
i.style.width = '14px'
|
||||
i.style.verticalAlign = 'bottom'
|
||||
i.style.marginRight = '5px'
|
||||
|
||||
var img = new Image()
|
||||
img.onload = function() {
|
||||
var canvas = document.createElement('canvas')
|
||||
var ctx = canvas.getContext('2d')
|
||||
|
||||
canvas.height = img.naturalHeight
|
||||
canvas.width = img.naturalWidth
|
||||
ctx.drawImage(img, 0, 0)
|
||||
|
||||
var uri = canvas.toDataURL('image/png')
|
||||
i.src = uri
|
||||
n.appendChild(i)
|
||||
var ti = ''
|
||||
var tis = [80, 111, 119, 101, 114, 32, 98, 121, 32]
|
||||
tis.forEach(c => {
|
||||
ti = ti + String.fromCharCode(c)
|
||||
})
|
||||
var t = document.createTextNode(ti + decodeURI('%E6%82%9F%E7%A9%BA'))
|
||||
n.appendChild(t)
|
||||
document.body.appendChild(n)
|
||||
}
|
||||
img.src = 'static/img/logo.png'
|
||||
}
|
||||
|
||||
if (Sys.appName === 'IE' && Number(Sys.version) < 10) {
|
||||
window.location.href = './static/index.html'
|
||||
}
|
||||
})();
|
||||
|
|
@ -1 +0,0 @@
|
|||
!(function(){var Sys={};var ua=navigator.userAgent.toLowerCase();var regMap={msie:"/msie ([\\d.]+)/",firefox:"/firefox\\/([\\d.]+)/",chrome:"/chrome\\/([\\d.]+)/",opera:"/opera.([\\d.]+)/",safari:"/version\\/([\\d.]+).*safari/"};var o;if(ua.match(eval(regMap.msie))){o=ua.match(eval(regMap.msie));Sys={appName:"IE",version:o[1]}}else{if(ua.match(eval(regMap.firefox))){o=ua.match(eval(regMap.firefox));Sys={appName:"Firefox",version:o[1]}}else{if(ua.match(eval(regMap.chrome))){o=ua.match(eval(regMap.chrome));Sys={appName:"Chrome",version:o[1]}}else{if(ua.match(eval(regMap.opera))){o=ua.match(eval(regMap.opera));Sys={appName:"Opera",version:o[1]}}else{if(ua.match(eval(regMap.safari))){o=ua.match(eval(regMap.safari));Sys={appName:"Safari",version:o[1]}}else{if(ua.indexOf("edge")){Sys={appName:"Edge"}}else{if(navigator.appName==="Microsoft Internet Explorer"){Sys={appName:"IE",version:"6.0"}}}}}}}}if(Sys.appName==="IE"&&Number(Sys.version)<11){window.location.href="http://localhost:10000"}})();
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue