commit
0d04141af8
30 changed files with 2359 additions and 0 deletions
@ -0,0 +1,78 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" |
|||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
|||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
|||
<modelVersion>4.0.0</modelVersion> |
|||
|
|||
<groupId>org.example</groupId> |
|||
<artifactId>jsl_crm_xlt_sync</artifactId> |
|||
<version>1.0-SNAPSHOT</version> |
|||
|
|||
<parent> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-parent</artifactId> |
|||
<version>2.6.4</version> |
|||
</parent> |
|||
|
|||
<properties> |
|||
<maven.compiler.source>8</maven.compiler.source> |
|||
<maven.compiler.target>8</maven.compiler.target> |
|||
</properties> |
|||
|
|||
<dependencies> |
|||
|
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-web</artifactId> |
|||
</dependency> |
|||
|
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-undertow</artifactId> |
|||
</dependency> |
|||
|
|||
<dependency> |
|||
<groupId>org.projectlombok</groupId> |
|||
<artifactId>lombok</artifactId> |
|||
<version>1.18.24</version> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>mysql</groupId> |
|||
<artifactId>mysql-connector-java</artifactId> |
|||
<version>8.0.15</version> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>com.microsoft.sqlserver</groupId> |
|||
<artifactId>mssql-jdbc</artifactId> |
|||
<version>8.4.1.jre8</version> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>org.noear</groupId> |
|||
<artifactId>wood</artifactId> |
|||
<version>1.0.7</version> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>junit</groupId> |
|||
<artifactId>junit</artifactId> |
|||
<version>4.13.1</version> |
|||
<scope>compile</scope> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>org.apache.commons</groupId> |
|||
<artifactId>commons-lang3</artifactId> |
|||
<version>3.7</version> |
|||
</dependency> |
|||
</dependencies> |
|||
|
|||
<build> |
|||
<finalName>serve</finalName> |
|||
<plugins> |
|||
<plugin> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-maven-plugin</artifactId> |
|||
<version>2.6.4</version> |
|||
</plugin> |
|||
</plugins> |
|||
</build> |
|||
|
|||
</project> |
@ -0,0 +1,46 @@ |
|||
package com.qs; |
|||
|
|||
import org.springframework.boot.SpringApplication; |
|||
import org.springframework.boot.autoconfigure.SpringBootApplication; |
|||
import org.springframework.boot.builder.SpringApplicationBuilder; |
|||
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; |
|||
import org.springframework.cache.annotation.EnableCaching; |
|||
import org.springframework.scheduling.annotation.EnableAsync; |
|||
import org.springframework.scheduling.annotation.EnableScheduling; |
|||
|
|||
import javax.annotation.PostConstruct; |
|||
import javax.servlet.ServletContext; |
|||
import javax.servlet.ServletException; |
|||
import java.util.TimeZone; |
|||
|
|||
/** |
|||
* @author YenHex |
|||
* @since 2023/3/16 |
|||
*/ |
|||
@EnableAsync |
|||
@EnableScheduling |
|||
@EnableCaching |
|||
@SpringBootApplication |
|||
public class Application extends SpringBootServletInitializer { |
|||
|
|||
public static void main(String[] args) { |
|||
SpringApplication.run(Application.class,args); |
|||
} |
|||
|
|||
@Override |
|||
public void onStartup(ServletContext servletContext) throws ServletException { |
|||
super.onStartup(servletContext); |
|||
} |
|||
|
|||
@Override |
|||
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { |
|||
return builder.sources(Application.class); |
|||
} |
|||
|
|||
@PostConstruct |
|||
void started() { |
|||
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai")); |
|||
} |
|||
|
|||
|
|||
} |
@ -0,0 +1,51 @@ |
|||
package com.qs.controller; |
|||
|
|||
import com.qs.crm.BmsChannelSync; |
|||
import com.qs.crm.BmsPointSync; |
|||
import com.qs.crm.BmsSupplierSync; |
|||
import com.qs.dto.R; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.web.bind.annotation.GetMapping; |
|||
import org.springframework.web.bind.annotation.PathVariable; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
import org.springframework.web.bind.annotation.RestController; |
|||
|
|||
import java.util.List; |
|||
|
|||
@Slf4j |
|||
@AllArgsConstructor |
|||
@RestController |
|||
@RequestMapping("sync") |
|||
public class SyncController { |
|||
|
|||
private BmsSupplierSync supplierSync; |
|||
private BmsChannelSync channelSync; |
|||
private BmsPointSync pointSync; |
|||
|
|||
@GetMapping("/syncAll") |
|||
public String syncAll() throws Exception { |
|||
supplierSync.syncSupplier(); |
|||
channelSync.syncChannel(); |
|||
pointSync.syncPoint(); |
|||
return new String("1"); |
|||
} |
|||
|
|||
@GetMapping("/syncSupplier") |
|||
public String syncSupplier() throws Exception { |
|||
supplierSync.syncSupplier(); |
|||
return new String("1"); |
|||
} |
|||
|
|||
@GetMapping("/syncChannel") |
|||
public String syncChannel() throws Exception { |
|||
channelSync.syncChannel(); |
|||
return new String("1"); |
|||
} |
|||
|
|||
@GetMapping("/syncPoint") |
|||
public String syncPoint() throws Exception { |
|||
pointSync.syncPoint(); |
|||
return new String("1"); |
|||
} |
|||
} |
@ -0,0 +1,105 @@ |
|||
package com.qs.crm; |
|||
|
|||
import com.qs.crm.entity.BmsChannel; |
|||
import com.qs.crm.entity.BmsSupplierChannel; |
|||
import com.qs.crm.xltentity.XltChannel; |
|||
import com.qs.crm.xltentity.XltChannelDealer; |
|||
import com.qs.util.DateUtils; |
|||
import org.noear.wood.DbContext; |
|||
import org.springframework.beans.factory.annotation.Value; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.Date; |
|||
import java.util.List; |
|||
|
|||
@Component |
|||
public class BmsChannelSync { |
|||
|
|||
@Value("${xlt.url}") |
|||
String xltUrl; |
|||
@Value("${xlt.user}") |
|||
String xltUser; |
|||
@Value("${xlt.pass}") |
|||
String xltPass; |
|||
|
|||
@Value("${jsl.url}") |
|||
String jslUrl; |
|||
@Value("${jsl.user}") |
|||
String jslUser; |
|||
@Value("${jsl.pass}") |
|||
String jslPass; |
|||
|
|||
public DbContext getJslDbContext(){ |
|||
return new DbContext("test",jslUrl,jslUser,jslPass); |
|||
} |
|||
|
|||
public DbContext getXltDbContext(){ |
|||
return new DbContext("xlt",xltUrl,xltUser,xltPass); |
|||
} |
|||
|
|||
public void syncChannel() throws Exception { |
|||
DbContext jslDb = getJslDbContext(); |
|||
DbContext xltDb = getXltDbContext(); |
|||
|
|||
Date day = DateUtils.nextDay(-30); |
|||
|
|||
List<XltChannel> channelList = xltDb.sql("SELECT t.name as channeltype ,s.* FROM DealerSystem s LEFT JOIN emp_quDaoTwo t on s.quDaoTwo = t.id WHERE s.isval = '0' and addDate>=?",day).getList(XltChannel.class); |
|||
|
|||
List<BmsChannel> channels = new ArrayList<>(); |
|||
for(XltChannel a:channelList){ |
|||
|
|||
if(jslDb.sql("select * from bms_channel where del_flag=0 and channel_code =? ",a.getNumber()).getList(BmsChannel.class).size()>0){ |
|||
continue; |
|||
} |
|||
|
|||
BmsChannel channel = new BmsChannel(); |
|||
channel.setChannelCode(a.getNumber()); |
|||
channel.setChannelName(a.getName()); |
|||
channel.setChannelType(a.getChanneltype()); |
|||
channel.setTenantId("001"); |
|||
channel.setDelFlag("0"); |
|||
channel.setCostFlag(1); |
|||
// channels.add(channel);
|
|||
Long channelId = jslDb.table("bms_channel").setEntity(channel).insert(); |
|||
System.out.println(a.getNumber()); |
|||
|
|||
List<XltChannelDealer> channelDealers = xltDb.sql("select d.*,c.dealerNumber as dealer_number from emp_system_dealer d left join DealerConnTable c on d.dealer_id = c.id where d.system_id = ?",a.getId()).getList(XltChannelDealer.class); |
|||
if(channelDealers.size()>0) { |
|||
for (XltChannelDealer b : channelDealers) { |
|||
|
|||
Long supId = (Long)jslDb.sql("select * from bms_supplier where del_flag=0 and code = ?",b.getDealer_number()).getMap().get("id"); |
|||
if(supId==null){ |
|||
System.out.println("缺少客户:"+a.getNumber()); |
|||
continue; |
|||
} |
|||
|
|||
if(jslDb.sql("select * from bms_supplier_channel where del_flag=0 and channel_id=? and supplier_id=?", |
|||
channelId,supId).getList(BmsSupplierChannel.class).size()>0){ |
|||
continue; |
|||
} |
|||
|
|||
BmsSupplierChannel supplierChannel = new BmsSupplierChannel(); |
|||
supplierChannel.setChannelId(channelId); |
|||
supplierChannel.setSupplierId(supId); |
|||
supplierChannel.setTenantId("001"); |
|||
supplierChannel.setDelFlag("0"); |
|||
jslDb.table("bms_supplier_channel").setEntity(supplierChannel).insert(); |
|||
} |
|||
} |
|||
}; |
|||
|
|||
System.out.println(channels.size()); |
|||
} |
|||
|
|||
public void syncChannelDealer() throws Exception { |
|||
DbContext jslDb = getJslDbContext(); |
|||
DbContext xltDb = getXltDbContext(); |
|||
|
|||
|
|||
} |
|||
|
|||
public static void main(String[] args) throws Exception { |
|||
new BmsChannelSync().syncChannel(); |
|||
} |
|||
} |
@ -0,0 +1,128 @@ |
|||
package com.qs.crm; |
|||
|
|||
import com.qs.crm.entity.BmsChannel; |
|||
import com.qs.crm.entity.BmsChannelPoint; |
|||
import com.qs.crm.entity.BmsRegion2; |
|||
import com.qs.crm.entity.BmsSupplierChannel; |
|||
import com.qs.crm.xltentity.XltChannel; |
|||
import com.qs.crm.xltentity.XltChannelDealer; |
|||
import com.qs.crm.xltentity.XltPoint; |
|||
import com.qs.util.DateUtils; |
|||
import org.noear.wood.DbContext; |
|||
import org.noear.wood.utils.StringUtils; |
|||
import org.springframework.beans.factory.annotation.Value; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.Date; |
|||
import java.util.List; |
|||
|
|||
@Component |
|||
public class BmsPointSync { |
|||
|
|||
@Value("${xlt.url}") |
|||
String xltUrl; |
|||
@Value("${xlt.user}") |
|||
String xltUser; |
|||
@Value("${xlt.pass}") |
|||
String xltPass; |
|||
|
|||
@Value("${jsl.url}") |
|||
String jslUrl; |
|||
@Value("${jsl.user}") |
|||
String jslUser; |
|||
@Value("${jsl.pass}") |
|||
String jslPass; |
|||
|
|||
public DbContext getJslDbContext(){ |
|||
return new DbContext("test",jslUrl,jslUser,jslPass); |
|||
} |
|||
|
|||
public DbContext getXltDbContext(){ |
|||
return new DbContext("xlt",xltUrl,xltUser,xltPass); |
|||
} |
|||
|
|||
public void syncPoint() throws Exception { |
|||
DbContext jslDb = getJslDbContext(); |
|||
DbContext xltDb = getXltDbContext(); |
|||
|
|||
Date day = DateUtils.nextDay(-10); |
|||
|
|||
|
|||
String sql ="select w1.id,w1.number_,w1.name,xiancheng,chengshi,shengfen,w1.cashRegister as cash_register,w1.area as shop_area,w1.floor '店面层数',w1.xihuaDiDui '同品类地堆数',d2.number as channel_code,w1.sysId as sys_id " + |
|||
",xihuaArer '同品类面积',xihuaDuanJia '同品类端架数',dentifriceShelf '同品类货架节数(各产品)',contactP,w3.phone,w3.email,w3.mobileTel " + |
|||
",w1.addDate,w1.address,w1.dingWei_address,w2.WDTypeName as type_name ,wl.WDLevelName as level_name,d2.name sysName,d3.dealerNumber,d3.dealerName,d1.city,d4.province " + |
|||
"from emp_system_dealer e1 " + |
|||
"inner join DealerSystem d2 on e1.system_id = d2.id " + |
|||
"inner join WangDian w1 on d2.id = w1.sysId " + |
|||
"left join DealerConnTable d3 on e1.dealer_id = d3.id " + |
|||
"left join DealerCity d1 on d3.cid = d1.id " + |
|||
"left join DealerProvince d4 on d1.pid = d4.id " + |
|||
"left join DealerArea d5 on d5.id = d4.aid " + |
|||
"left join WDType w2 on w1.type = w2.id " + |
|||
"left join WDContact w3 on w1.id = w3.WDID " + |
|||
"left join WDLevel wl on w1.wdlevel = wl.id " + |
|||
"where w1.isval = 0 and d5.id = ? "; |
|||
|
|||
String id = "40288a73601f131601602b0fbe010074"; |
|||
|
|||
List<XltPoint> pointList = xltDb.sql(sql,id).getList(XltPoint.class); |
|||
|
|||
for(XltPoint a:pointList) { |
|||
|
|||
List<BmsChannelPoint> points = jslDb.sql("select * from bms_channel_point where del_flag=0 and point_code = ?",a.getNumber_()).getList(BmsChannelPoint.class); |
|||
if(points.size()>0){ |
|||
continue; |
|||
} |
|||
|
|||
List<BmsChannel> channelList = jslDb.sql("select * from bms_channel where del_flag=0 and channel_code =? ",a.getChannel_code()).getList(BmsChannel.class); |
|||
|
|||
if(channelList.size()==0){ |
|||
continue; |
|||
} |
|||
|
|||
BmsChannelPoint point = new BmsChannelPoint(); |
|||
point.setChannelId(channelList.get(0).getId()); |
|||
point.setChannelName(channelList.get(0).getChannelName()); |
|||
point.setPointCode(a.getNumber_()); |
|||
point.setPointName(a.getName()); |
|||
if(a.getShop_area()!=null) { |
|||
point.setShopArea(a.getShop_area().toString()); |
|||
} |
|||
point.setCountCheckstand(a.getCash_register()); |
|||
point.setPointLevel(a.getLevel_name()); |
|||
point.setPointType(a.getType_name()); |
|||
point.setAddress(a.getAddress()); |
|||
point.setTenantId("001"); |
|||
point.setCostFlag(1); |
|||
point.setDelFlag("0"); |
|||
|
|||
// BmsRegion2 region2 = jslDb.sql("select * from bms_region2 where del_flag=0 and name = ?",a.getXiancheng()).getItem(BmsRegion2.class);
|
|||
// if(region2==null || StringUtils.isEmpty(region2.getPathIds())){
|
|||
// System.out.println(a.getName());
|
|||
// }else{
|
|||
// String[] regionPath = region2.getPathIds().split("_");
|
|||
// if(regionPath.length!=3){
|
|||
// System.out.println(a.getName());
|
|||
// }else{
|
|||
// point.setBizRegionId(region2.getId());
|
|||
// point.setBizRegionPathIds(region2.getPathIds());
|
|||
// point.setBizRegionPath(region2.getPathNames());
|
|||
// }
|
|||
// }
|
|||
|
|||
jslDb.table("bms_channel_point").setEntity(point).insert(); |
|||
} |
|||
} |
|||
|
|||
public void syncChannelDealer() throws Exception { |
|||
DbContext jslDb = getJslDbContext(); |
|||
DbContext xltDb = getXltDbContext(); |
|||
|
|||
|
|||
} |
|||
|
|||
public static void main(String[] args) throws Exception { |
|||
new BmsPointSync().syncPoint(); |
|||
} |
|||
} |
@ -0,0 +1,158 @@ |
|||
package com.qs.crm; |
|||
|
|||
import com.qs.crm.entity.*; |
|||
import com.qs.crm.xltentity.XltChannel; |
|||
import com.qs.crm.xltentity.XltChannelDealer; |
|||
import com.qs.crm.xltentity.XltDealer; |
|||
import com.qs.crm.xltentity.XltDealerUser; |
|||
import com.qs.util.DateUtils; |
|||
import org.noear.wood.DbContext; |
|||
import org.noear.wood.utils.StringUtils; |
|||
import org.springframework.beans.factory.annotation.Value; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
import java.math.BigDecimal; |
|||
import java.util.ArrayList; |
|||
import java.util.Date; |
|||
import java.util.List; |
|||
import java.util.stream.Collectors; |
|||
|
|||
@Component |
|||
public class BmsSupplierSync { |
|||
|
|||
@Value("${xlt.url}") |
|||
String xltUrl; |
|||
@Value("${xlt.user}") |
|||
String xltUser; |
|||
@Value("${xlt.pass}") |
|||
String xltPass; |
|||
|
|||
@Value("${jsl.url}") |
|||
String jslUrl; |
|||
@Value("${jsl.user}") |
|||
String jslUser; |
|||
@Value("${jsl.pass}") |
|||
String jslPass; |
|||
|
|||
public DbContext getJslDbContext(){ |
|||
return new DbContext("test",jslUrl,jslUser,jslPass); |
|||
} |
|||
|
|||
public DbContext getXltDbContext(){ |
|||
return new DbContext("xlt",xltUrl,xltUser,xltPass); |
|||
} |
|||
|
|||
public void syncSupplier() throws Exception { |
|||
DbContext jslDb = getJslDbContext(); |
|||
DbContext xltDb = getXltDbContext(); |
|||
|
|||
Date day = DateUtils.nextDay(-10); |
|||
|
|||
String sql = |
|||
"select d1.id,d1.address,d1.dealerName as dealer_name,d1.dealerNumber as dealer_number,d.districtName as district_name " + |
|||
"from DealerConnTable d1 " + |
|||
"left join District d on d.id = d1.xian where d1.addDate >= ?"; |
|||
List<XltDealer> dealerList = xltDb.sql(sql,day).getList(XltDealer.class); |
|||
|
|||
|
|||
for(XltDealer dealer:dealerList){ |
|||
List<BmsSupplier> supplierList = jslDb.sql("select * from bms_supplier where del_flag=0 and code = ?",dealer.getDealer_number()).getList(BmsSupplier.class); |
|||
if(supplierList.size()>0){ |
|||
BmsSupplier supplier = supplierList.get(0); |
|||
|
|||
if(supplier.getOtherUserIds()!=null && supplier.getOtherUserIds().length()>0){ |
|||
continue; |
|||
} |
|||
// 更新客户负责人
|
|||
List<XltDealerUser> dealerUsers = xltDb.sql("select f.*,e.numNo as num_no from franKHEMP f left join Employee e on f.KHEmp_ID=e.ID where fran_number=?",dealer.getDealer_number()).getList(XltDealerUser.class); |
|||
List<SysUser> sysUsers = new ArrayList<>(); |
|||
for(XltDealerUser xltuser:dealerUsers){ |
|||
List<SysUser> users = jslDb.sql("select * from sys_user where del_flag=0 and code = ?",xltuser.getNum_no()).getList(SysUser.class); |
|||
if(users.size()==0){ |
|||
continue; |
|||
} |
|||
sysUsers.add(users.get(0)); |
|||
} |
|||
if(sysUsers.size()>0){ |
|||
List<String> userNames = sysUsers.stream().map(a->a.getName()).distinct().collect(Collectors.toList()); |
|||
List<String> userCodes = sysUsers.stream().map(a->a.getCode()).distinct().collect(Collectors.toList()); |
|||
List<String> userIds = sysUsers.stream().map(a->a.getId()).distinct().collect(Collectors.toList()); |
|||
supplier.setOtherUserIds(userIds.stream().collect(Collectors.joining(","))); |
|||
supplier.setOtherUserCodes(userCodes.stream().collect(Collectors.joining(","))); |
|||
supplier.setOtherUserNames(userNames.stream().collect(Collectors.joining(","))); |
|||
|
|||
jslDb.table("bms_supplier").set("other_user_ids",supplier.getOtherUserIds()) |
|||
.set("other_user_names",supplier.getOtherUserNames()) |
|||
.set("other_user_codes",supplier.getOtherUserCodes()) |
|||
.whereEq("id",supplier.getId()).update(); |
|||
} |
|||
}else{ |
|||
|
|||
// 新增客户
|
|||
System.out.println(dealer.getDealer_number()); |
|||
System.out.println(dealer.getDealer_name()); |
|||
|
|||
BmsSupplier bmsSupplier = new BmsSupplier(); |
|||
bmsSupplier.setCode(dealer.getDealer_number()); |
|||
bmsSupplier.setName(dealer.getDealer_name()); |
|||
bmsSupplier.setTenantId("001"); |
|||
bmsSupplier.setDelFlag(false); |
|||
bmsSupplier.setCostFlag(1); |
|||
bmsSupplier.setInitCurAmount(BigDecimal.ZERO); |
|||
bmsSupplier.setInitHisAmount(BigDecimal.ZERO); |
|||
bmsSupplier.setStopFlag(0); |
|||
bmsSupplier.setPid(0L); |
|||
bmsSupplier.setAddress(dealer.getAddress()); |
|||
|
|||
//付责人
|
|||
|
|||
List<XltDealerUser> dealerUsers = xltDb.sql("select f.*,e.numNo as num_no from franKHEMP f left join Employee e on f.KHEmp_ID=e.ID where fran_number=?",dealer.getDealer_number()).getList(XltDealerUser.class); |
|||
List<SysUser> sysUsers = new ArrayList<>(); |
|||
for(XltDealerUser xltuser:dealerUsers){ |
|||
List<SysUser> users = jslDb.sql("select * from sys_user where del_flag=0 and code = ?",xltuser.getNum_no()).getList(SysUser.class); |
|||
if(users.size()==0){ |
|||
continue; |
|||
} |
|||
sysUsers.add(users.get(0)); |
|||
} |
|||
if(sysUsers.size()>0){ |
|||
List<String> userNames = sysUsers.stream().map(a->a.getName()).distinct().collect(Collectors.toList()); |
|||
List<String> userCodes = sysUsers.stream().map(a->a.getCode()).distinct().collect(Collectors.toList()); |
|||
List<String> userIds = sysUsers.stream().map(a->a.getId()).distinct().collect(Collectors.toList()); |
|||
bmsSupplier.setOtherUserIds(userIds.stream().collect(Collectors.joining(","))); |
|||
bmsSupplier.setOtherUserCodes(userCodes.stream().collect(Collectors.joining(","))); |
|||
bmsSupplier.setOtherUserNames(userNames.stream().collect(Collectors.joining(","))); |
|||
} |
|||
|
|||
//区域
|
|||
BmsRegion2 region2 = jslDb.sql("select * from bms_region2 where del_flag=0 and name = ?",dealer.getDistrict_name()).getItem(BmsRegion2.class); |
|||
if(region2==null || StringUtils.isEmpty(region2.getPathIds())){ |
|||
System.out.println(dealer.getDealer_name()); |
|||
}else{ |
|||
String[] regionPath = region2.getPathIds().split("_"); |
|||
|
|||
if(regionPath.length!=3){ |
|||
System.out.println(dealer.getDealer_name()); |
|||
}else{ |
|||
bmsSupplier.setRegion2First(regionPath[0]); |
|||
bmsSupplier.setRegion2Second(regionPath[1]); |
|||
bmsSupplier.setRegion2Third(regionPath[2]); |
|||
bmsSupplier.setRegion2Last(regionPath[2]); |
|||
} |
|||
} |
|||
|
|||
Long supplierId = jslDb.table("bms_supplier").setEntity(bmsSupplier).insert(); |
|||
|
|||
|
|||
jslDb.table("bms_supplier").set("path_ids","0_"+supplierId).whereEq("id",supplierId).update(); |
|||
// bmsSupplier.setPathIds("");
|
|||
System.out.println(dealer.getDealer_name()); |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
public static void main(String[] args) throws Exception { |
|||
new BmsSupplierSync().syncSupplier(); |
|||
} |
|||
} |
@ -0,0 +1,67 @@ |
|||
package com.qs.crm.entity; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import com.fasterxml.jackson.annotation.JsonIgnore; |
|||
import com.fasterxml.jackson.annotation.JsonProperty; |
|||
import lombok.Data; |
|||
import org.springframework.format.annotation.DateTimeFormat; |
|||
|
|||
import java.io.Serializable; |
|||
import java.time.LocalDateTime; |
|||
|
|||
/** |
|||
* 渠道 实体类 |
|||
* @author YenHex |
|||
* @since 2022-11-07 |
|||
*/ |
|||
@Data |
|||
public class BmsChannel implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** id */ |
|||
private Long id; |
|||
|
|||
/** 渠道编码 */ |
|||
private String channelCode; |
|||
|
|||
/** 渠道名称 */ |
|||
private String channelName; |
|||
|
|||
/** 渠道类型(读取数据字典) */ |
|||
private String channelType; |
|||
|
|||
/** 备注 */ |
|||
private String remark; |
|||
|
|||
/** 创建时间 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
private LocalDateTime createTime; |
|||
|
|||
/** 最后更新时间 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
private LocalDateTime updateTime; |
|||
|
|||
/** 所属租户 */ |
|||
@JsonIgnore |
|||
@JsonProperty |
|||
private String tenantId; |
|||
|
|||
/** 逻辑删除标记(0:显示;1:隐藏) */ |
|||
@JsonIgnore |
|||
@JsonProperty |
|||
private String delFlag; |
|||
|
|||
/** 创建人 */ |
|||
private String createBy; |
|||
|
|||
/** 更新人 */ |
|||
private String updateBy; |
|||
|
|||
/** 可投放费用标识 */ |
|||
private Integer costFlag; |
|||
|
|||
} |
|||
|
@ -0,0 +1,120 @@ |
|||
package com.qs.crm.entity; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import com.fasterxml.jackson.annotation.JsonIgnore; |
|||
import com.fasterxml.jackson.annotation.JsonProperty; |
|||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize; |
|||
import com.fasterxml.jackson.databind.annotation.JsonSerialize; |
|||
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; |
|||
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; |
|||
import lombok.Data; |
|||
import org.springframework.format.annotation.DateTimeFormat; |
|||
|
|||
import java.io.Serializable; |
|||
import java.time.LocalDateTime; |
|||
|
|||
/** |
|||
* 渠道站点 实体类 |
|||
* @author YenHex |
|||
* @since 2022-11-07 |
|||
*/ |
|||
@Data |
|||
public class BmsChannelPoint implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** id */ |
|||
private Long id; |
|||
|
|||
/** 渠道名称 */ |
|||
private Long channelId; |
|||
|
|||
private String channelName; |
|||
|
|||
/** 站点编码 */ |
|||
private String pointCode; |
|||
|
|||
/** 站点名称 */ |
|||
private String pointName; |
|||
|
|||
/** 店铺面积 */ |
|||
private String shopArea; |
|||
|
|||
/** 收银台数量 */ |
|||
private Integer countCheckstand; |
|||
|
|||
/** 站点等级(读取字典值) */ |
|||
private String pointLevel; |
|||
|
|||
/** 站点类型(读取字典值) */ |
|||
private String pointType; |
|||
|
|||
/** 详细地址 */ |
|||
private String address; |
|||
|
|||
/** 销售区域id */ |
|||
private String saleRegionId; |
|||
|
|||
/** 销售区域 */ |
|||
private String saleRegionPath; |
|||
|
|||
private String saleRegionPathIds; |
|||
|
|||
/** 行政区域id */ |
|||
private String bizRegionId; |
|||
|
|||
/** 行政区域 */ |
|||
private String bizRegionPath; |
|||
|
|||
private String bizRegionPathIds; |
|||
|
|||
/** 纬度 */ |
|||
private String localX; |
|||
|
|||
/** 经度 */ |
|||
private String localY; |
|||
|
|||
/** 地图地址 */ |
|||
private String mapAddress; |
|||
|
|||
/** 备注 */ |
|||
private String remark; |
|||
|
|||
/** 图片多张用句号隔开 */ |
|||
private String[] photos; |
|||
|
|||
/** 创建时间 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
@JsonDeserialize(using = LocalDateTimeDeserializer.class) |
|||
@JsonSerialize(using = LocalDateTimeSerializer.class) |
|||
private LocalDateTime createTime; |
|||
|
|||
/** 最后更新时间 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
@JsonDeserialize(using = LocalDateTimeDeserializer.class) |
|||
@JsonSerialize(using = LocalDateTimeSerializer.class) |
|||
private LocalDateTime updateTime; |
|||
|
|||
/** 所属租户 */ |
|||
@JsonIgnore |
|||
@JsonProperty |
|||
private String tenantId; |
|||
|
|||
/** 逻辑删除标记(0:显示;1:隐藏) */ |
|||
@JsonIgnore |
|||
@JsonProperty |
|||
private String delFlag; |
|||
|
|||
/** 可投放费用标识 */ |
|||
private Integer costFlag; |
|||
|
|||
/** 创建人 */ |
|||
private String createBy; |
|||
|
|||
/** 更新人 */ |
|||
private String updateBy; |
|||
|
|||
} |
|||
|
@ -0,0 +1,70 @@ |
|||
package com.qs.crm.entity; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import com.fasterxml.jackson.annotation.JsonIgnore; |
|||
import com.fasterxml.jackson.annotation.JsonProperty; |
|||
import lombok.Data; |
|||
import org.springframework.format.annotation.DateTimeFormat; |
|||
|
|||
import java.io.Serializable; |
|||
import java.time.LocalDateTime; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 区域档案 实体类 |
|||
* @author YenHex |
|||
* @since 2022-10-10 |
|||
*/ |
|||
@Data |
|||
public class BmsRegion2 implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** id */ |
|||
private String id; |
|||
|
|||
/** 名称 */ |
|||
private String name; |
|||
|
|||
/** 编码 */ |
|||
private String code; |
|||
|
|||
/** 父级ID */ |
|||
private String pid; |
|||
|
|||
/** 层级 */ |
|||
private Integer level; |
|||
|
|||
/** 祖级id */ |
|||
private String pathIds; |
|||
|
|||
/** 祖级id */ |
|||
private String pathNames; |
|||
|
|||
/** 创建时间 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
private LocalDateTime createTime; |
|||
|
|||
/** 创建人 */ |
|||
private String createBy; |
|||
|
|||
/** 更新时间 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
private LocalDateTime updateTime; |
|||
|
|||
/** 更新人 */ |
|||
private String updateBy; |
|||
|
|||
/** 租户id */ |
|||
@JsonIgnore |
|||
@JsonProperty |
|||
private String tenantId; |
|||
|
|||
/** 删除标识 */ |
|||
@JsonIgnore |
|||
@JsonProperty |
|||
private Boolean delFlag; |
|||
} |
|||
|
@ -0,0 +1,150 @@ |
|||
package com.qs.crm.entity; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import com.fasterxml.jackson.annotation.JsonIgnore; |
|||
import com.fasterxml.jackson.annotation.JsonProperty; |
|||
import lombok.Data; |
|||
import org.springframework.format.annotation.DateTimeFormat; |
|||
|
|||
import java.io.Serializable; |
|||
import java.math.BigDecimal; |
|||
import java.time.LocalDateTime; |
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 供应商 实体类 |
|||
* @author YenHex |
|||
* @since 2022-10-11 |
|||
*/ |
|||
@Data |
|||
public class BmsSupplier implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** id */ |
|||
private Long id; |
|||
|
|||
/** 一级区域ID */ |
|||
private String regionFirst; |
|||
|
|||
/** 二级区域ID */ |
|||
private String regionSecond; |
|||
|
|||
/** 三级区域ID */ |
|||
private String regionThird; |
|||
|
|||
/** 四级区域ID */ |
|||
private String regionFourthly; |
|||
|
|||
/** 最子级区域ID */ |
|||
private String regionLast; |
|||
|
|||
/** 行政一级区域ID */ |
|||
private String region2First; |
|||
|
|||
/** 行政二级区域ID */ |
|||
private String region2Second; |
|||
|
|||
/** 行政三级区域ID */ |
|||
private String region2Third; |
|||
|
|||
/** 行政四级区域ID */ |
|||
private String region2Fourthly; |
|||
|
|||
/** 行政最子级区域ID */ |
|||
private String region2Last; |
|||
|
|||
/** 详细地址 */ |
|||
private String address; |
|||
|
|||
/** 名称 */ |
|||
private String name; |
|||
|
|||
/** 客户编码 */ |
|||
private String code; |
|||
|
|||
/** 父级id */ |
|||
private Long pid; |
|||
|
|||
private String pathIds; |
|||
|
|||
private String parentCode; |
|||
|
|||
/** 负责人 */ |
|||
private String userId; |
|||
|
|||
/** 负责人 */ |
|||
private String userCode; |
|||
|
|||
/** 负责人 */ |
|||
private String userName; |
|||
|
|||
private String otherUserIds; |
|||
|
|||
private String otherUserNames; |
|||
|
|||
private String otherUserCodes; |
|||
|
|||
/** 停用 */ |
|||
private Integer stopFlag; |
|||
|
|||
/** 所属账套 */ |
|||
private String belong; |
|||
|
|||
/** 创建时间 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
private LocalDateTime createTime; |
|||
|
|||
/** 创建人 */ |
|||
private String createBy; |
|||
|
|||
/** 更新时间 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
private LocalDateTime updateTime; |
|||
|
|||
/** 更新人 */ |
|||
private String updateBy; |
|||
|
|||
/** 租户id */ |
|||
@JsonIgnore |
|||
@JsonProperty |
|||
private String tenantId; |
|||
|
|||
/** 删除标识 */ |
|||
@JsonIgnore |
|||
@JsonProperty |
|||
private Boolean delFlag; |
|||
|
|||
/** 初始化当前欠费 */ |
|||
private BigDecimal initCurAmount; |
|||
|
|||
/** 初始化欠费(历史记录) */ |
|||
private BigDecimal initHisAmount; |
|||
|
|||
/** 可投放费用标识 */ |
|||
private Integer costFlag; |
|||
|
|||
|
|||
public List<String> listBizRegionIds(){ |
|||
List<String> list = new ArrayList<>(); |
|||
list.add(this.getRegion2First()); |
|||
list.add(this.getRegion2Second()); |
|||
list.add(this.getRegion2Third()); |
|||
list.add(this.getRegion2Fourthly()); |
|||
return list; |
|||
} |
|||
|
|||
public List<String> listSaleRegionIds(){ |
|||
List<String> list = new ArrayList<>(); |
|||
list.add(this.getRegionFirst()); |
|||
list.add(this.getRegionSecond()); |
|||
list.add(this.getRegionThird()); |
|||
list.add(this.getRegionFourthly()); |
|||
return list; |
|||
} |
|||
|
|||
} |
|||
|
@ -0,0 +1,58 @@ |
|||
package com.qs.crm.entity; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import com.fasterxml.jackson.annotation.JsonIgnore; |
|||
import com.fasterxml.jackson.annotation.JsonProperty; |
|||
import lombok.Data; |
|||
import org.springframework.format.annotation.DateTimeFormat; |
|||
|
|||
import java.io.Serializable; |
|||
import java.time.LocalDateTime; |
|||
|
|||
/** |
|||
* 客户渠道关系 实体类 |
|||
* @author YenHex |
|||
* @since 2022-11-03 |
|||
*/ |
|||
@Data |
|||
public class BmsSupplierChannel implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** id */ |
|||
private Long id; |
|||
|
|||
/** 渠道id */ |
|||
private Long channelId; |
|||
|
|||
/** 客户id */ |
|||
private Long supplierId; |
|||
|
|||
/** 创建时间 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
private LocalDateTime createTime; |
|||
|
|||
/** 最后更新时间 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
private LocalDateTime updateTime; |
|||
|
|||
/** 所属租户 */ |
|||
@JsonIgnore |
|||
@JsonProperty |
|||
private String tenantId; |
|||
|
|||
/** 逻辑删除标记(0:显示;1:隐藏) */ |
|||
@JsonIgnore |
|||
@JsonProperty |
|||
private String delFlag; |
|||
|
|||
/** 创建人 */ |
|||
private String createBy; |
|||
|
|||
/** 更新人 */ |
|||
private String updateBy; |
|||
|
|||
} |
|||
|
@ -0,0 +1,106 @@ |
|||
package com.qs.crm.entity; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import com.fasterxml.jackson.annotation.JsonIgnore; |
|||
import lombok.Data; |
|||
import org.springframework.format.annotation.DateTimeFormat; |
|||
|
|||
import java.io.Serializable; |
|||
import java.time.LocalDate; |
|||
import java.time.LocalDateTime; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 系统用户 实体类 |
|||
* @author YenHex |
|||
* @since 2022-03-01 |
|||
*/ |
|||
@Data |
|||
public class SysUser implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** id */ |
|||
private String id; |
|||
|
|||
/** 手机号 */ |
|||
private String mobile; |
|||
|
|||
/** 账号 */ |
|||
private String account; |
|||
|
|||
/** 昵称 */ |
|||
private String name; |
|||
|
|||
/** 编号/工号 */ |
|||
private String code; |
|||
|
|||
/** 密码 */ |
|||
private String password; |
|||
|
|||
/** 头像 */ |
|||
private String icon; |
|||
|
|||
/** 部门ID */ |
|||
private String deptId; |
|||
|
|||
|
|||
/** 入职/复职日期 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd") |
|||
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") |
|||
private LocalDate servingDate; |
|||
|
|||
/** 离职或上一次离职的日期 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd") |
|||
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") |
|||
private LocalDate servingLeaveDate; |
|||
|
|||
/** 是否销售人员 */ |
|||
private Integer salesFlag; |
|||
|
|||
/** 身份证号码 */ |
|||
private String identityNo; |
|||
|
|||
/** 备注 */ |
|||
private String remark; |
|||
|
|||
|
|||
/** 登陆客户端标识:android,ios */ |
|||
private String appClient; |
|||
|
|||
/** app推送token */ |
|||
private String appToken; |
|||
|
|||
/** 致远登陆账户 */ |
|||
private String syAccount; |
|||
|
|||
/** 致远用户id */ |
|||
private String syUserId; |
|||
|
|||
|
|||
/** 创建时间 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
private LocalDateTime createTime; |
|||
|
|||
/** 创建人 */ |
|||
private String createBy; |
|||
|
|||
/** 更新时间 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
private LocalDateTime updateTime; |
|||
|
|||
/** 更新人 */ |
|||
private String updateBy; |
|||
|
|||
/** 删除标识 */ |
|||
@JsonIgnore |
|||
private Boolean delFlag; |
|||
|
|||
/** 校区id */ |
|||
@JsonIgnore |
|||
private String tenantId; |
|||
|
|||
} |
|||
|
@ -0,0 +1,67 @@ |
|||
package com.qs.crm.xltentity; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import com.fasterxml.jackson.annotation.JsonIgnore; |
|||
import com.fasterxml.jackson.annotation.JsonProperty; |
|||
import lombok.Data; |
|||
import org.springframework.format.annotation.DateTimeFormat; |
|||
|
|||
import java.io.Serializable; |
|||
import java.time.LocalDateTime; |
|||
|
|||
/** |
|||
* 渠道 实体类 |
|||
* @author YenHex |
|||
* @since 2022-11-07 |
|||
*/ |
|||
@Data |
|||
public class XltChannel implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** id */ |
|||
private String id; |
|||
|
|||
/** 渠道编码 */ |
|||
private String number; |
|||
|
|||
/** 渠道名称 */ |
|||
private String name; |
|||
|
|||
/** 渠道类型(读取数据字典) */ |
|||
private String channeltype; |
|||
|
|||
/** 备注 */ |
|||
private String remark; |
|||
|
|||
/** 创建时间 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
private LocalDateTime createTime; |
|||
|
|||
/** 最后更新时间 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
private LocalDateTime updateTime; |
|||
|
|||
/** 所属租户 */ |
|||
@JsonIgnore |
|||
@JsonProperty |
|||
private String tenantId; |
|||
|
|||
/** 逻辑删除标记(0:显示;1:隐藏) */ |
|||
@JsonIgnore |
|||
@JsonProperty |
|||
private String delFlag; |
|||
|
|||
/** 创建人 */ |
|||
private String createBy; |
|||
|
|||
/** 更新人 */ |
|||
private String updateBy; |
|||
|
|||
/** 可投放费用标识 */ |
|||
private Integer costFlag; |
|||
|
|||
} |
|||
|
@ -0,0 +1,34 @@ |
|||
package com.qs.crm.xltentity; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import com.fasterxml.jackson.annotation.JsonIgnore; |
|||
import com.fasterxml.jackson.annotation.JsonProperty; |
|||
import lombok.Data; |
|||
import org.springframework.format.annotation.DateTimeFormat; |
|||
|
|||
import java.io.Serializable; |
|||
import java.time.LocalDateTime; |
|||
|
|||
/** |
|||
* 渠道 实体类 |
|||
* @author YenHex |
|||
* @since 2022-11-07 |
|||
*/ |
|||
@Data |
|||
public class XltChannelDealer implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** id */ |
|||
private String id; |
|||
|
|||
/** 渠道ID */ |
|||
private String system_id; |
|||
|
|||
/** 客户ID */ |
|||
private String dealer_id; |
|||
|
|||
private String dealer_number; |
|||
|
|||
} |
|||
|
@ -0,0 +1,31 @@ |
|||
package com.qs.crm.xltentity; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* 渠道 实体类 |
|||
* @author YenHex |
|||
* @since 2022-11-07 |
|||
*/ |
|||
@Data |
|||
public class XltDealer implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** id */ |
|||
private String id; |
|||
|
|||
/** 详细地址 */ |
|||
private String address; |
|||
|
|||
/** 名称 */ |
|||
private String dealer_name; |
|||
|
|||
/** 客户编码 */ |
|||
private String dealer_number; |
|||
|
|||
private String district_name; |
|||
} |
|||
|
@ -0,0 +1,27 @@ |
|||
package com.qs.crm.xltentity; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* 渠道 实体类 |
|||
* @author YenHex |
|||
* @since 2022-11-07 |
|||
*/ |
|||
@Data |
|||
public class XltDealerUser implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** 客户编码 */ |
|||
private String fran_number; |
|||
|
|||
/** 用户user */ |
|||
private String khemp_id; |
|||
|
|||
private String num_no; |
|||
|
|||
private String name; |
|||
} |
|||
|
@ -0,0 +1,43 @@ |
|||
package com.qs.crm.xltentity; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* 渠道 实体类 |
|||
* @author YenHex |
|||
* @since 2022-11-07 |
|||
*/ |
|||
@Data |
|||
public class XltPoint implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** id */ |
|||
private String id; |
|||
|
|||
/** 详细地址 */ |
|||
private String address; |
|||
|
|||
/** 名称 */ |
|||
private String name; |
|||
|
|||
/** 客户编码 */ |
|||
private String number_; |
|||
|
|||
private Double shop_area; |
|||
|
|||
private Integer cash_register; |
|||
|
|||
private String xiancheng; |
|||
|
|||
private String sys_id; |
|||
|
|||
private String type_name; |
|||
|
|||
private String level_name; |
|||
|
|||
private String channel_code; |
|||
} |
|||
|
@ -0,0 +1,125 @@ |
|||
package com.qs.dto; |
|||
|
|||
import lombok.Getter; |
|||
import lombok.Setter; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 统一返回封装 |
|||
* 1.替代旧版的ViewResult |
|||
* 2.支持SmartDoc |
|||
* @author JcYen |
|||
* @date 2021/4/22 |
|||
* @version 2.0 |
|||
*/ |
|||
@Getter |
|||
@Setter |
|||
public class R<T> implements Serializable { |
|||
|
|||
public R(int status, String msg) { |
|||
this.status = status; |
|||
this.msg = msg; |
|||
} |
|||
|
|||
public R(int status, String msg, T data) { |
|||
this.status = status; |
|||
this.msg = msg; |
|||
this.data = data; |
|||
} |
|||
|
|||
/** |
|||
* 状态码 |
|||
*/ |
|||
private Integer status; |
|||
|
|||
/** |
|||
* 信息 |
|||
*/ |
|||
private String msg; |
|||
|
|||
/** |
|||
* 数据 |
|||
*/ |
|||
private T data; |
|||
|
|||
public static final int SUCCESS_STATUS = 200; |
|||
public static final int LOGOUT_STATUS = 401; |
|||
public static final int FORBIDDEN_STATUS = 403; |
|||
public static final int NOT_FOUND_STATUS = 434; |
|||
public static final int FAILED_STATUS = 500; |
|||
|
|||
public static final String SUCCESS_TIPS = "操作成功"; |
|||
public static final String FAILED_TIPS = "操作失败"; |
|||
public static final String FAILED_TIPS_2 = "业务操作失败"; |
|||
public static final String LOGOUT_TIPS = "登录无效"; |
|||
public static final String FORBIDDEN_TIPS = "无权限访问"; |
|||
public static final String NOT_FOUND_TIPS = "数据不存在或被移除"; |
|||
|
|||
public static R ok() { |
|||
return new R(SUCCESS_STATUS,SUCCESS_TIPS,null); |
|||
} |
|||
|
|||
public static R ok(String msg) { |
|||
return new R<>(SUCCESS_STATUS,msg,null); |
|||
} |
|||
|
|||
public static <TYPE> R<TYPE> ok(TYPE data) { |
|||
return new R<>(SUCCESS_STATUS,SUCCESS_TIPS,data); |
|||
} |
|||
|
|||
public static <TYPE> R<TYPE> ok(TYPE data,String message) { |
|||
return new R<>(SUCCESS_STATUS,message,data); |
|||
} |
|||
|
|||
public static R isTrue(Boolean bool){ |
|||
if(bool==null|| !bool){ |
|||
return error(); |
|||
} |
|||
return ok(); |
|||
} |
|||
|
|||
public static R isTrue(Boolean bool, String message){ |
|||
if(bool==null|| !bool){ |
|||
return error(message); |
|||
} |
|||
return ok(null,message); |
|||
} |
|||
|
|||
|
|||
public static <TYPE> R<TYPE> isNotNull(TYPE object){ |
|||
if(object==null){ |
|||
return error(); |
|||
} |
|||
return ok(object,SUCCESS_TIPS); |
|||
} |
|||
|
|||
public static R<?> isOk(Boolean rs){ |
|||
if(rs==null){ |
|||
return error(); |
|||
} |
|||
return ok(); |
|||
} |
|||
|
|||
public static R<?> isOk(Boolean rs,String errMsg){ |
|||
if(rs==null){ |
|||
return error(errMsg); |
|||
} |
|||
return ok(); |
|||
} |
|||
|
|||
public static R error(String message) { |
|||
return new R<>(FAILED_STATUS,message,null); |
|||
} |
|||
|
|||
public static R error() { |
|||
return new R<>(FAILED_STATUS,FAILED_TIPS,null); |
|||
} |
|||
|
|||
public static R error2() { |
|||
return new R<>(FAILED_STATUS,FAILED_TIPS_2,null); |
|||
} |
|||
|
|||
|
|||
} |
@ -0,0 +1,23 @@ |
|||
package com.qs.dto; |
|||
|
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Data; |
|||
|
|||
/** |
|||
* @author YenHex |
|||
* @since 2022/3/7 |
|||
*/ |
|||
@Data |
|||
@AllArgsConstructor |
|||
public class SimpleKeyValue<T> { |
|||
|
|||
/** 键 */ |
|||
private String label; |
|||
|
|||
/** 值 */ |
|||
private T value; |
|||
|
|||
/** 说明 */ |
|||
private String remark; |
|||
|
|||
} |
@ -0,0 +1,30 @@ |
|||
package com.qs.dto; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 树节点 |
|||
* @author YenHex |
|||
* @since 2022/3/1 |
|||
*/ |
|||
@Data |
|||
public class TreeLongNode { |
|||
protected Long id; |
|||
protected Long parentId; |
|||
private Integer sort; |
|||
protected List<TreeLongNode> children = new ArrayList<>(); |
|||
|
|||
public void addChildren(TreeLongNode treeNode) { |
|||
children.add(treeNode); |
|||
} |
|||
|
|||
public List<TreeLongNode> getChildren() { |
|||
if(children.size()<=0){ |
|||
return null; |
|||
} |
|||
return children; |
|||
} |
|||
} |
@ -0,0 +1,30 @@ |
|||
package com.qs.dto; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 树节点 |
|||
* @author YenHex |
|||
* @since 2022/3/1 |
|||
*/ |
|||
@Data |
|||
public class TreeNode { |
|||
protected String id; |
|||
protected String parentId; |
|||
private Integer sort; |
|||
protected List<TreeNode> children = new ArrayList<>(); |
|||
|
|||
public void addChildren(TreeNode treeNode) { |
|||
children.add(treeNode); |
|||
} |
|||
|
|||
public List<TreeNode> getChildren() { |
|||
if(children.size()<=0){ |
|||
return null; |
|||
} |
|||
return children; |
|||
} |
|||
} |
@ -0,0 +1,34 @@ |
|||
package com.qs.task; |
|||
|
|||
import com.qs.crm.BmsChannelSync; |
|||
import com.qs.crm.BmsPointSync; |
|||
import com.qs.crm.BmsSupplierSync; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.scheduling.annotation.Scheduled; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
/** |
|||
* @author YenHex |
|||
* @since 2023/3/16 |
|||
*/ |
|||
@Slf4j |
|||
@Component |
|||
public class TestTask { |
|||
|
|||
private BmsSupplierSync supplierSync; |
|||
private BmsChannelSync channelSync; |
|||
private BmsPointSync pointSync; |
|||
|
|||
@Scheduled(cron = "* * 2 * * ?") |
|||
public void test(){ |
|||
try { |
|||
supplierSync.syncSupplier(); |
|||
channelSync.syncChannel(); |
|||
pointSync.syncPoint(); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
} |
@ -0,0 +1,21 @@ |
|||
package com.qs.test; |
|||
|
|||
import lombok.Data; |
|||
|
|||
/** |
|||
* @author YenHex |
|||
* @since 2023/2/17 |
|||
*/ |
|||
@Data |
|||
public class ChartAxisColumn { |
|||
|
|||
/** 列Id */ |
|||
Long columnId; |
|||
|
|||
/** 列名 */ |
|||
String columnName; |
|||
|
|||
/** 系列坐标值合计 */ |
|||
Double total; |
|||
|
|||
} |
@ -0,0 +1,24 @@ |
|||
package com.qs.test; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @author YenHex |
|||
* @since 2023/2/17 |
|||
*/ |
|||
@Data |
|||
public class ChartDataVo { |
|||
|
|||
/** |
|||
* 列(饼状图的主要参数) |
|||
*/ |
|||
List<ChartAxisColumn> axisColumns; |
|||
|
|||
/** |
|||
* 系列 |
|||
*/ |
|||
List<ChartSeriesItem> seriesItem; |
|||
|
|||
} |
@ -0,0 +1,18 @@ |
|||
package com.qs.test; |
|||
|
|||
import lombok.Data; |
|||
|
|||
/** |
|||
* @author YenHex |
|||
* @since 2023/2/17 |
|||
*/ |
|||
@Data |
|||
public class ChartGroupItem { |
|||
|
|||
/** 组id */ |
|||
private Long groupId; |
|||
|
|||
/** 组名 */ |
|||
private String groupName; |
|||
|
|||
} |
@ -0,0 +1,31 @@ |
|||
package com.qs.test; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @author YenHex |
|||
* @since 2023/2/17 |
|||
*/ |
|||
@Data |
|||
public class ChartSeriesItem { |
|||
|
|||
/** 列Id */ |
|||
Long columnId; |
|||
|
|||
/** 列名 */ |
|||
String columnName; |
|||
|
|||
/** 组id */ |
|||
private Long groupId; |
|||
|
|||
/** 组名 */ |
|||
private String groupName; |
|||
|
|||
/** |
|||
* 值列表(列对应axisColumns) |
|||
*/ |
|||
List<Double> values; |
|||
|
|||
} |
@ -0,0 +1,25 @@ |
|||
package com.qs.test; |
|||
|
|||
/** |
|||
* @author YenHex |
|||
* @since 2023/2/17 |
|||
*/ |
|||
public class PrintChart { |
|||
|
|||
|
|||
public static void main(String[] args) { |
|||
//eg. 统计1-6年纪每个班年纪学生柱状图
|
|||
for (int i = 1; i < 7; i++) { |
|||
ChartSeriesItem seriesItem = new ChartSeriesItem(); |
|||
seriesItem.setColumnId(new Long(i)); |
|||
seriesItem.setColumnName("小学"+i+"年级"); |
|||
for (int j = 0; j < 2; j++) { |
|||
if(j==0){ |
|||
|
|||
} |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
} |
@ -0,0 +1,506 @@ |
|||
package com.qs.util; |
|||
|
|||
|
|||
import org.apache.commons.lang3.time.DateFormatUtils; |
|||
|
|||
import java.text.DecimalFormat; |
|||
import java.text.ParseException; |
|||
import java.text.SimpleDateFormat; |
|||
import java.util.Calendar; |
|||
import java.util.Date; |
|||
|
|||
|
|||
public class DateUtils { |
|||
|
|||
/** |
|||
* 仅显示年月日,例如 2015-08-11. |
|||
*/ |
|||
public static final String DATE_FORMAT = "yyyy-MM-dd"; |
|||
/** |
|||
* 显示年月日时分秒,例如 2015-08-11 09:51:53. |
|||
*/ |
|||
public static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; |
|||
|
|||
/** |
|||
* 仅显示时分秒,例如 09:51:53. |
|||
*/ |
|||
public static final String TIME_FORMAT = "HH:mm:ss"; |
|||
|
|||
/** |
|||
* 每天的毫秒数 8640000. |
|||
*/ |
|||
public static final long MILLISECONDS_PER_DAY = 86400000L; |
|||
|
|||
/** |
|||
* 每周的天数. |
|||
*/ |
|||
public static final long DAYS_PER_WEEK = 7L; |
|||
|
|||
/** |
|||
* 每小时毫秒数. |
|||
*/ |
|||
public static final long MILLISECONDS_PER_HOUR = 3600000L; |
|||
|
|||
/** |
|||
* 每分钟秒数. |
|||
*/ |
|||
public static final long SECONDS_PER_MINUTE = 60L; |
|||
|
|||
/** |
|||
* 每小时秒数. |
|||
*/ |
|||
public static final long SECONDS_PER_HOUR = 3600L; |
|||
|
|||
/** |
|||
* 每天秒数. |
|||
*/ |
|||
public static final long SECONDS_PER_DAY = 86400L; |
|||
|
|||
/** |
|||
* 每个月秒数,默认每月30天. |
|||
*/ |
|||
public static final long SECONDS_PER_MONTH = 2592000L; |
|||
|
|||
/** |
|||
* 每年秒数,默认每年365天. |
|||
*/ |
|||
public static final long SECONDS_PER_YEAR = 31536000L; |
|||
|
|||
/** |
|||
* 常用的时间格式. |
|||
*/ |
|||
private static String[] parsePatterns = { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy/MM/dd", |
|||
"yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm" }; |
|||
|
|||
/** |
|||
* 得到当前日期字符串. |
|||
* @return String 日期字符串,例如2015-08-11 |
|||
* @since 1.0 |
|||
*/ |
|||
public static String getDate() { |
|||
return getDate(DateUtils.DATE_FORMAT); |
|||
} |
|||
|
|||
/** |
|||
* 得到当前时间字符串. |
|||
* @return String 时间字符串,例如 09:51:53 |
|||
* @since 1.0 |
|||
*/ |
|||
public static String getTime() { |
|||
return formatDate(new Date(), DateUtils.TIME_FORMAT); |
|||
} |
|||
|
|||
/** |
|||
* 得到当前日期和时间字符串. |
|||
* @return String 日期和时间字符串,例如 2015-08-11 09:51:53 |
|||
* @since 1.0 |
|||
*/ |
|||
public static String getDateTime() { |
|||
return formatDate(new Date(), DateUtils.DATETIME_FORMAT); |
|||
} |
|||
|
|||
/** |
|||
* 获取当前时间指定格式下的字符串. |
|||
* @param pattern |
|||
* 转化后时间展示的格式,例如"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss"等 |
|||
* @return String 格式转换之后的时间字符串. |
|||
* @since 1.0 |
|||
*/ |
|||
public static String getDate(String pattern) { |
|||
return DateFormatUtils.format(new Date(), pattern); |
|||
} |
|||
|
|||
/** |
|||
* 获取指定日期的字符串格式. |
|||
* @param date 需要格式化的时间,不能为空 |
|||
* @param pattern 时间格式,例如"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss"等 |
|||
* @return String 格式转换之后的时间字符串. |
|||
* @since 1.0 |
|||
*/ |
|||
public static String getDate(Date date, String pattern) { |
|||
return DateFormatUtils.format(date, pattern); |
|||
} |
|||
|
|||
/** |
|||
* 获取日期时间字符串,默认格式为(yyyy-MM-dd). |
|||
* @param date 需要转化的日期时间 |
|||
* @param pattern 时间格式,例如"yyyy-MM-dd" "HH:mm:ss" "E"等 |
|||
* @return String 格式转换后的时间字符串 |
|||
* @since 1.0 |
|||
*/ |
|||
public static String formatDate(Date date, Object... pattern) { |
|||
String formatDate = null; |
|||
if (pattern != null && pattern.length > 0) { |
|||
formatDate = DateFormatUtils.format(date, pattern[0].toString()); |
|||
} else { |
|||
formatDate = DateFormatUtils.format(date, DateUtils.DATE_FORMAT); |
|||
} |
|||
return formatDate; |
|||
} |
|||
|
|||
/** |
|||
* 获取当前年份字符串. |
|||
* @return String 当前年份字符串,例如 2015 |
|||
* @since 1.0 |
|||
*/ |
|||
public static String getYear() { |
|||
return formatDate(new Date(), "yyyy"); |
|||
} |
|||
|
|||
/** |
|||
* 获取当前月份字符串. |
|||
* @return String 当前月份字符串,例如 08 |
|||
* @since 1.0 |
|||
*/ |
|||
public static String getMonth() { |
|||
return formatDate(new Date(), "MM"); |
|||
} |
|||
|
|||
/** |
|||
* 获取当前天数字符串. |
|||
* @return String 当前天数字符串,例如 11 |
|||
* @since 1.0 |
|||
*/ |
|||
public static String getDay() { |
|||
return formatDate(new Date(), "dd"); |
|||
} |
|||
|
|||
/** |
|||
* 获取当前星期字符串. |
|||
* @return String 当前星期字符串,例如星期二 |
|||
* @since 1.0 |
|||
*/ |
|||
public static String getWeek() { |
|||
return formatDate(new Date(), "E"); |
|||
} |
|||
|
|||
/** |
|||
* 将日期型字符串转换为日期格式. |
|||
* 支持的日期字符串格式包括"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", |
|||
* "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm" |
|||
* @param str |
|||
* @return Date |
|||
* @since 1.0 |
|||
*/ |
|||
public static Date parseDate(Object str) { |
|||
if (str == null) { |
|||
return null; |
|||
} |
|||
try { |
|||
return org.apache.commons.lang3.time.DateUtils.parseDate(str.toString(), parsePatterns); |
|||
} catch (ParseException e) { |
|||
return null; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 获取当前日期与指定日期相隔的天数. |
|||
* @param date 给定的日期 |
|||
* @return long 日期间隔天数,正数表示给定日期在当前日期之前,负数表示在当前日期之后 |
|||
* @since 1.0 |
|||
*/ |
|||
public static long pastDays(Date date) { |
|||
// 将指定日期转换为yyyy-MM-dd格式
|
|||
date = DateUtils.parseDate(DateUtils.formatDate(date, DateUtils.DATE_FORMAT)); |
|||
// 当前日期转换为yyyy-MM-dd格式
|
|||
Date currentDate = DateUtils.parseDate(DateUtils.formatDate(new Date(), DateUtils.DATE_FORMAT)); |
|||
long t=0; |
|||
if(date!=null&¤tDate!=null){ |
|||
t = (currentDate.getTime() - date.getTime()) / DateUtils.MILLISECONDS_PER_DAY; |
|||
} |
|||
return t; |
|||
} |
|||
|
|||
/** |
|||
* 获取当前日期指定天数之后的日期. |
|||
* @param num 相隔天数 |
|||
* @return Date 日期 |
|||
* @since 1.0 |
|||
*/ |
|||
public static Date nextDay(int num) { |
|||
Calendar curr = Calendar.getInstance(); |
|||
curr.set(Calendar.DAY_OF_MONTH, curr.get(Calendar.DAY_OF_MONTH) + num); |
|||
return curr.getTime(); |
|||
} |
|||
|
|||
/** |
|||
* 获取当前日期指定月数之后的日期. |
|||
* @param num 间隔月数 |
|||
* @return Date 日期 |
|||
* @since 1.0 |
|||
*/ |
|||
public static Date nextMonth(int num) { |
|||
Calendar curr = Calendar.getInstance(); |
|||
curr.set(Calendar.MONTH, curr.get(Calendar.MONTH) + num); |
|||
return curr.getTime(); |
|||
} |
|||
|
|||
/** |
|||
* 获取当前日期指定年数之后的日期. |
|||
* @param num 间隔年数 |
|||
* @return Date 日期 |
|||
* @since 1.0 |
|||
*/ |
|||
public static Date nextYear(int num) { |
|||
Calendar curr = Calendar.getInstance(); |
|||
curr.set(Calendar.YEAR, curr.get(Calendar.YEAR) + num); |
|||
return curr.getTime(); |
|||
} |
|||
|
|||
/** |
|||
* 将 Date 日期转化为 Calendar 类型日期. |
|||
* @param date 给定的时间,若为null,则默认为当前时间 |
|||
* @return Calendar Calendar对象 |
|||
* @since 1.0 |
|||
*/ |
|||
public static Calendar getCalendar(Date date) { |
|||
Calendar calendar = Calendar.getInstance(); |
|||
// calendar.setFirstDayOfWeek(Calendar.SUNDAY);//每周从周日开始
|
|||
// calendar.setMinimalDaysInFirstWeek(1); // 设置每周最少为1天
|
|||
if (date != null) { |
|||
calendar.setTime(date); |
|||
} |
|||
return calendar; |
|||
} |
|||
|
|||
/** |
|||
* 计算两个日期之间相差天数. |
|||
* @param start 计算开始日期 |
|||
* @param end 计算结束日期 |
|||
* @return long 相隔天数 |
|||
* @since 1.0 |
|||
*/ |
|||
public static long getDaysBetween(Date start, Date end) { |
|||
// 将指定日期转换为yyyy-MM-dd格式
|
|||
start = DateUtils.parseDate(DateUtils.formatDate(start, DateUtils.DATE_FORMAT)); |
|||
// 当前日期转换为yyyy-MM-dd格式
|
|||
end = DateUtils.parseDate(DateUtils.formatDate(end, DateUtils.DATE_FORMAT)); |
|||
|
|||
long diff=0; |
|||
if(start!=null&&end!=null) { |
|||
diff = (end.getTime() - start.getTime()) / DateUtils.MILLISECONDS_PER_DAY; |
|||
} |
|||
return diff; |
|||
} |
|||
|
|||
/** |
|||
* 计算两个日期之前相隔多少周. |
|||
* @param start 计算开始时间 |
|||
* @param end 计算结束时间 |
|||
* @return long 相隔周数,向下取整 |
|||
* @since 1.0 |
|||
*/ |
|||
public static long getWeeksBetween(Date start, Date end) { |
|||
return getDaysBetween(start, end) / DateUtils.DAYS_PER_WEEK; |
|||
} |
|||
|
|||
/** |
|||
* 获取与指定日期间隔给定天数的日期. |
|||
* @param specifiedDay 给定的字符串格式日期,支持的日期字符串格式包括"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss", |
|||
* "yyyy-MM-dd HH:mm", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", |
|||
* "yyyy/MM/dd HH:mm" |
|||
* @param num 间隔天数 |
|||
* @return String 间隔指定天数之后的日期 |
|||
* @since 1.0 |
|||
*/ |
|||
public static String getSpecifiedDayAfter(String specifiedDay, int num) { |
|||
Date specifiedDate = parseDate(specifiedDay); |
|||
Calendar c = Calendar.getInstance(); |
|||
c.setTime(specifiedDate); |
|||
int day = c.get(Calendar.DATE); |
|||
c.set(Calendar.DATE, day + num); |
|||
String dayAfter = formatDate(c.getTime(), DateUtils.DATE_FORMAT); |
|||
return dayAfter; |
|||
} |
|||
|
|||
/** |
|||
* 计算两个日期之前间隔的小时数. |
|||
* |
|||
* @param date1 |
|||
* 结束时间 |
|||
* @param date2 |
|||
* 开始时间 |
|||
* @return String 相差的小时数,保留一位小数 |
|||
* @since 1.0 |
|||
*/ |
|||
public static String dateMinus(Date date1, Date date2) { |
|||
if (date1 == null || date2 == null) { |
|||
return "0"; |
|||
} |
|||
Long r = date1.getTime() - date2.getTime(); |
|||
DecimalFormat df = new DecimalFormat("#.0"); |
|||
double result = r * 1.0 / DateUtils.MILLISECONDS_PER_HOUR; |
|||
return df.format(result); |
|||
} |
|||
|
|||
/** |
|||
* 获取当前季度 . |
|||
* |
|||
* @return Integer 当前季度数 |
|||
* @since 1.0 |
|||
*/ |
|||
public static Integer getCurrentSeason() { |
|||
Calendar calendar = Calendar.getInstance(); |
|||
Integer month = calendar.get(Calendar.MONTH) + 1; |
|||
int season = 0; |
|||
if (month >= 1 && month <= 3) { |
|||
season = 1; |
|||
} else if (month >= 4 && month <= 6) { |
|||
season = 2; |
|||
} else if (month >= 7 && month <= 9) { |
|||
season = 3; |
|||
} else if (month >= 10 && month <= 12) { |
|||
season = 4; |
|||
} |
|||
return season; |
|||
} |
|||
|
|||
/** |
|||
* 将以秒为单位的时间转换为其他单位. |
|||
* |
|||
* @param seconds |
|||
* 秒数 |
|||
* @return String 例如 16分钟前、2小时前、3天前、4月前、5年前等 |
|||
* @since 1.0 |
|||
*/ |
|||
public static String getIntervalBySeconds(long seconds) { |
|||
StringBuffer buffer = new StringBuffer(); |
|||
if (seconds < SECONDS_PER_MINUTE) { |
|||
buffer.append(seconds).append("秒前"); |
|||
} else if (seconds < SECONDS_PER_HOUR) { |
|||
buffer.append(seconds / SECONDS_PER_MINUTE).append("分钟前"); |
|||
} else if (seconds < SECONDS_PER_DAY) { |
|||
buffer.append(seconds / SECONDS_PER_HOUR).append("小时前"); |
|||
} else if (seconds < SECONDS_PER_MONTH) { |
|||
buffer.append(seconds / SECONDS_PER_DAY).append("天前"); |
|||
} else if (seconds < SECONDS_PER_YEAR) { |
|||
buffer.append(seconds / SECONDS_PER_MONTH).append("月前"); |
|||
} else { |
|||
buffer.append(seconds / DateUtils.SECONDS_PER_YEAR).append("年前"); |
|||
} |
|||
return buffer.toString(); |
|||
} |
|||
|
|||
/** |
|||
* |
|||
* getNowTimeBefore(记录时间相当于目前多久之前) |
|||
* |
|||
* @param seconds |
|||
* 秒 |
|||
* @return |
|||
* @exception @since |
|||
* 1.0 |
|||
* @author rlliu |
|||
*/ |
|||
public static String getNowTimeBefore(long seconds) { |
|||
StringBuffer buffer = new StringBuffer(); |
|||
buffer.append("上传于"); |
|||
if (seconds < 3600) { |
|||
buffer.append((long) Math.floor(seconds / 60.0)).append("分钟前"); |
|||
} else if (seconds < 86400) { |
|||
buffer.append((long) Math.floor(seconds / 3600.0)).append("小时前"); |
|||
} else if (seconds < 604800) { |
|||
buffer.append((long) Math.floor(seconds / 86400.0)).append("天前"); |
|||
} else if (seconds < 2592000) { |
|||
buffer.append((long) Math.floor(seconds / 604800.0)).append("周前"); |
|||
} else if (seconds < 31104000) { |
|||
buffer.append((long) Math.floor(seconds / 2592000.0)).append("月前"); |
|||
} else { |
|||
buffer.append((long) Math.floor(seconds / 31104000.0)).append("年前"); |
|||
} |
|||
return buffer.toString(); |
|||
} |
|||
|
|||
/** |
|||
* |
|||
* getMonthsBetween(查询两个日期相隔的月份) |
|||
* |
|||
* @param startDate 开始日期1 (格式yyyy-MM-dd) |
|||
* @param endDate 截止日期2 (格式yyyy-MM-dd) |
|||
* @return |
|||
*/ |
|||
public static int getMonthsBetween(String startDate, String endDate) { |
|||
Calendar c1 = Calendar.getInstance(); |
|||
Calendar c2 = Calendar.getInstance(); |
|||
c1.setTime(DateUtils.parseDate(startDate)); |
|||
c2.setTime(DateUtils.parseDate(endDate)); |
|||
int year = c2.get(Calendar.YEAR) - c1.get(Calendar.YEAR); |
|||
int month = c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH); |
|||
return Math.abs(year * 12 + month); |
|||
} |
|||
|
|||
/** |
|||
* |
|||
* getDayOfWeek(获取当前日期是星期几) |
|||
* |
|||
* @param dateStr 日期 |
|||
* @return 星期几 |
|||
*/ |
|||
public static String getDayOfWeek(String dateStr) { |
|||
String[] weekOfDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; |
|||
Date date = parseDate(dateStr); |
|||
Calendar calendar = Calendar.getInstance(); |
|||
calendar.setTime(date); |
|||
int num = calendar.get(Calendar.DAY_OF_WEEK) - 1; |
|||
return weekOfDays[num]; |
|||
} |
|||
|
|||
/** |
|||
* sns 格式 如几秒前,几分钟前,几小时前,几天前,几个月前,几年后, ... 精细,类如某个明星几秒钟之前发表了一篇微博 |
|||
* |
|||
* @param createTime |
|||
* @return |
|||
*/ |
|||
public static String snsFormat(long createTime) { |
|||
long now = System.currentTimeMillis() / 1000; |
|||
long differ = now - createTime / 1000; |
|||
String dateStr = ""; |
|||
if (differ <= 60) { |
|||
dateStr = "刚刚"; |
|||
} else if (differ <= 3600) { |
|||
dateStr = (differ / 60) + "分钟前"; |
|||
} else if (differ <= 3600 * 24) { |
|||
dateStr = (differ / 3600) + "小时前"; |
|||
} else if (differ <= 3600 * 24 * 30) { |
|||
dateStr = (differ / (3600 * 24)) + "天前"; |
|||
} else { |
|||
Date date = new Date(createTime); |
|||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
|||
dateStr = sdf.format(date); |
|||
} |
|||
return dateStr; |
|||
} |
|||
|
|||
/** |
|||
* 得到UTC时间,类型为字符串,格式为"yyyy-MM-dd HH:mm" |
|||
* 如果获取失败,返回null |
|||
* @return |
|||
*/ |
|||
public static String getUTCTimeStr() { |
|||
StringBuffer UTCTimeBuffer = new StringBuffer(); |
|||
// 1、取得本地时间:
|
|||
Calendar cal = Calendar.getInstance() ; |
|||
// 2、取得时间偏移量:
|
|||
int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET); |
|||
// 3、取得夏令时差:
|
|||
int dstOffset = cal.get(java.util.Calendar.DST_OFFSET); |
|||
// 4、从本地时间里扣除这些差量,即可以取得UTC时间:
|
|||
cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset)); |
|||
int year = cal.get(Calendar.YEAR); |
|||
int month = cal.get(Calendar.MONTH)+1; |
|||
int day = cal.get(Calendar.DAY_OF_MONTH); |
|||
int hour = cal.get(Calendar.HOUR_OF_DAY); |
|||
int minute = cal.get(Calendar.MINUTE); |
|||
UTCTimeBuffer.append(year).append("-").append(month).append("-").append(day) ; |
|||
UTCTimeBuffer.append(" ").append(hour).append(":").append(minute) ; |
|||
try{ |
|||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); |
|||
sdf.parse(UTCTimeBuffer.toString()) ; |
|||
return UTCTimeBuffer.toString() ; |
|||
}catch(ParseException e) |
|||
{ |
|||
e.printStackTrace() ; |
|||
} |
|||
return null ; |
|||
} |
|||
} |
@ -0,0 +1,125 @@ |
|||
package com.qs.util; |
|||
|
|||
import lombok.experimental.UtilityClass; |
|||
|
|||
import java.time.LocalDate; |
|||
import java.time.LocalDateTime; |
|||
import java.time.ZoneId; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.util.Arrays; |
|||
import java.util.List; |
|||
import java.util.concurrent.atomic.AtomicInteger; |
|||
import java.util.stream.Collectors; |
|||
|
|||
/** |
|||
* @author YenHex |
|||
* @since 2022/2/28 |
|||
*/ |
|||
@UtilityClass |
|||
public class StringUtils { |
|||
|
|||
/** 订单号生成(NEW) **/ |
|||
private static final AtomicInteger SEQ = new AtomicInteger(1000); |
|||
private static final AtomicInteger SEQ2 = new AtomicInteger(10001); |
|||
private static final DateTimeFormatter DF_FMT_PREFIX = DateTimeFormatter.ofPattern("yyMMddHHmmssSS"); |
|||
private static ZoneId ZONE_ID = ZoneId.of("Asia/Shanghai"); |
|||
|
|||
public static String generateOrderNo(){ |
|||
LocalDateTime dataTime = LocalDateTime.now(ZONE_ID); |
|||
if(SEQ.intValue()>9990){ |
|||
SEQ.getAndSet(1000); |
|||
} |
|||
return dataTime.format(DF_FMT_PREFIX)+SEQ.getAndIncrement(); |
|||
} |
|||
|
|||
public static Long genShortLong(){ |
|||
String id = genShortId(); |
|||
return Long.parseLong(id); |
|||
} |
|||
|
|||
public static String genShortId() { |
|||
// 2 位 年份的后两位 22001 后五位走随机 每天清一次缓存 99999 10
|
|||
StringBuilder idSb = new StringBuilder(); |
|||
/// 年份后两位 和 一年中的第几天
|
|||
LocalDate now = LocalDate.now(); |
|||
String year = now.getYear() + ""; |
|||
year = year.substring(2); |
|||
String day = now.getDayOfYear() + ""; |
|||
/// 补0
|
|||
if (day.length() < 3) { |
|||
StringBuilder sb = new StringBuilder(); |
|||
for (int i = day.length(); i < 3; i++) { |
|||
sb.append("0"); |
|||
} |
|||
day = sb.append(day).toString(); |
|||
} |
|||
idSb.append(year).append(day); |
|||
/// 后五位补随机数
|
|||
if(SEQ2.intValue()>9999900){ |
|||
SEQ2.getAndSet(1000001); |
|||
} |
|||
idSb.append(SEQ2.getAndIncrement()); |
|||
return idSb.toString(); |
|||
} |
|||
|
|||
public static void main(String[] args) { |
|||
|
|||
for (int i = 0; i < 100; i++) { |
|||
//System.out.println(genShortId());
|
|||
System.out.println(generateOrderNo()); |
|||
} |
|||
} |
|||
|
|||
public static String getUrlByList(List<?> list,String param){ |
|||
StringBuilder sb = new StringBuilder(); |
|||
for (Object val : list) { |
|||
sb.append("&"+param+"="+val); |
|||
} |
|||
return sb.toString(); |
|||
} |
|||
|
|||
/** |
|||
* 格式化 |
|||
* @param exp 含{}的表达式 |
|||
* @param params 参数(注意跳过空值) |
|||
* @return |
|||
*/ |
|||
public static String format(String exp,String... params){ |
|||
StringBuilder builder = new StringBuilder(exp); |
|||
int idx_p = 0; |
|||
while (hasText(builder,"{}")){ |
|||
int idx = builder.indexOf("{}"); |
|||
if(idx_p<params.length&¶ms[idx_p]!=null){ |
|||
builder.replace(idx,idx+2,params[idx_p]); |
|||
idx_p++; |
|||
}else { |
|||
break; |
|||
} |
|||
} |
|||
return builder.toString(); |
|||
} |
|||
|
|||
private static boolean hasText(StringBuilder a,String text){ |
|||
return a.toString().contains(text); |
|||
} |
|||
|
|||
public static List<String> splitIdString(String ids){ |
|||
if(ids==null){ |
|||
return null; |
|||
} |
|||
if(ids.contains(",")){ |
|||
String[] idsA= ids.split(","); |
|||
return Arrays.asList(idsA); |
|||
} |
|||
return Arrays.asList(ids); |
|||
} |
|||
|
|||
public static List<Long> splitIdLong(String ids){ |
|||
List<String> strs = splitIdString(ids); |
|||
if(strs!=null){ |
|||
return strs.stream().map(a->Long.parseLong(a)).collect(Collectors.toList()); |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,28 @@ |
|||
#Spring配置 |
|||
spring: |
|||
servlet: |
|||
multipart: |
|||
max-file-size: 100MB |
|||
max-request-size: 160MB |
|||
#服务配置 |
|||
server: |
|||
port: 8061 |
|||
servlet: |
|||
context-path: / |
|||
# 日志配置 |
|||
logging: |
|||
level: |
|||
ROOT: info |
|||
com.qs: debug |
|||
org.springframework: info |
|||
java.io: warn |
|||
|
|||
jsl: |
|||
# url: jdbc:mysql://192.168.0.9:3306/jsl_mall_qs_test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true |
|||
url: jdbc:mysql://183.56.249.148:3306/jsl_cost_base?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true |
|||
user: root |
|||
pass: '@Jsl2282125' |
|||
xlt: |
|||
url: jdbc:sqlserver://rm-wz93l107hc277n9ieco.sqlserver.rds.aliyuncs.com:3433;DatabaseName=xiaolutong |
|||
user: qs_db_user |
|||
pass: Aa135246 |
Loading…
Reference in new issue