Commit 8b1793b7 authored by 陈家荣's avatar 陈家荣

kolon初始化 数据同步

parent c7c025b1
package com.hdp.pi.api.kolon;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.hdp.pi.common.MediaType;
import com.hdp.pi.domain.baseservice.GlobalVariable;
import com.hdp.pi.dto.DTO;
import com.hdp.pi.security.controller.JWTSecurityController;
import com.hdp.pi.service.baseservice.GlobalVariableService;
import com.hdp.pi.service.kolon.KolonMemberService;
@Controller
@RequestMapping("/v1.0/internal/admin/kolon")
public class KolonMemberController extends JWTSecurityController{
SimpleDateFormat formatter = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Autowired
private KolonMemberService kolonMemberService;
@Autowired
private GlobalVariableService globalVariableService;
@Value("${kolon.property.businessCode}")
private String businessCode;
@Value("${kolon.property.variableTypeName}")
private String variableTypeName;
@Value("${kolon.property.variableCode}")
private String variableCode;
/**
* 同步数据到本地数据库
* @param req
* @return
*/
@RequestMapping(value = "/syncData", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8)
public @ResponseBody String syncData(HttpServletRequest req) {
DTO dto = DTO.newDTO();
try {
kolonMemberService.syncData();
return dto.toJson();
} catch (Exception e) {
e.printStackTrace();
dto.errMsg = "error";
dto.errCode = -1;
return dto.toJson();
}
}
/**
* 把本地数据发送到FTP服务器
* @param req
* @return
*/
@RequestMapping(value = "/sendData", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8)
public @ResponseBody String sendData(HttpServletRequest req,
@RequestParam(value = "time",required = false) String time) {
DTO dto = DTO.newDTO();
try {
String lastSendTime = null;
if(time != null){
lastSendTime = time;
}else{
lastSendTime = globalVariableService.findVariableValue(businessCode, variableTypeName, variableCode);
if(lastSendTime == null){
lastSendTime = dateFormat.format(new Date());
}
}
Date newLastSendTime = kolonMemberService.sendData(formatter.parse(lastSendTime));
//更新时间
GlobalVariable globalVariable = globalVariableService.findVariable(businessCode, variableTypeName, variableCode);
globalVariable.strVariableValue = dateFormat.format(newLastSendTime);
globalVariableService.templateUpdate(globalVariable);
return dto.toJson();
} catch (Exception e) {
e.printStackTrace();
dto.errMsg = "error";
dto.errCode = -1;
return dto.toJson();
}
}
/**
* 同步数据并把本地数据发送到FTP服务器
* @param req
* @return
*/
@RequestMapping(value = "/syncAndSendData", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8)
public @ResponseBody String syncAndSendData(HttpServletRequest req,
@RequestParam(value = "time",required = false) String time) {
DTO dto = DTO.newDTO();
try {
kolonMemberService.syncData();
String lastSendTime = null;
if(time != null){
lastSendTime = time;
}else{
lastSendTime = globalVariableService.findVariableValue(businessCode, variableTypeName, variableCode);
if(lastSendTime == null){
lastSendTime = dateFormat.format(new Date());
}
}
Date newLastSendTime = kolonMemberService.sendData(formatter.parse(lastSendTime));
//更新时间
GlobalVariable globalVariable = globalVariableService.findVariable(businessCode, variableTypeName, variableCode);
globalVariable.strVariableValue = dateFormat.format(newLastSendTime);
globalVariableService.templateUpdate(globalVariable);
return dto.toJson();
} catch (Exception e) {
e.printStackTrace();
dto.errMsg = "error";
dto.errCode = -1;
return dto.toJson();
}
}
}
package com.hdp.pi.config.kolon;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@ConditionalOnProperty(value = "asConsumer")
@Configuration
@ImportResource(value = { "classpath:META-INF/spring/kolon-dubbo-consumer.xml" })
@PropertySource({ "classpath:kolon.${mode}.properties","classpath:kolon.properties" })
@Component("kolonDubboServiceConsumer")
public class DubboServiceConsumer {
}
package com.hdp.pi.config.kolon;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
import org.springframework.stereotype.Component;
@ConditionalOnProperty(value = "asProvider")
@Configuration
@ImportResource(value = { "classpath:META-INF/spring/kolon-dubbo-provider.xml" })
@Component("kolonDubboServiceProvider")
public class DubboServiceProvider {
}
package com.hdp.pi.domain.kolon;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* kolon会员表
*/
@Entity
@Table(name = "pi_kolon_member")
public class KolonMember implements Serializable {
private static final long serialVersionUID = -1993113660012534693L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long id;
@Column(name = "cs_no", nullable = false)
public Long csNo;
@Column(name = "phone", nullable = true)
public String phone;
@Column(name = "last_name", nullable = true)
public String lastName;
@Column(name = "first_name", nullable = true)
public String firstName;
@Column(name = "email", nullable = true)
public String email;
@Column(name = "wechat_last_name", nullable = true)
public String wechatLastName;
@Column(name = "wechat_first_name", nullable = true)
public String wechatFirstName;
/**
* 1.钻石会员 2.白金会员 3. 金卡会员 4.银卡会员 5. 绿卡会员
*/
@Column(name = "status", nullable = true)
public Integer status;
@Column(name = "bonus", nullable = true)
public Integer bonus;
/**
* 1.First time buyer 2.Active 3. Defecting 4.Inactive
*/
@Column(name = "lifecycle", nullable = true)
public Integer lifecycle;
/**
* 1.现存顾客 2.潜在顾客
*/
@Column(name = "customer_type", nullable = true)
public Integer customerType;
@Column(name = "last_purchase_date", nullable = true)
public Date lastPurchaseDate;
/**
* pi_member ID
*/
@Column(name = "mid", nullable = true)
public Long mid;
/**
* 1 来源PI+, 2 来源Emarsys
*/
@Column(name = "data_source", nullable = true)
public Integer dataSource;
/**
* 创建时间
*/
@Column(name = "join_time", nullable = true)
public Date joinTime;
/**
* 更新时间
*/
@Column(name = "update_time", nullable = true)
public Date updateTime;
}
package com.hdp.pi.dto.kolon;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
public class KolonMemberDTO implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
public Long csNo;
public String phone;
public String lastName;
public String firstName;
public String email;
public Integer status;
public Integer bonus;
public Integer lifecycle;
public Integer customerType;
public Date lastPurchaseDate;
public String wechatLastName;
public String wechatFirstName;
public KolonMemberDTO(String[] s) {
super();
this.csNo = Long.valueOf(s[0]);
this.lastName = s[1];
this.firstName = s[2];
this.phone = s[3];
this.email = s[4];
this.status = Integer.valueOf(s[5]);
this.bonus = Integer.valueOf(s[6]);
this.lifecycle = Integer.valueOf(s[7]);
this.customerType = Integer.valueOf(s[8]);
LocalDate dateToConvert = LocalDate.parse(s[9]);
Date convertToDate =
Date.from(dateToConvert.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
this.lastPurchaseDate = convertToDate;
this.wechatLastName= this.lastName;
this.wechatFirstName= this.firstName;
}
}
/**
*
*/
package com.hdp.pi.repository.kolon;
import java.util.Date;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
import com.hdp.pi.domain.kolon.KolonMember;
/**
* @author yangyw
*
*/
@Repository
public interface KolonMemberRepository extends JpaRepository<KolonMember, Long>, JpaSpecificationExecutor<KolonMember> {
KolonMember findFirstByCsNo(Long csNo);
List<KolonMember> findByUpdateTimeGreaterThan(Date updateTime);
/**
* 查找更新的
* @param dataSource
* @param updateTime
* @return
*/
List<KolonMember> findByDataSourceAndUpdateTimeGreaterThan(Integer dataSource, Date updateTime);
/**
* 查找新注册的
* @param dataSource
* @param joinTime
* @return
*/
List<KolonMember> findByDataSourceAndJoinTimeGreaterThan(Integer dataSource, Date joinTime);
/**
* 查找
* @param joinTime
* @param updateTime
* @return
*/
List<KolonMember> findByJoinTimeGreaterThanOrUpdateTimeGreaterThan(Date joinTime, Date updateTime);
}
package com.hdp.pi.service.kolon;
public interface FtpService {
}
/**
*
*/
package com.hdp.pi.service.kolon;
import org.springframework.beans.factory.annotation.Value;
/**
* @author yangyw
*
*/
public class FtpServiceImpl implements FtpService {
@Value("${kolon.property.ftp.server}")
private String ftpServer;
@Value("${kolon.property.ftp.port}")
private Integer ftpPort;
@Value("${kolon.property.ftp.userName}")
private String ftpUserName;
@Value("${kolon.property.ftp.password}")
private String ftpPassword;
@Value("${kolon.property.ftp.splitFlag}")
private String ftpSplitFlag;
@Value("${kolon.property.ftp.fileName}")
private String ftpFileName;
}
package com.hdp.pi.service.kolon;
import java.util.Date;
import java.util.List;
import com.hdp.pi.domain.kolon.KolonMember;
public interface KolonMemberService {
KolonMember findOneByCsNo(Long csNo);
void save(KolonMember kolonMember);
/**
* 查找新注册的
* @return
*/
List<KolonMember> findByDataSourceAndUpdateTimeGreaterThan(Integer dataSource, Date updateTime);
/**
* 查找更新时间在updateTime之后的数据
* @param updateTime
* @return
*/
List<KolonMember> findByUpdateTimeGreaterThan(Date updateTime);
/**
* 对比数据
* @param s
*/
void matchData(String[] s);
/**
* 同步数据
*/
void syncData();
/**
* 生成文件并发送到FTP服务器,返回最后更新的时间
* @param time
* @return
*/
Date sendData(Date time);
}
/**
*
*/
package com.hdp.pi.service.kolon;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import au.com.bytecode.opencsv.CSVWriter;
import com.hdp.pi.domain.kolon.KolonMember;
import com.hdp.pi.dto.kolon.KolonMemberDTO;
import com.hdp.pi.repository.kolon.KolonMemberRepository;
import com.hdp.pi.utils.kolon.FtpUtil;
import com.hdp.pi.utils.kolon.Util;
/**
* @author yangyw
*
*/
// @Transactional(readOnly = true)
public class KolonMemberServiceImpl implements KolonMemberService {
// private static final Logger logger = LoggerFactory.getLogger(KolonMemberServiceImpl.class);
@Autowired
private FtpUtil ftpUtil;
@Autowired
private KolonMemberRepository kolonMemberRepository;
@Override
public KolonMember findOneByCsNo(Long csNo) {
return kolonMemberRepository.findFirstByCsNo(csNo);
}
@Override
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public void save(KolonMember kolonMember) {
kolonMemberRepository.save(kolonMember);
}
@Override
public List<KolonMember> findByUpdateTimeGreaterThan(Date updateTime) {
return kolonMemberRepository.findByUpdateTimeGreaterThan(updateTime);
}
@Override
public List<KolonMember> findByDataSourceAndUpdateTimeGreaterThan(
Integer dataSource, Date updateTime) {
return kolonMemberRepository.findByDataSourceAndUpdateTimeGreaterThan(
dataSource, updateTime);
}
@Override
public void matchData(String[] s) {
Long csNo = Long.valueOf(s[0]);
KolonMember kolonMember = this.findOneByCsNo(csNo);
KolonMemberDTO kolonMemberDTO = new KolonMemberDTO(s);
if (kolonMember == null) { // 插入数据
kolonMember = new KolonMember();
kolonMember.csNo = csNo;
kolonMember.phone = kolonMemberDTO.phone;
kolonMember.lastName = kolonMemberDTO.lastName;
kolonMember.firstName = kolonMemberDTO.firstName;
kolonMember.email = kolonMemberDTO.email;
kolonMember.status = kolonMemberDTO.status;
kolonMember.bonus = kolonMemberDTO.bonus;
kolonMember.lifecycle = kolonMemberDTO.lifecycle;
kolonMember.customerType = kolonMemberDTO.customerType;
kolonMember.lastPurchaseDate = kolonMemberDTO.lastPurchaseDate;
kolonMember.dataSource = 1;
kolonMember.joinTime = new Date();
kolonMember.updateTime = new Date();
this.save(kolonMember);
} else { // 更新
boolean flag = false;
if (!Util.isNotNull(kolonMember.email)
|| !kolonMember.email.endsWith(kolonMemberDTO.email)) {
kolonMember.email = kolonMemberDTO.email;
flag = true;
}
if (!Util.isNotNull(kolonMember.wechatFirstName)
|| !kolonMember.wechatFirstName
.endsWith(kolonMemberDTO.firstName)) {
kolonMember.wechatFirstName = kolonMemberDTO.firstName;
flag = true;
}
if (!Util.isNotNull(kolonMember.wechatLastName)
|| !kolonMember.wechatLastName
.endsWith(kolonMemberDTO.lastName)) {
kolonMember.wechatLastName = kolonMemberDTO.lastName;
flag = true;
}
if (flag) {
kolonMember.updateTime = new Date();
this.save(kolonMember);
}
}
}
@Override
public void syncData() {
List<String[]> list = ftpUtil.readCSVFile();
if (list != null) {
boolean firstRow = true;
for (String[] row : list) {
if (firstRow) {
firstRow = false;
} else {
this.matchData(row);
}
}
}
ftpUtil.moveFile();
}
@Override
public Date sendData(Date time) {
Date lastSendDate = time;
//获取记录
List<KolonMember> kolonMembers = kolonMemberRepository.findByJoinTimeGreaterThanOrUpdateTimeGreaterThan(time, time);
List<String[]> addData = getDataList();
List<String[]> updateData = getDataList();
for(KolonMember km : kolonMembers){
if(km.dataSource == 2){
updateData.add(new String[] { km.csNo.toString(), km.phone, km.email, km.wechatFirstName, km.wechatLastName});
}else if(km.dataSource == 1 && km.joinTime.before(km.updateTime)){ //加入时间在更新时间之前,数据是更新的
updateData.add(new String[] { km.csNo.toString(), km.phone, km.email, km.wechatFirstName, km.wechatLastName});
}else{
addData.add(new String[] { km.csNo.toString(), km.phone, km.email, km.wechatFirstName, km.wechatLastName});
}
if(lastSendDate.before(km.updateTime)){ //获取数据较后的更新时间
lastSendDate = km.updateTime;
}
}
CSVWriter addWriter = ftpUtil.getCSVWriter(1);
writeDataToFile(addWriter, addData);
CSVWriter updateWriter = ftpUtil.getCSVWriter(2);
writeDataToFile(updateWriter, updateData);
//上传文件
uploadFile();
return lastSendDate;
}
private List<String[]> getDataList() {
List<String[]> addData = new ArrayList<String[]>();
String[] header = "CS_NO,Phone,Email,Wechat Last Name,Wechat First Name".split(",");
addData.add(header);
return addData;
}
public void writeDataToFile(CSVWriter writer, List<String[]> data){
try {
writer.writeAll(data);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void uploadFile(){
ftpUtil.uploadFile();
}
}
package com.hdp.pi.starter.kolon;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.orm.jpa.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.scheduling.annotation.EnableScheduling;
@Configuration
@ComponentScan(basePackages = { "com.hdp.pi.config.kolon", "com.hdp.pi.utils.kolon" })
@EnableAutoConfiguration
@PropertySource({ "classpath:kolon.${mode}.properties", "classpath:kolon.properties" })
@EnableJpaRepositories(value="com.hdp.pi.repository")
@EntityScan("com.hdp.pi.domain")
@EnableScheduling
public class KolonStarter implements CommandLineRunner{
private static final Logger LOGGER = LoggerFactory.getLogger(KolonStarter.class);
public static void main(String[] args) {
SpringApplication app = new SpringApplication(KolonStarter.class);
app.setWebEnvironment(false);
app.run(args);
}
@Override
public void run(String... args) throws Exception {
LOGGER.info("piplus-parent kolon服务已启动!");
Thread.currentThread().join();
}
}
package com.hdp.pi.utils.kolon;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.hdp.pi.domain.baseservice.GlobalVariable;
import com.hdp.pi.service.baseservice.GlobalVariableService;
import com.hdp.pi.service.kolon.KolonMemberService;
@Component
public class FtpService {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Autowired
private KolonMemberService kolonMemberService;
@Autowired
private GlobalVariableService globalVariableService;
@Value("${kolon.property.businessCode}")
private String businessCode;
@Value("${kolon.property.variableTypeName}")
private String variableTypeName;
@Value("${kolon.property.variableCode}")
private String variableCode;
@Autowired
private FtpUtil ftpUtil;
// 每天上午10:30触发
@Scheduled(cron = "0 30 10 * * ?")
public void scheduledReadTask() {
readCSVFile();
}
// 每天凌晨1:00触发
@Scheduled(cron = "0 00 1 * * ?")
public void scheduledWriteTask() {
writeCSVFile();
}
/**
* 同步数据
*/
public void readCSVFile() {
kolonMemberService.syncData();
}
/**
* 发送数据
*/
public void writeCSVFile() {
try {
String lastSendTime = globalVariableService.findVariableValue(
businessCode, variableTypeName, variableCode);
if (lastSendTime == null) {
lastSendTime = dateFormat.format(new Date());
}
Date newLastSendTime;
newLastSendTime = kolonMemberService.sendData(formatter
.parse(lastSendTime));
// 更新时间
GlobalVariable globalVariable = globalVariableService.findVariable(
businessCode, variableTypeName, variableCode);
globalVariable.strVariableValue = dateFormat
.format(newLastSendTime);
globalVariableService.templateUpdate(globalVariable);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
package com.hdp.pi.utils.kolon;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.SocketException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import au.com.bytecode.opencsv.CSVReader;
import au.com.bytecode.opencsv.CSVWriter;
public class FtpUtil {
private static final Logger logger = LoggerFactory.getLogger(FtpUtil.class);
@Value("${kolon.property.ftp.server}")
private String ftpServer;
@Value("${kolon.property.ftp.port}")
private Integer ftpPort;
@Value("${kolon.property.ftp.userName}")
private String ftpUserName;
@Value("${kolon.property.ftp.password}")
private String ftpPassword;
/**
* FTP获取文件目录
*/
@Value("${kolon.property.ftp.getFileDir}")
private String getFileDir;
/**
* FTP获取存放历史文件目录
*/
@Value("${kolon.property.ftp.getFileHistoryDir}")
private String getFileHistoryDir;
/**
* FTP文件名称
*/
@Value("${kolon.property.ftp.getFileName}")
private String getFileName;
/**
* 临时存放生成的新注册用户文件路径
*/
@Value("${kolon.property.ftp.tempAddFileName}")
private String tempAddFileName;
/**
* 临时存放生成的更新用户文件路径
*/
@Value("${kolon.property.ftp.tempUpdateFileName}")
private String tempUpdateFileName;
/**
* FTP上传文件目录
*/
@Value("${kolon.property.ftp.putFileDir}")
private String putFileDir;
/**
* FTP上传新注册用户的文件名称
*/
@Value("${kolon.property.ftp.putAddFileName}")
private String putAddFileName;
/**
* FTP上传更新用户的文件名称
*/
@Value("${kolon.property.ftp.putUpdateFileName}")
private String putUpdateFileName;
/**
* 获取ftp链接
*
* @return ftpClient
* */
public FTPClient getFTPClient() {
FTPClient ftpClient = null;
try {
ftpClient = new FTPClient();
ftpClient.connect(ftpServer, ftpPort);
ftpClient.enterLocalPassiveMode();
ftpClient.login(ftpUserName, ftpPassword);
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
int reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
logger.error("FTP server refused connection.");
System.err.println("FTP server refused connection.");
System.exit(1);
}
} catch (SocketException e) {
e.printStackTrace();
logger.error(e.toString());
} catch (IOException e) {
logger.error(e.toString());
e.printStackTrace();
}
return ftpClient;
}
/**
* 读取文件数据
*/
public List<String[]> readCSVFile() {
List<String[]> list = new ArrayList<String[]>();
try {
FTPClient ftpClient = this.getFTPClient();
InputStream csv = ftpClient.retrieveFileStream(getFileDir
+ getFileName);
if (csv == null) {
logger.warn("kolon数据同步失败,没有找到【" + getFileDir + getFileName
+ "】数据文件");
return null;
}
InputStreamReader inputStreamReader = new InputStreamReader(csv,
"UTF-8");
CSVReader csvReader = new CSVReader(inputStreamReader);
list = csvReader.readAll();
csvReader.close();
ftpClient.disconnect();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
/**
* 移动文件
*/
public void moveFile() {
try {
FTPClient ftpClient = this.getFTPClient();
//新的文件名
String suffix = getFileName.substring(getFileName.lastIndexOf("."));
String name = getFileName.substring(0, getFileName.lastIndexOf("."));
String newFileName = name + "_" + getTime() + suffix;
ftpClient.rename(getFileDir + getFileName, getFileHistoryDir
+ newFileName);
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取CSVWrite
*
* @param type
* @return
*/
public CSVWriter getCSVWriter(Integer type) {
CSVWriter writer = null;
try {
if (type == 1) {
writer = new CSVWriter(new FileWriter(tempAddFileName), ',',
CSVWriter.NO_QUOTE_CHARACTER);
} else {
writer = new CSVWriter(new FileWriter(tempUpdateFileName), ',',
CSVWriter.NO_QUOTE_CHARACTER);
}
} catch (IOException e) {
e.printStackTrace();
}
return writer;
}
/**
* 上传文件到FTP服务器
*/
public void uploadFile() {
try {
FTPClient ftpClient = this.getFTPClient();
ftpClient.mkd(putFileDir);
ftpClient.changeWorkingDirectory(putFileDir);
InputStream addInputStream = new FileInputStream(new File(
tempAddFileName));
InputStream updateInputStream = new FileInputStream(new File(
tempUpdateFileName));
ftpClient.storeFile(putAddFileName, addInputStream);
ftpClient.storeFile(putUpdateFileName, updateInputStream);
} catch (IOException e) {
e.printStackTrace();
logger.error(e.toString());
}
}
private String getTime() {
DateTimeFormatter formatter = DateTimeFormatter
.ofPattern("yyyy-MM-dd_HHmmss");
LocalDateTime dateTime = LocalDateTime.now();
String formattedDateTime = dateTime.format(formatter);
return formattedDateTime;
}
}
package com.hdp.pi.utils.kolon;
public class Util {
public static boolean isNotNull(String s){
return (s == null || s.trim().length() < 1) ? false : true;
}
public static boolean isNotNull(Integer s){
return s == null ? false:true;
}
public static boolean isNotNull(Double s){
return s == null ? false:true;
}
public static boolean isNotNull(Object s){
return (s == null || "".equals(s)) ? false : true;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:reference interface="com.hdp.pi.service.kolon.KolonMemberService"
id="kolonMemberService" version="1.0.0" />
</beans>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="hdp-kolon-service" />
<!-- 使用multicast广播注册中心暴露服务地址 -->
<!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
<dubbo:registry file="kolonDubboServices.cache"
protocol="zookeeper" address="${dubbo.register}" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="${kolon.dubbo.port}"
host="${dubbo.host}" />
<bean id="kolonMemberService" class="com.hdp.pi.service.kolon.KolonMemberServiceImpl" />
<dubbo:service timeout="10000"
interface="com.hdp.pi.service.kolon.KolonMemberService" ref="kolonMemberService"
version="1.0.0" />
<bean id="ftpUtil" class="com.hdp.pi.utils.kolon.FtpUtil" />
<!-- 引用其它模块 -->
<dubbo:reference interface="com.hdp.pi.service.baseservice.GlobalVariableService"
id="globalVariableService" version="1.0.0" />
</beans>
\ No newline at end of file
spring.datasource.url=jdbc:mysql://172.18.5.205:3306/picrm?autoReconnect=true&zeroDateTimeBehavior=convertToNull&character_set_server=utf8mb4
#spring.datasource.url=jdbc:mysql://14.23.56.164:3306/picrm?autoReconnect=true&zeroDateTimeBehavior=convertToNull
spring.datasource.username=future
spring.datasource.password=future123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.initial-size=1
spring.datasource.min-idle=1
spring.jpa.show-sql=true
dubbo.register=172.18.5.201:3181
kolon.property.businessCode = 100073
\ No newline at end of file
spring.datasource.url=jdbc:mysql://drds924h9nxsf566.drds.aliyuncs.com/piscrm?autoReconnect=true&zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8
spring.datasource.username=piscrm
spring.datasource.password=GuangZhouhdp123
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-active=50
spring.datasource.initial-size=20
spring.datasource.min-idle=10
spring.jpa.show-sql=false
dubbo.register=10.173.227.160:2181,10.173.224.92:2181,10.173.226.96:2181
kolon.property.businessCode = 100073
spring.datasource.max-wait=60000
spring.datasource.min-evictable-idle-time-millis=300000
spring.datasource.time-between-eviction-runs-millis=60000
spring.datasource.validation-query=select 'x'
spring.datasource.test-while-idle=true
spring.datasource.test-on-borrow=false
spring.datasource.test-on-return=false
spring.datasource.filters=stat
spring.datasource.validation-interval=300000
server.port=0
dubbo.host=0.0.0.0
kolon.dubbo.port=21896
kolon.property.variableTypeName = KOLON_PROPERTY
kolon.property.variableCode = LAST_SEND_TIME
kolon.property.ftp.server = kolon-report.emarsyshk.com
kolon.property.ftp.port = 21
kolon.property.ftp.userName = wechat@kolon-report.emarsyshk.com
kolon.property.ftp.password = p&}e^MLPcNBI
kolon.property.ftp.getFileDir = /Emarsys/
kolon.property.ftp.getFileHistoryDir = /Emarsys/history/
kolon.property.ftp.getFileName = contact.csv
kolon.property.ftp.putFileDir = /SCRM/
kolon.property.ftp.putAddFileName = newContact.csv
kolon.property.ftp.putUpdateFileName = updateContact.csv
kolon.property.ftp.tempAddFileName = /temp/tempAddContact.csv
kolon.property.ftp.tempUpdateFileName = /temp/tempUpdateContact.csv
#kolon.property.ftp.server = 172.18.8.202
#kolon.property.ftp.port = 21
#kolon.property.ftp.userName = ftpuser
#kolon.property.ftp.password = 1234
#kolon.property.ftp.tempAddFileName = /temp/tempAddContact.csv
#kolon.property.ftp.tempUpdateFileName = /temp/tempUpdateContact.csv
#kolon.property.ftp.tempAddFileName = E:/FTP/SCRM/temp/tempAddContact.csv
#kolon.property.ftp.tempUpdateFileName = E:/FTP/SCRM/temp/tempUpdateContact.csv
spring.datasource.url=jdbc:mysql://rds230874a65slt263ex.mysql.rds.aliyuncs.com:3306/sandbox?autoReconnect=true&zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8
spring.datasource.username=future
spring.datasource.password=future123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.initial-size=1
spring.datasource.min-idle=1
spring.jpa.show-sql=false
dubbo.register=115.29.165.17:2181
kolon.property.businessCode = 100073
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment