Commit e75b82e7 authored by 位宇华's avatar 位宇华

利润数据同步

parent 5e2e3d70
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
<component name="ArtifactManager">
<artifact type="exploded-war" name="datasync-Service:Web exploded">
<output-path>$PROJECT_DIR$/out/artifacts/datasync_Service_Web_exploded</output-path>
<root id="root">
<element id="javaee-facet-resources" facet="datasync-Service/web/Web" />
<element id="directory" name="WEB-INF">
<element id="directory" name="classes">
<element id="module-output" name="datasync-Service" />
</element>
</element>
</root>
</artifact>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/">
</Context>
package com.tianyi.sync.controller;
import com.tianyi.sync.service.ProfitDataSyncService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProfitDataSyncController {
private final ProfitDataSyncService profitDataSyncService;
public ProfitDataSyncController(ProfitDataSyncService profitDataSyncService) {
this.profitDataSyncService = profitDataSyncService;
}
@PostMapping("/profit/data/sync")
public Object profitDataSync() {
return profitDataSyncService.profitSync();
}
}
package com.tianyi.sync.mapper.master;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.tianyi.sync.model.ParmDataModel;
import com.tianyi.sync.model.ProfitModel;
@DS("master")
public interface ProfitDataSyncMapper {
ProfitModel getProfit(ParmDataModel parmDataModel);
}
package com.tianyi.sync.mapper.slave;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.tianyi.sync.model.FreeQueryProfitModel;
import com.tianyi.sync.model.IndexAccountModel;
import com.tianyi.sync.model.ParmDataModel;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@DS("slave")
public interface ProfitSlaveMapper {
void delete(ParmDataModel profitModel);
List<String> getCodeList();
List<IndexAccountModel> getAccount(@Param("indexName") String indexname);
void save(@Param("freeQueryProfitModelList") List<FreeQueryProfitModel> freeQueryProfitModelList);
}
package com.tianyi.sync.model;
import java.io.Serializable;
public class FreeQueryProfitModel implements Serializable {
private String yearm;
private String accountcode;
private String accountname;
private String entity;
private String money;
private String indexname;
public String getYearm() {
return yearm;
}
public void setYearm(String yearm) {
this.yearm = yearm;
}
public String getAccountcode() {
return accountcode;
}
public void setAccountcode(String accountcode) {
this.accountcode = accountcode;
}
public String getAccountname() {
return accountname;
}
public void setAccountname(String accountname) {
this.accountname = accountname;
}
public String getEntity() {
return entity;
}
public void setEntity(String entity) {
this.entity = entity;
}
public String getMoney() {
return money;
}
public void setMoney(String money) {
this.money = money;
}
public String getIndexname() {
return indexname;
}
public void setIndexname(String indexname) {
this.indexname = indexname;
}
}
package com.tianyi.sync.model;
import java.io.Serializable;
public class IndexAccountModel implements Serializable {
private String indexname;
private String account;
public String getIndexname() {
return indexname;
}
public void setIndexname(String indexname) {
this.indexname = indexname;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
}
package com.tianyi.sync.model;
import java.io.Serializable;
public class ProfitModel implements Serializable {
private String pk_task;
private String ZB4;
private String ZB9;
private String ZB198;
public String getPk_task() {
return pk_task;
}
public void setPk_task(String pk_task) {
this.pk_task = pk_task;
}
public String getZB4() {
return ZB4;
}
public void setZB4(String ZB4) {
this.ZB4 = ZB4;
}
public String getZB9() {
return ZB9;
}
public void setZB9(String ZB9) {
this.ZB9 = ZB9;
}
public String getZB198() {
return ZB198;
}
public void setZB198(String ZB198) {
this.ZB198 = ZB198;
}
}
package com.tianyi.sync.service;
public interface ProfitDataSyncService {
Object profitSync();
}
package com.tianyi.sync.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.tianyi.sync.mapper.master.ProfitDataSyncMapper;
import com.tianyi.sync.mapper.slave.ProfitSlaveMapper;
import com.tianyi.sync.model.FreeQueryProfitModel;
import com.tianyi.sync.model.IndexAccountModel;
import com.tianyi.sync.model.ParmDataModel;
import com.tianyi.sync.model.ProfitModel;
import com.tianyi.sync.service.ProfitDataSyncService;
import com.tianyi.sync.utils.DateUtils;
import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StopWatch;
import java.lang.reflect.Field;
import java.util.LinkedList;
import java.util.List;
@Service
public class ProfitDataSyncServiceImpl implements ProfitDataSyncService {
private final static Logger logger = LoggerFactory.getLogger(ProfitDataSyncServiceImpl.class);
private final ProfitSlaveMapper profitSlaveMapper;
private final ProfitDataSyncMapper profitDataSyncMapper;
public ProfitDataSyncServiceImpl(ProfitSlaveMapper profitSlaveMapper, ProfitDataSyncMapper profitDataSyncMapper) {
this.profitSlaveMapper = profitSlaveMapper;
this.profitDataSyncMapper = profitDataSyncMapper;
}
@Override
@SneakyThrows
@DSTransactional
public Object profitSync() {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
JSONObject jsonObject = new JSONObject();
String lastMonth = DateUtils.getYearAndMonthLast();
//String lastMonth = "2024-06";
ParmDataModel parmDataModel = new ParmDataModel();
parmDataModel.setPeriod(lastMonth.replaceAll("-", ""));
parmDataModel.setYear(lastMonth.substring(0, 4));
String monthStr = lastMonth.substring(5, 7);
parmDataModel.setMonth(StringUtils.startsWith(monthStr, "0") ? lastMonth.substring(6, 7) : monthStr);
logger.info("参数:{}", JSON.toJSONString(parmDataModel));
//先清除表内数据
profitSlaveMapper.delete(parmDataModel);
List<String> icpCodeList = profitSlaveMapper.getCodeList();
List<String> stringList = new LinkedList<>();
for (String str : icpCodeList) {
parmDataModel.setEntity(str);
ProfitModel profitModel = profitDataSyncMapper.getProfit(parmDataModel);
if (ObjectUtils.isEmpty(profitModel)) {
stringList.add(str);
logger.info("unexpected event {}:", "entityCode为" + str + "未查询到数据!");
continue;
}
Field[] fields = profitModel.getClass().getDeclaredFields();
List<FreeQueryProfitModel> freeQueryProfitModelList = new LinkedList<>();
for (Field field : fields) {
String indexname = field.getName();
if (StringUtils.startsWith(indexname, "ZB")) {
List<IndexAccountModel> indexAccountModelList = profitSlaveMapper.getAccount(indexname);
if (CollectionUtils.isEmpty(indexAccountModelList)) {
continue;
}
for (IndexAccountModel indexAccountModel : indexAccountModelList) {
FreeQueryProfitModel freeQueryProfitModel = new FreeQueryProfitModel();
Field declaredField = profitModel.getClass().getDeclaredField("ZB4");
declaredField.setAccessible(true);
Object o = declaredField.get(profitModel);
if (o == null) {
continue;
} else {
freeQueryProfitModel.setMoney(StringUtils.contains((String) o, "E") ? "0" : ((String) o));
}
freeQueryProfitModel.setIndexname(field.getName());
freeQueryProfitModel.setAccountcode(indexAccountModel.getAccount());
freeQueryProfitModel.setAccountname(indexAccountModel.getIndexname());
freeQueryProfitModel.setEntity(str);
freeQueryProfitModel.setYearm(parmDataModel.getPeriod());
freeQueryProfitModelList.add(freeQueryProfitModel);
}
}
}
if (!CollectionUtils.isEmpty(freeQueryProfitModelList)) {
profitSlaveMapper.save(freeQueryProfitModelList);
}
}
jsonObject.put("description", String.join(",", stringList) + "未查询到数据!");
jsonObject.put("msg", "数据同步成功!");
jsonObject.put("code", 200);
stopWatch.stop();
logger.info("执行时间:{}", stopWatch.getLastTaskTimeMillis());
return jsonObject;
}
}
package com.tianyi.sync.task;
import com.tianyi.sync.service.DataSyncService;
import com.tianyi.sync.service.ProfitDataSyncService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
......@@ -16,8 +17,11 @@ public class ScheduleTask {
private final DataSyncService dataSyncService;
public ScheduleTask(DataSyncService dataSyncService) {
private final ProfitDataSyncService profitDataSyncService;
public ScheduleTask(DataSyncService dataSyncService, ProfitDataSyncService profitDataSyncService) {
this.dataSyncService = dataSyncService;
this.profitDataSyncService = profitDataSyncService;
}
/**
......@@ -29,5 +33,13 @@ public class ScheduleTask {
dataSyncService.sync();
logger.info("定时任务执行成功!!!!!!");
}
/**
* 每月5号零点执行一次
*/
@Async
@Scheduled(cron = "0 0 5 * * ?")
public void profitTask() {
profitDataSyncService.profitSync();
logger.info("定时任务执行成功!!!!!!");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tianyi.sync.mapper.master.ProfitDataSyncMapper">
<select id="getProfit" resultType="com.tianyi.sync.model.ProfitModel">
SELECT a0.pk_task,
a0.numvalue14 AS ZB4,
a0.numvalue19 AS ZB9,
a1.txtvalue16 AS ZB198
FROM epmp_br.tb_tdnum2 a0
INNER JOIN epmp_br.tb_tdtxt2 a1 ON a0.pk_task = a1.pk_task
WHERE a0.pk_task = (select pk_obj
FROM epmp_br.bp_task_2024
WHERE (
pk_sheet = '1763068682081665027'
AND YEAR = #{year}
AND MONTH = #{month}
AND entity = #{entity}
AND mvtype = 'isEmpty'
AND version = 'isEmpty'
AND busisystem = 'BR'
AND pk_paradims = ''
AND ytenant_id = 'dmrn1j0i'))
AND a0.ytenant_id = 'dmrn1j0i'
AND a0.systemcode = 'BR'
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tianyi.sync.mapper.slave.ProfitSlaveMapper">
<delete id="delete">
delete
from elimtable.free_query_profit
where yearm = #{period}
</delete>
<select id="getCodeList" resultType="java.lang.String">
select code
from elimtable.free_entity
</select>
<select id="getAccount" resultType="com.tianyi.sync.model.IndexAccountModel">
select indexname, account
from elimtable.index_account
where indexcode = #{indexName}
</select>
<insert id="save">
INSERT INTO free_query_profit
(yearm,accountcode,accountname,entity,money,indexname)
values
<foreach collection="freeQueryProfitModelList" item="item" index="index" separator=",">
(#{item.yearm},#{item.accountcode},#{item.accountname},#{item.entity},#{item.money},#{item.indexname})
</foreach>
</insert>
</mapper>
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment