Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
T
task-kolon
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
piplus-v3
task-kolon
Commits
8b1793b7
Commit
8b1793b7
authored
Apr 21, 2016
by
陈家荣
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
kolon初始化 数据同步
parent
c7c025b1
Changes
20
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
1128 additions
and
0 deletions
+1128
-0
KolonMemberController.java
...main/java/com/hdp/pi/api/kolon/KolonMemberController.java
+137
-0
DubboServiceConsumer.java
...in/java/com/hdp/pi/config/kolon/DubboServiceConsumer.java
+16
-0
DubboServiceProvider.java
...in/java/com/hdp/pi/config/kolon/DubboServiceProvider.java
+14
-0
KolonMember.java
src/main/java/com/hdp/pi/domain/kolon/KolonMember.java
+95
-0
KolonMemberDTO.java
src/main/java/com/hdp/pi/dto/kolon/KolonMemberDTO.java
+58
-0
KolonMemberRepository.java
...va/com/hdp/pi/repository/kolon/KolonMemberRepository.java
+49
-0
FtpService.java
src/main/java/com/hdp/pi/service/kolon/FtpService.java
+7
-0
FtpServiceImpl.java
src/main/java/com/hdp/pi/service/kolon/FtpServiceImpl.java
+36
-0
KolonMemberService.java
...ain/java/com/hdp/pi/service/kolon/KolonMemberService.java
+46
-0
KolonMemberServiceImpl.java
...java/com/hdp/pi/service/kolon/KolonMemberServiceImpl.java
+179
-0
KolonStarter.java
src/main/java/com/hdp/pi/starter/kolon/KolonStarter.java
+36
-0
FtpService.java
src/main/java/com/hdp/pi/utils/kolon/FtpService.java
+87
-0
FtpUtil.java
src/main/java/com/hdp/pi/utils/kolon/FtpUtil.java
+219
-0
Util.java
src/main/java/com/hdp/pi/utils/kolon/Util.java
+22
-0
kolon-dubbo-consumer.xml
src/main/resources/META-INF/spring/kolon-dubbo-consumer.xml
+10
-0
kolon-dubbo-provider.xml
src/main/resources/META-INF/spring/kolon-dubbo-provider.xml
+28
-0
kolon.dev.properties
src/main/resources/kolon.dev.properties
+14
-0
kolon.prod.properties
src/main/resources/kolon.prod.properties
+14
-0
kolon.properties
src/main/resources/kolon.properties
+47
-0
kolon.sandbox.properties
src/main/resources/kolon.sandbox.properties
+14
-0
No files found.
src/main/java/com/hdp/pi/api/kolon/KolonMemberController.java
0 → 100644
View file @
8b1793b7
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
();
}
}
}
src/main/java/com/hdp/pi/config/kolon/DubboServiceConsumer.java
0 → 100644
View file @
8b1793b7
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
{
}
src/main/java/com/hdp/pi/config/kolon/DubboServiceProvider.java
0 → 100644
View file @
8b1793b7
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
{
}
src/main/java/com/hdp/pi/domain/kolon/KolonMember.java
0 → 100644
View file @
8b1793b7
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
;
}
src/main/java/com/hdp/pi/dto/kolon/KolonMemberDTO.java
0 → 100644
View file @
8b1793b7
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
;
}
}
src/main/java/com/hdp/pi/repository/kolon/KolonMemberRepository.java
0 → 100644
View file @
8b1793b7
/**
*
*/
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
);
}
src/main/java/com/hdp/pi/service/kolon/FtpService.java
0 → 100644
View file @
8b1793b7
package
com
.
hdp
.
pi
.
service
.
kolon
;
public
interface
FtpService
{
}
src/main/java/com/hdp/pi/service/kolon/FtpServiceImpl.java
0 → 100644
View file @
8b1793b7
/**
*
*/
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
;
}
src/main/java/com/hdp/pi/service/kolon/KolonMemberService.java
0 → 100644
View file @
8b1793b7
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
);
}
src/main/java/com/hdp/pi/service/kolon/KolonMemberServiceImpl.java
0 → 100644
View file @
8b1793b7
/**
*
*/
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
();
}
}
src/main/java/com/hdp/pi/starter/kolon/KolonStarter.java
0 → 100644
View file @
8b1793b7
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
();
}
}
src/main/java/com/hdp/pi/utils/kolon/FtpService.java
0 → 100644
View file @
8b1793b7
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
();
}
}
}
src/main/java/com/hdp/pi/utils/kolon/FtpUtil.java
0 → 100644
View file @
8b1793b7
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
;
}
}
src/main/java/com/hdp/pi/utils/kolon/Util.java
0 → 100644
View file @
8b1793b7
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
;
}
}
src/main/resources/META-INF/spring/kolon-dubbo-consumer.xml
0 → 100644
View file @
8b1793b7
<?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
src/main/resources/META-INF/spring/kolon-dubbo-provider.xml
0 → 100644
View file @
8b1793b7
<?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
src/main/resources/kolon.dev.properties
0 → 100644
View file @
8b1793b7
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
src/main/resources/kolon.prod.properties
0 → 100644
View file @
8b1793b7
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
src/main/resources/kolon.properties
0 → 100644
View file @
8b1793b7
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
src/main/resources/kolon.sandbox.properties
0 → 100644
View file @
8b1793b7
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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment