Merge remote-tracking branch 'origin/frJob' into release

release
王琦 2 years ago
commit 912cf27d94
  1. 31
      dxhy-core/src/main/java/com/dxhy/core/dao/frTask/QueryDetailDataDao.java
  2. 37
      dxhy-core/src/main/java/com/dxhy/core/dao/frTask/RecordToQueryDao.java
  3. 17
      dxhy-core/src/main/java/com/dxhy/core/dao/frTask/VoucherRecordItemDao.java
  4. 120
      dxhy-core/src/main/java/com/dxhy/core/enmu/FplxEnmu.java
  5. 49
      dxhy-core/src/main/java/com/dxhy/core/enmu/KjkmTaxEnmu.java
  6. 10
      dxhy-core/src/main/java/com/dxhy/core/entity/frJob/FpTaxAmount.java
  7. 10
      dxhy-core/src/main/java/com/dxhy/core/entity/frJob/KjkmSl.java
  8. 271
      dxhy-core/src/main/java/com/dxhy/core/entity/frJob/VoucherRecordItemEntity.java
  9. 79
      dxhy-core/src/main/java/com/dxhy/core/entity/frJob/VoucherRecordQuery.java
  10. 92
      dxhy-core/src/main/java/com/dxhy/core/entity/frJob/VoucherRecordQueryDetail.java
  11. 21
      dxhy-core/src/main/java/com/dxhy/core/service/frJob/QueryDetailDataService.java
  12. 105
      dxhy-core/src/main/java/com/dxhy/core/service/frJob/QueryDetailDataServiceImpl.java
  13. 10
      dxhy-core/src/main/java/com/dxhy/core/service/frJob/RecordToQueryService.java
  14. 215
      dxhy-core/src/main/java/com/dxhy/core/service/frJob/RecordToQueryServiceImpl.java
  15. 8
      dxhy-core/src/main/java/com/dxhy/core/service/frJob/VoucherRecordItemService.java
  16. 60
      dxhy-core/src/main/java/com/dxhy/core/service/frJob/VoucherRecordItemServiceImpl.java
  17. 44
      dxhy-core/src/main/java/com/dxhy/core/task/FrDataTask.java
  18. 188
      dxhy-core/src/main/resources/mapper/frJob/QueryDetailDataDao.xml
  19. 140
      dxhy-core/src/main/resources/mapper/frJob/RecordToQueryDao.xml
  20. 20
      dxhy-core/src/main/resources/mapper/frJob/VoucherRecordItemDao.xml

@ -0,0 +1,31 @@
package com.dxhy.core.dao.frTask;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dxhy.core.entity.frJob.VoucherRecordQueryDetail;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
@Mapper
public interface QueryDetailDataDao extends BaseMapper<VoucherRecordQueryDetail> {
Date getBeginTime(String kjkmbh);
Date getBeginTimefromRecord();
List<VoucherRecordQueryDetail> getDataFromRecord(@Param("beginTime") String beginTime,
@Param("endTime") String endTime,
@Param("kjkmbh") String kjkmbh);
void insertDataToItem(List<VoucherRecordQueryDetail> voucherRecordQueryDetails);
List<VoucherRecordQueryDetail> getDataFromRecordJe(@Param("beginTime") String beginTime,
@Param("endTime") String endTime,
@Param("kjkmbh") String kjkmbh);
List<VoucherRecordQueryDetail> getDataFromRecordXx(@Param("beginTime") String beginTime,
@Param("endTime") String endTime,
@Param("kjkmbh") String kjkmbh);
}

@ -0,0 +1,37 @@
package com.dxhy.core.dao.frTask;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dxhy.core.entity.frJob.FpTaxAmount;
import com.dxhy.core.entity.frJob.VoucherRecordQuery;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
@Mapper
public interface RecordToQueryDao extends BaseMapper<VoucherRecordQuery> {
List<VoucherRecordQuery> getDataFromRecordItems(@Param("start")String beginTime,
@Param("end") String endTime,
@Param("kjkmbh")String kjkmbh);
Date getBeginTime(String kjkmbh);
Date getBeginTimefromRecord();
void insertDataToQuery(List<VoucherRecordQuery> voucherRecordQuerys);
List<FpTaxAmount> getTaxAmount(List<String> bzdhs);
List<VoucherRecordQuery> getDataXFromRecordItems(@Param("start") String start,
@Param("end") String end,
@Param("kjkmbh")String kjkmbh);
List<FpTaxAmount> getXTaxAmount(List<String> bzdhs);
List<VoucherRecordQuery> getDataZFromRecordItems(@Param("start") String start,
@Param("end") String end,
@Param("kjkmbh") String kjkmbh);
}

@ -0,0 +1,17 @@
package com.dxhy.core.dao.frTask;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dxhy.core.entity.frJob.VoucherRecordItemEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface VoucherRecordItemDao extends BaseMapper<VoucherRecordItemEntity> {
List<VoucherRecordItemEntity> getByTime(@Param("start")String start,
@Param("end") String end,
@Param("kjkmbh") String kjkmbh);
}

@ -0,0 +1,120 @@
package com.dxhy.core.enmu;
import com.google.common.collect.Maps;
import java.util.Map;
public enum FplxEnmu {
/**
* 专票代码
*/
ZP("01", "增值税专用发票"),
/**
* 机动车代码
*/
JDC("03","机动车销售统一发票"),
/**
* 普票代码
*/
PP("04", "增值税普通发票"),
/**
* 电子票代码
*/
DZP("10", "增值税电子普通发票"),
/**
* 卷式发票代码
*/
JSP("11", "增值税普通发票(卷票)"),
/**
* 通行费发票代码
*/
TXF("14", "增值税电子普通发票(通行费)"),
ESC("15", "二手车销售统一发票"),
/**
* 电子专票
*/
DZZP("08", "增值税电子专用发票"),
/**
* 海关缴款书
*/
HGJKS("17", "海关缴款书"),
/**
* 电子发票增值税专用发票
*/
QDZZP("31", "电子发票(增值税专用发票)"),
/**
* 电子发票普通发票
*/
QDPP("32", "电子发票(普通发票)"),
/**
* 机动车销售电子统一发票
*/
JDCDZ("183", "机动车销售电子统一发票"),
/**
* 二手车销售电子统一发票
*/
ESCDZ("184", "二手车销售电子统一发票"),
/**
* 纸质发票(增值税专用发票)
*/
ZZDZ("185", "纸质发票(增值税专用发票)"),
/**
* 纸质发票(普通发票)
*/
ZZPP("186", "纸质发票(普通发票)"),
/**
* 纸质发票机动车销售统一发票
*/
ZZJDC("187", "纸质发票(机动车销售统一发票)"),
/**
* 纸质发票二手车销售统一发票
*/
ZZESC("188", "纸质发票(二手车销售统一发票)"),
/**
* 增加电子发票铁路电子客票
*/
TLKP("283", "增加电子发票(铁路电子客票)"),
/**
* 电子发票航空运输客票电子行程单
*/
HKDZFP("161", "电子发票(航空运输客票电子行程单)"),
/**
* 货物运输业增值税专用发票
*/
HWYH("02", "货物运输业增值税专用发票");
private String fplxDm;
private String fplxMc;
FplxEnmu(String fplxDm, String fplxMc) {
this.fplxDm = fplxDm;
this.fplxMc = fplxMc;
}
public String getFplxDm() {
return fplxDm;
}
public void setFplxDm(String fplxDm) {
this.fplxDm = fplxDm;
}
public String getfplxMc() {
return fplxMc;
}
public void setFplxMc(String fplxMc) {
this.fplxMc = fplxMc;
}
public static Map<String,String> getFplxMap(){
Map<String,String> fplxMap = Maps.newHashMap();
for (FplxEnmu value : FplxEnmu.values()) {
fplxMap.put(value.fplxDm,value.fplxMc);
}
return fplxMap;
}
}

@ -0,0 +1,49 @@
package com.dxhy.core.enmu;
import com.google.common.collect.Maps;
import java.util.Map;
public enum KjkmTaxEnmu {
YJJXZZSSL("2221010101","16"),
YJJXZZSSS("2221010102","13"),
YJJXZZSS("2221010103","10"),
YJJXZZSJ("2221010104","9"),
YJJXZZSL("2221010105","6"),
YJJXZZSW("2221010106","5"),
YJJXZZST("2221010107","3"),
YJJXZZSE("2221010108","2"),
YJJXZZSZ("2221010109","0"),
YJJXZZSSQ("2221010110","17"),
YJJXZZSSY("2221010111","11"),
YJJXZZSY("2221010112","1"),
YJJXZZSYW("2221010113","1.5"),
YJXXZZSSL("2221010201","16"),
YJXXZZSSS("2221010202","13"),
YJXXZZSS("2221010203","10"),
YJXXZZSJ("2221010204","9"),
YJXXZZSL("2221010205","6"),
YJXXZZSW("2221010206","5"),
YJXXZZST("2221010207","3"),
YJXXZZSE("2221010208","2"),
YJXXZZSZ("2221010209","0"),
YJXXZZSSQ("2221010210","17"),
YJXXZZSSY("2221010211","11"),
YJXXZZSY("2221010212","1");
private String kjkm;
private String tax;
KjkmTaxEnmu(String kjkm,String tax){
this.kjkm = kjkm;
this.tax = tax;
}
public static Map<String,String> getTaxMap(){
Map<String,String> taxMap = Maps.newHashMap();
for (KjkmTaxEnmu value : KjkmTaxEnmu.values()) {
taxMap.put(value.kjkm,value.tax);
}
return taxMap;
}
}

@ -0,0 +1,10 @@
package com.dxhy.core.entity.frJob;
import lombok.Data;
@Data
public class FpTaxAmount {
private String key;
private String fpse;
private String fpje;
}

@ -0,0 +1,10 @@
package com.dxhy.core.entity.frJob;
import lombok.Data;
@Data
public class KjkmSl {
private String kjkm;
private String sl;
}

@ -0,0 +1,271 @@
package com.dxhy.core.entity.frJob;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
@Data
@TableName("voucher_record_item")
public class VoucherRecordItemEntity implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(type = IdType.AUTO)
/**
* 主键
*/
private Long id;
/**
* 和主键关联的id
*/
private Long relationId;
/**
* 行项目编码
*/
private String docln;
/**
* 借贷标识
*/
private String drcrk;
/**
* 借贷描述 s借 h贷
*/
private String zdrcrk;
/**
* 科目编码
*/
private String racct;
/**
* 科目描述
*/
private String txt50;
/**
* 借方金额
*/
private String zwslj;
/**
* 贷方金额
*/
private String zwsld;
/**
* 公司代码货币
*/
private String rhcur;
/**
* 交易货币
*/
private String rwcur;
/**
* 本位币借方金额
*/
private String zhslj;
/**
* 本位币贷方金额
*/
private String zhsld;
/**
* 公司代码货币
*/
private String phcur;
/**
* 供应商编码
*/
private String lifnr;
/**
* 供应商名称
*/
private String zname;
/**
* 客户编码
*/
private String kunnr;
/**
* 物料编码
*/
private String matnr;
/**
* 物料名称
*/
private String maktx;
/**
* 客户名称
*/
private String zname2;
/**
* 供应商名称
*/
private String zname1;
/**
* 数量
*/
private String msl;
/**
* 单位
*/
private String runit;
/**
* 税码
*/
private String mwskz;
/**
* 税率
*/
private String kbetr;
/**
* 成本中心
*/
private String rcntr;
/**
* 成本中心名称
*/
private String ktext;
/**
* wbs编码
*/
private String psPosid;
/**
* wbs名称
*/
private String post1;
/**
* 订单编号
*/
private String aufnr;
/**
* 订单描述
*/
private String zktext;
/**
* 销售订单
*/
private String kdauf;
/**
* 销售订单行
*/
private String kdpos;
/**
* 是否是集成销售业务
*/
private String zzjcfflag;
/**
* 资产编码
*/
private String anln1;
/**
* 资产名称
*/
private String zaatxt50;
/**
* 功能范围
*/
private String rfarea;
/**
* 功能范围名称
*/
private String fkbtx;
/**
* 矿别
*/
private String ktype;
/**
* 是否是集成销售业务如果有销售订单号则认为是集成销售设置为x
*/
private String zzjcflag;
/**
* 矿别名称
*/
private String zkname;
/**
* zzfld1
*/
private String zzfld1;
/**
* zzfld2
*/
private String zzfld2;
/**
* zzfld3
*/
private String zzfld3;
/**
* zzfld4
*/
private String zzfld4;
/**
* zzfld5
*/
private String zzfld5;
/**
* zzfld6
*/
private String zzfld6;
/**
* zzfld7
*/
private String zzfld7;
/**
* zzfld8
*/
private String zzfld8;
/**
* zzfld9
*/
private String zzfld9;
/**
* zzfld10
*/
private String zzfld10;
}

@ -0,0 +1,79 @@
package com.dxhy.core.entity.frJob;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
@Data
@TableName("voucher_record_query")
public class VoucherRecordQuery {
private static final long serialVersionUID = 1L;
/**
* id
*/
private String id;
/**
* zq
*/
private String zq;
/**
* xfdm
*/
private String xfdm;
/**
* xfmc
*/
private String xfmc;
/**
* kb
*/
private String kb;
/**
* kjkmbh
*/
private String kjkmbh;
/**
* 会计科目
*/
private String kjkm;
/**
* sl
*/
private String sl;
/**
* 报账单号
*/
private String bzdh;
/**
* 会计凭证
*/
private String kjpz;
/**
* 发票税额
*/
private String fpse;
/**
* sap税额
*/
private String sapse;
/**
* 创建时间
*/
private Date createTime;
}

@ -0,0 +1,92 @@
package com.dxhy.core.entity.frJob;
import lombok.Data;
@Data
public class VoucherRecordQueryDetail {
private static final long serialVersionUID = 1L;
/**
* id
*/
private String id;
/**
* uuid
*/
private String uuid;
/**
* zq
*/
private String zq;
/**
* xfdm
*/
private String xfdm;
/**
* xfmc
*/
private String xfmc;
/**
* kb
*/
private String kb;
/**
* 报账单号
*/
private String bzdh;
/**
* 会计凭证
*/
private String kjpz;
/**
* 发票税额
*/
private String fpse;
/**
* 会计科目
*/
private String kjkm;
/**
* kjkmbh
*/
private String kjkmbh;
/**
* sl
*/
private String sl;
/**
* fpdm
*/
private String fpdm;
/**
* fphm
*/
private String fphm;
/**
* fplx
*/
private String fplx;
/**
* fplxmc
*/
private String fplxmc;
/**
* 创建时间
*/
private String createTime;
}

@ -0,0 +1,21 @@
package com.dxhy.core.service.frJob;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dxhy.core.entity.frJob.VoucherRecordQueryDetail;
import java.text.ParseException;
public interface QueryDetailDataService extends IService<VoucherRecordQueryDetail> {
//插入进项数据
void insertJxDataToQueryDetail();
//插入销项数据
void insertXxDataToQueryDetail();
//插入主营业务收入数据
void insertZyDataToQueryDetail();
String[] getTime(String km);
}

@ -0,0 +1,105 @@
package com.dxhy.core.service.frJob;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dxhy.common.constant.DbConstant;
import com.dxhy.common.datasource.config.DynamicContextHolder;
import com.dxhy.core.dao.frTask.QueryDetailDataDao;
import com.dxhy.core.enmu.FplxEnmu;
import com.dxhy.core.entity.frJob.VoucherRecordQueryDetail;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
@Service("queryDetailDataService")
public class QueryDetailDataServiceImpl extends ServiceImpl<QueryDetailDataDao, VoucherRecordQueryDetail>
implements QueryDetailDataService {
@Autowired
private QueryDetailDataDao queryDetailDataDao;
private static final String JXZZS = "22210101";
private static final String XXZZS = "22210102";
private static final String ZYYWSR = "6001";
@Override
public void insertJxDataToQueryDetail(){
//1.查询时间
DynamicContextHolder.push("business"+ DbConstant.BUSINESS_READ);
String[] time = getTime(JXZZS);
//2.按照时间查询增量数据
List<VoucherRecordQueryDetail> dataFromRecordItems = queryDetailDataDao.getDataFromRecord(time[0], time[1],JXZZS);
//3.添加发票类型
if (dataFromRecordItems != null && dataFromRecordItems.size() != 0){
dataFromRecordItems.stream().forEach(e->e.setFplxmc(FplxEnmu.getFplxMap().get(e.getFplx())));
//4.添加入库
this.saveOrUpdateBatch(dataFromRecordItems);
}
}
@Override
public void insertXxDataToQueryDetail(){
//1.查询时间
DynamicContextHolder.push("business"+DbConstant.BUSINESS_READ);
String[] time = getTime(XXZZS);
//2.按照时间查询增量数据
List<VoucherRecordQueryDetail> dataFromRecordItems = queryDetailDataDao.getDataFromRecordXx(time[0], time[1],XXZZS);
//3.添加发票类型
if (dataFromRecordItems != null && dataFromRecordItems.size() != 0){
dataFromRecordItems.stream().forEach(e->e.setFplxmc(FplxEnmu.getFplxMap().get(e.getFplx())));
//4.添加入库
this.saveOrUpdateBatch(dataFromRecordItems);
}
}
@Override
public void insertZyDataToQueryDetail(){
//1.查询时间
DynamicContextHolder.push("business"+DbConstant.BUSINESS_READ);
String[] time = getTime(ZYYWSR);
//2.按照时间查询增量数据
List<VoucherRecordQueryDetail> dataFromRecordItems = queryDetailDataDao.getDataFromRecordJe(time[0], time[1],ZYYWSR);
//3添加发票类型
if (dataFromRecordItems != null && dataFromRecordItems.size() != 0){
dataFromRecordItems.stream().forEach(e->e.setFplxmc(FplxEnmu.getFplxMap().get(e.getFplx())));
//4.添加入库
this.saveOrUpdateBatch(dataFromRecordItems);
}
}
@Override
public String[] getTime(String km){
//1.获取增量数据开始时间
DynamicContextHolder.push("business"+DbConstant.BUSINESS_READ);
Date beginTime = queryDetailDataDao.getBeginTime(km);
//2.第一次取原表时间
if (beginTime == null){
beginTime = queryDetailDataDao.getBeginTimefromRecord();
}
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//3.时间转换求结束日期
Calendar calendar = Calendar.getInstance();
calendar.setTime(beginTime);
calendar.add(Calendar.DAY_OF_MONTH,-1);
//4.开始时间减一天
String begin = format.format(calendar.getTime());
//5.结束时间为现在加一天
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_MONTH,1);
String end = format.format(calendar.getTime());
String[] time = {begin,end};
return time;
}
}

@ -0,0 +1,10 @@
package com.dxhy.core.service.frJob;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dxhy.core.entity.frJob.VoucherRecordQuery;
public interface RecordToQueryService extends IService<VoucherRecordQuery>{
void getDataForFr();
}

@ -0,0 +1,215 @@
package com.dxhy.core.service.frJob;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dxhy.common.constant.DbConstant;
import com.dxhy.common.datasource.config.DynamicContextHolder;
import com.dxhy.core.dao.frTask.RecordToQueryDao;
import com.dxhy.core.enmu.KjkmTaxEnmu;
import com.dxhy.core.entity.frJob.FpTaxAmount;
import com.dxhy.core.entity.frJob.VoucherRecordQuery;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service("recordToQueryService")
public class RecordToQueryServiceImpl extends ServiceImpl<RecordToQueryDao, VoucherRecordQuery> implements RecordToQueryService {
@Resource
private RecordToQueryDao recordToQueryDao;
@Resource
private QueryDetailDataService queryDetailDataService;
@Resource
private VoucherRecordItemService voucherRecordItemService;
private final String JXZZS = "22210101";
private final String XXZZS = "22210102";
private final String ZYYWSR = "6001";
private final String JXSZC = "2221010900";
@Override
public void getDataForFr() {
//清洗sap错误税率
boolean flag = voucherRecordItemService.refreshTax();
if (!flag){
throw new RuntimeException("刷新sap传送数据税率失败");
}
//开始插入主数据信息
boolean flag1 = this.insertJxDataToQuery();
if (flag1){
queryDetailDataService.insertJxDataToQueryDetail();
}
boolean flag2 = this.insertXxDataToQuery();
if (flag2){
queryDetailDataService.insertXxDataToQueryDetail();
}
boolean flag3 = this.insertZyDataToQuery();
if (flag3){
queryDetailDataService.insertZyDataToQueryDetail();
}
this.insertOutDataToQuery();
}
public boolean insertJxDataToQuery() {
boolean flag = false;
//1.获取时间
DynamicContextHolder.push("business"+ DbConstant.BUSINESS_READ);
String[] time = getTime(JXZZS);
//2.查询数据
List<VoucherRecordQuery> voucherRecordQuerys =
recordToQueryDao.getDataFromRecordItems(time[0], time[1],JXZZS);
if (voucherRecordQuerys != null && voucherRecordQuerys.size() > 0){
//3.查询税率
Map<String, String> taxMap = KjkmTaxEnmu.getTaxMap();
//4.清洗税率
voucherRecordQuerys.forEach(v->{v.setSl(taxMap.get(v.getKjkmbh()));});
//5.报账单号去重
List<String> bzdhs
= voucherRecordQuerys.stream().map(VoucherRecordQuery::getBzdh)
.distinct().collect(Collectors.toList());
//6.根据报账单号获取发票税额
List<FpTaxAmount> taxAmounts = recordToQueryDao.getTaxAmount(bzdhs);
if (taxAmounts != null && taxAmounts.size()>0){
Map<String, String> amountMap = taxAmounts.stream().collect(Collectors.toMap(FpTaxAmount::getKey, FpTaxAmount::getFpse));
//7.添加税率
voucherRecordQuerys.forEach(v->v.setFpse(amountMap.get(v.getSl()+v.getBzdh())==null?"0":amountMap.get(v.getSl()+v.getBzdh())));
}
//8.保存或更新
flag = this.saveOrUpdateBatch(voucherRecordQuerys);
}
return flag;
}
public boolean insertXxDataToQuery() {
boolean flag = false;
//1.获取时间
DynamicContextHolder.push("business"+DbConstant.BUSINESS_READ);
String[] time = getTime(XXZZS);
//2.查询数据
List<VoucherRecordQuery> voucherRecordQuerys =
recordToQueryDao.getDataXFromRecordItems(time[0],time[1],XXZZS);
if (voucherRecordQuerys != null && voucherRecordQuerys.size() > 0) {
//3.查询税率
Map<String, String> taxMap = KjkmTaxEnmu.getTaxMap();
//4.清洗税率
voucherRecordQuerys.forEach(v -> {
v.setSl(taxMap.get(v.getKjkmbh()));
});
//5.报账单号去重
List<String> bzdhs
= voucherRecordQuerys.stream().map(VoucherRecordQuery::getBzdh)
.distinct().collect(Collectors.toList());
//6.根据报账单号获取发票税额
List<FpTaxAmount> taxAmounts = recordToQueryDao.getXTaxAmount(bzdhs);
if (taxAmounts != null && taxAmounts.size() > 0) {
Map<String, String> amountMap = taxAmounts.stream().collect(Collectors.toMap(FpTaxAmount::getKey, FpTaxAmount::getFpse));
//7.添加税率
voucherRecordQuerys.forEach(v -> v.setFpse(amountMap.get(v.getSl() + v.getBzdh()) == null ? "0" : amountMap.get(v.getSl() + v.getBzdh())));
}
//8.保存或更新
flag = this.saveOrUpdateBatch(voucherRecordQuerys);
}
return flag;
}
public boolean insertZyDataToQuery() {
boolean flag = false;
//1.获取时间
DynamicContextHolder.push("business"+DbConstant.BUSINESS_READ);
String[] time = getTime(ZYYWSR);
//2.查询数据
List<VoucherRecordQuery> voucherRecordQuerys =
recordToQueryDao.getDataZFromRecordItems(time[0],time[1],ZYYWSR);
if (voucherRecordQuerys != null && voucherRecordQuerys.size() > 0) {
//3.报账单号去重
List<String> bzdhs
= voucherRecordQuerys.stream().map(VoucherRecordQuery::getBzdh)
.distinct().collect(Collectors.toList());
//4.根据报账单号获取发票税额
List<FpTaxAmount> taxAmounts = recordToQueryDao.getXTaxAmount(bzdhs);
if (taxAmounts != null && taxAmounts.size() > 0) {
Map<String, String> amountMap = taxAmounts.stream().collect(Collectors.toMap(FpTaxAmount::getKey, FpTaxAmount::getFpje));
//5.添加税率
voucherRecordQuerys.forEach(v -> v.setFpse(amountMap.get(v.getSl() + v.getBzdh()) == null ? "0" : amountMap.get(v.getSl() + v.getBzdh())));
}
//6.保存或更新
flag = this.saveOrUpdateBatch(voucherRecordQuerys);
}
return flag;
}
public void insertOutDataToQuery() {
//获取时间
DynamicContextHolder.push("business"+DbConstant.BUSINESS_READ);
String[] time = this.getTime(JXSZC);
//查询数据
List<VoucherRecordQuery> dataFromRecordItems = recordToQueryDao.getDataFromRecordItems(time[0], time[1], JXSZC);
if (dataFromRecordItems != null && dataFromRecordItems.size() != 0){
this.saveOrUpdateBatch(dataFromRecordItems);
}
}
String[] getTime(String km){
//1.获取增量数据对应时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date beginTime = recordToQueryDao.getBeginTime(km);
//第一次数据为空
if (beginTime == null){
beginTime = recordToQueryDao.getBeginTimefromRecord();
}
Calendar cal = Calendar.getInstance();
cal.setTime(beginTime);
cal.add(Calendar.DAY_OF_MONTH,-1);
String start = sdf.format(cal.getTime());
//结束日期设置为明天
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_MONTH,1);
String end = sdf.format(cal.getTime());
String[] time = {start,end};
return time;
}
}

@ -0,0 +1,8 @@
package com.dxhy.core.service.frJob;
import java.text.ParseException;
public interface VoucherRecordItemService {
boolean refreshTax();
}

@ -0,0 +1,60 @@
package com.dxhy.core.service.frJob;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dxhy.common.constant.DbConstant;
import com.dxhy.common.datasource.config.DynamicContextHolder;
import com.dxhy.core.dao.frTask.VoucherRecordItemDao;
import com.dxhy.core.enmu.KjkmTaxEnmu;
import com.dxhy.core.entity.frJob.VoucherRecordItemEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Service("voucherRecordItemService")
@Slf4j
public class VoucherRecordItemServiceImpl extends ServiceImpl<VoucherRecordItemDao, VoucherRecordItemEntity> implements VoucherRecordItemService {
@Resource
private VoucherRecordItemDao voucherRecordItemDao;
@Resource
private QueryDetailDataService queryDetailDataService;
private static final String JXZZS = "22210101";
private static final String XXZZS = "22210102";
@Override
public boolean refreshTax(){
try {
DynamicContextHolder.push("business"+DbConstant.BUSINESS_READ);
String[] jxTime = queryDetailDataService.getTime(JXZZS);
//查询进项数据
List<VoucherRecordItemEntity> jxVoucherRecordItems = voucherRecordItemDao.getByTime(jxTime[0], jxTime[1], JXZZS);
//税率枚举
Map<String, String> taxMap = KjkmTaxEnmu.getTaxMap();
if (jxVoucherRecordItems != null && jxVoucherRecordItems.size() != 0){
jxVoucherRecordItems.stream().forEach(e->e.setKbetr(taxMap.get(e.getRacct())));
this.updateBatchById(jxVoucherRecordItems);
}
String[] xxTime = queryDetailDataService.getTime(XXZZS);
//查询销项数据
List<VoucherRecordItemEntity> xxVoucherRecordItems = voucherRecordItemDao.getByTime(xxTime[0], xxTime[1], XXZZS);
if (xxVoucherRecordItems != null && xxVoucherRecordItems.size() != 0){
xxVoucherRecordItems.stream().forEach(e->e.setKbetr(taxMap.get(e.getRacct())));
this.updateBatchById(xxVoucherRecordItems);
}
}catch (Exception e){
e.printStackTrace();
log.error("税率刷新时错误信息为{}",e.getMessage());
return false;
}
return true;
}
}

@ -0,0 +1,44 @@
package com.dxhy.core.task;
import com.dxhy.common.constant.DbConstant;
import com.dxhy.common.datasource.config.DynamicContextHolder;
import com.dxhy.core.job.entity.ScheduleJobEntity;
import com.dxhy.core.job.service.ScheduleJobService;
import com.dxhy.core.service.frJob.RecordToQueryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component("frDataTask")
@Slf4j
public class FrDataTask {
@Resource
private ScheduleJobService scheduleJobService;
@Resource
private RecordToQueryService recordToQueryService;
public void frIncrementData() {
log.info("帆软抽取增量数据定时任务开始--");
DynamicContextHolder.push(DbConstant.BASICS_READ);
ScheduleJobEntity scheduleJobEntity = scheduleJobService.queryByBeanName("frDataTask", "frIncrementData");
if (scheduleJobEntity != null && "0".equals(scheduleJobEntity.getJobStatus())) {
try {
scheduleJobEntity.setJobStatus("1");
DynamicContextHolder.push(DbConstant.BASICS_WRITE);
scheduleJobService.updateById(scheduleJobEntity);
recordToQueryService.getDataForFr();
log.info("帆软抽取增量数据定时任务结束--");
} catch (Exception e) {
e.printStackTrace();
log.error("帆软定时任务异常信息{}",e.getMessage());
} finally {
log.info("帆软抽取增量数据定时--重置执行状态");
scheduleJobEntity.setJobStatus("0");
DynamicContextHolder.push(DbConstant.BASICS_WRITE);
scheduleJobService.updateById(scheduleJobEntity);
}
}
}
}

@ -0,0 +1,188 @@
<?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.dxhy.core.dao.frTask.QueryDetailDataDao">
<resultMap id="RecordToQuery" type="com.dxhy.core.entity.frJob.VoucherRecordQueryDetail">
<id property="id" column="id"/>
<result property="uuid" column="uuid"/>
<result property="zq" column="zq"/>
<result property="xfdm" column="xfdm"/>
<result property="xfmc" column="xfmc"/>
<result property="kb" column="kb"/>
<result property="kjkmbh" column="kjkmbh"/>
<result property="kjkm" column="kjkm"/>
<result property="bzdh" column="bzdh"/>
<result property="kjpz" column="kjpz"/>
<result property="fplx" column="fplx"/>
<result property="fphm" column="fphm"/>
<result property="fpdm" column="fpdm"/>
<result property="fpse" column="fpse"/>
<result property="sl" column="sl"/>
<result property="createTime" column="create_time"/>
</resultMap>
<select id="getDataFromRecord" resultMap="RecordToQuery">
select CONCAT(v.kjkmbh,t.uuid) as id,
t.uuid as uuid,
LEFT(v.budat,7) as zq,
v.xfdm,
v.xfmc,
v.kb,
v.kjkmbh,
v.kjkm,
t.bzdh,
GROUP_CONCAT(DISTINCT v.kjpz) as kjpz,
t.invoice_type as fplx,
t.invoice_no as fphm,
t.invoice_code as fpdm,
sum(CAST(d.tax_amount as decimal(16,2))) as fpse,
v.sl,
v.create_time
from t_dx_record_invoice t inner join dxhy_detail.t_dx_record_invoice_detail d
on t.uuid = d.uuid
inner join (
select r.zbzdh,
CASE
WHEN LOCATE('.',i.kbetr) >0
THEN CAST(i.kbetr as decimal(4,1))
ELSE CAST(i.kbetr as decimal(3))
END as sl,
r.bukrs as xfdm,
r.butxt as xfmc,
i.racct as kjkmbh,
i.txt50 as kjkm,
GROUP_CONCAT(DISTINCT r.belnr) as kjpz,
i.zkname as kb,
SUM(IFNULL(CAST(i.zhslj as DECIMAL(20,2)),0.00)) as sapse,
r.budat,
r.create_time
from voucher_record_item i inner join voucher_record r
on i.relation_id = r.id
where i.racct like CONCAT(#{kjkmbh},'%')
and r.create_time between #{beginTime} and #{endTime}
and r.zbzdh != ''
group by r.zbzdh,i.racct
) v on t.bzdh = v.zbzdh
where d.tax_rate = v.sl
and t.invoice_type in ('01','03','08','14','31','183')
group by d.uuid,d.tax_rate
</select>
<select id="getBeginTime" resultType="java.util.Date" parameterType="java.lang.String">
select STR_TO_DATE(create_time,'%Y-%m-%d %H:%i:%s') as createTime
from voucher_record_query_detail
where kjkmbh like CONCAT(#{kjkmbh},'%')
order by create_time desc limit 1
</select>
<select id="getBeginTimefromRecord" resultType="java.util.Date">
select create_time from voucher_record order by create_time limit 1
</select>
<insert id="insertDataToItem" parameterType="com.dxhy.core.entity.frJob.VoucherRecordQueryDetail">
insert IGNORE into voucher_record_query_item( `id`, `uuid`, `bzdh`, `kjpz`, `fpdm`, `fphm`, `fplx`,
`fpje`, `fpse`, `createTime`) values
<foreach collection="voucherRecordQueryItemItems" item="voucherRecordQueryItem" separator=",">
(#{voucherRecordQueryItem.id},#{voucherRecordQueryItem.uuid},#{voucherRecordQueryItem.bzdh},
#{voucherRecordQueryItem.kjpz},#{voucherRecordQueryItem.fpdm},#{voucherRecordQueryItem.fphm},
#{voucherRecordQueryItem.fplx},#{voucherRecordQueryItem.fpje},#{voucherRecordQueryItem.createTimev})
</foreach>
</insert>
<select id="getDataFromRecordJe" resultMap="RecordToQuery">
select CONCAT(v.kjkmbh,t.uuid) as id,
t.uuid as uuid,
LEFT(v.budat,7) as zq,
v.xfdm,
v.xfmc,
v.kb,
v.kjkmbh,
v.kjkm,
t.bzdh,
GROUP_CONCAT(DISTINCT v.kjpz) as kjpz,
t.invoice_type as fplx,
t.invoice_no as fphm,
t.invoice_code as fpdm,
sum(CAST(d.detail_amount as decimal(16,2))) as fpse,
v.sl,
v.create_time
from t_dx_sale_record_invoice t inner join dxhy_detail.t_dx_record_invoice_detail_sales d
on t.uuid = d.uuid
inner join (
select r.zbzdh,
CASE
WHEN LOCATE('.',i.kbetr) >0
THEN CAST(i.kbetr as decimal(4,1))
ELSE CAST(i.kbetr as decimal(3))
END as sl,
r.bukrs as xfdm,
r.butxt as xfmc,
i.racct as kjkmbh,
i.txt50 as kjkm,
GROUP_CONCAT(DISTINCT r.belnr) as kjpz,
i.zkname as kb,
SUM(IFNULL(CAST(i.zhslj as DECIMAL(20,2)),0.00)) as sapse,
r.budat,
r.create_time
from voucher_record_item i inner join voucher_record r
on i.relation_id = r.id
where i.racct like CONCAT(#{kjkmbh},'%')
and r.create_time between #{beginTime} and #{endTime}
and r.zbzdh != ''
group by r.zbzdh,i.racct
) v on t.bzdh = v.zbzdh
where d.tax_rate = v.sl
and t.invoice_type in ('01','03','08','14','31','183')
group by d.uuid,d.tax_rate
</select>
<select id="getDataFromRecordXx" resultMap="RecordToQuery">
select CONCAT(v.kjkmbh,t.uuid) as id,
t.uuid as uuid,
LEFT(v.budat,7) as zq,
v.xfdm,
v.xfmc,
v.kb,
v.kjkmbh,
v.kjkm,
t.bzdh,
GROUP_CONCAT(DISTINCT v.kjpz) as kjpz,
t.invoice_type as fplx,
t.invoice_no as fphm,
t.invoice_code as fpdm,
sum(CAST(d.tax_amount as decimal(16,2))) as fpse,
v.sl,
v.create_time
from t_dx_sale_record_invoice t inner join dxhy_detail.t_dx_record_invoice_detail_sales d
on t.uuid = d.uuid
inner join (
select r.zbzdh,
CASE
WHEN LOCATE('.',i.kbetr) >0
THEN CAST(i.kbetr as decimal(4,1))
ELSE CAST(i.kbetr as decimal(3))
END as sl,
r.bukrs as xfdm,
r.butxt as xfmc,
i.racct as kjkmbh,
i.txt50 as kjkm,
GROUP_CONCAT(DISTINCT r.belnr) as kjpz,
i.zkname as kb,
SUM(IFNULL(CAST(i.zhslj as DECIMAL(20,2)),0.00)) as sapse,
r.budat,
r.create_time
from voucher_record_item i inner join voucher_record r
on i.relation_id = r.id
where i.racct like CONCAT(#{kjkmbh},'%')
and r.create_time between #{beginTime} and #{endTime}
and r.zbzdh != ''
group by r.zbzdh,i.racct
) v on t.bzdh = v.zbzdh
where d.tax_rate = v.sl
and t.invoice_type in ('01','03','08','14','31','183')
group by d.uuid,d.tax_rate
</select>
</mapper>

@ -0,0 +1,140 @@
<?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.dxhy.core.dao.frTask.RecordToQueryDao">
<resultMap id="RecordToQuery" type="com.dxhy.core.entity.frJob.VoucherRecordQuery">
<id property="id" column="id"/>
<result property="zq" column="zq"/>
<result property="sl" column="sl"/>
<result property="xfdm" column="xfdm"/>
<result property="xfmc" column="xfmc"/>
<result property="kb" column="kb"/>
<result property="kjkmbh" column="kjkmbh"/>
<result property="kjkm" column="kjkm"/>
<result property="sapse" column="sapse"/>
<result property="kjpz" column="pzh"/>
<result property="bzdh" column="bzdh"/>
<result property="createTime" column="create_time"/>
</resultMap>
<select id="getDataFromRecordItems" resultMap="RecordToQuery">
SELECT
CONCAT(i.racct,v.zbzdh) as id,
SUBSTRING(v.budat,1,7) zq,
i.kbetr as sl,
v.bukrs as xfdm,
v.butxt as xfmc,
i.zkname as kb,
i.racct as kjkmbh,
i.txt50 as kjkm,
sum(CAST(i.zhslj as decimal(20,2))) as sapse,
v.belnr as pzh,
v.zbzdh as bzdh,
v.create_time
FROM
dxhy_tertiary.voucher_record_item i
LEFT JOIN dxhy_tertiary.voucher_record v
ON v.id = i.relation_id
where i.racct like CONCAT(#{kjkmbh},'%')
and DATE_FORMAT(v.create_time,'%Y-%m-%d %H:%i:%s') between #{start} and #{end}
and v.zbzdh != ''
group by v.zbzdh,i.racct
</select>
<select id="getBeginTime" resultType="java.util.Date">
select STR_TO_DATE(create_time,'%Y-%m-%d %H:%i:%s') as create_time
from voucher_record_query
where kjkmbh like CONCAT(#{kjkmbh},'%')
order by create_time desc limit 1
</select>
<select id="getBeginTimefromRecord" resultType="java.util.Date">
select create_time from voucher_record order by create_time limit 1
</select>
<insert id="insertDataToQuery" parameterType="com.dxhy.core.entity.frJob.VoucherRecordQuery">
insert IGNORE into voucher_record_query( `id`, `zq`, `xfdm`, `xfmc`, `kb`, `kjkmbh`, `kjkm`,
`sapje`, `gysmc`, `gysdm`, `pzh` ,`gfmc`,`gsdm`,`bzdh`,`create_time`) values
<foreach collection="voucherRecordQuerys" item="voucherRecordQuery" separator=",">
(#{voucherRecordQuery.id},#{voucherRecordQuery.zq},#{voucherRecordQuery.xfdm},#{voucherRecordQuery.xfmc},
#{voucherRecordQuery.kb},#{voucherRecordQuery.kjkmbh},#{voucherRecordQuery.kjkm},#{voucherRecordQuery.sapje},
#{voucherRecordQuery.gysmc},#{voucherRecordQuery.gysdm},#{voucherRecordQuery.pzh},#{voucherRecordQuery.gfmc},
#{voucherRecordQuery.gsdm},#{voucherRecordQuery.bzdh},#{voucherRecordQuery.create_time})
</foreach>
</insert>
<select id="getTaxAmount" parameterType="java.util.List" resultType="com.dxhy.core.entity.frJob.FpTaxAmount">
select CONCAT(d.tax_rate,t.bzdh) as `key`,sum(CAST(d.tax_amount as decimal(20,2))) as fpse
from dxhy_detail.t_dx_record_invoice_detail d inner join t_dx_record_invoice t
on d.uuid = t.uuid
where t.bzdh in
<foreach collection="bzdhs" item="bzdh" open="(" separator="," close=")">
#{bzdh}
</foreach>
and t.invoice_type in ('01','03','08','14','31','183')
group by d.uuid,d.tax_rate,t.bzdh
</select>
<select id="getDataXFromRecordItems" resultMap="RecordToQuery">
SELECT
CONCAT(i.racct,v.zbzdh) as id,
SUBSTRING(v.budat,1,7) zq,
i.kbetr as sl,
v.bukrs as xfdm,
v.butxt as xfmc,
i.zkname as kb,
i.racct as kjkmbh,
i.txt50 as kjkm,
sum(CAST(i.zwsld as decimal(20,2))) as sapse,
v.belnr as pzh,
v.zbzdh as bzdh,
v.create_time
FROM
dxhy_tertiary.voucher_record_item i
LEFT JOIN dxhy_tertiary.voucher_record v
ON v.id = i.relation_id
where i.racct like CONCAT(#{kjkmbh},'%')
and DATE_FORMAT(v.create_time,'%Y-%m-%d %H:%i:%s') between #{start} and #{end}
and v.zbzdh != ''
group by v.zbzdh,i.racct
</select>
<select id="getXTaxAmount" parameterType="java.util.List" resultType="com.dxhy.core.entity.frJob.FpTaxAmount">
select CONCAT(d.tax_rate,t.bzdh) as `key`,sum(CAST(d.tax_amount as decimal(20,2))) as fpse,
sum(CAST(d.detail_amount as decimal(20,2))) as fpje
from dxhy_detail.t_dx_record_invoice_detail_sales d inner join t_dx_sale_record_invoice t
on d.uuid = t.uuid
where t.bzdh in
<foreach collection="bzdhs" item="bzdh" open="(" separator="," close=")">
#{bzdh}
</foreach>
and t.invoice_type in ('01','03','08','14','31','183')
group by d.uuid,d.tax_rate,t.bzdh
</select>
<select id="getDataZFromRecordItems" resultMap="RecordToQuery">
SELECT
CONCAT(i.racct,v.zbzdh) as id,
SUBSTRING(v.budat,1,7) zq,
i.kbetr as sl,
v.bukrs as xfdm,
v.butxt as xfmc,
i.zkname as kb,
i.racct as kjkmbh,
i.txt50 as kjkm,
sum(CAST(i.zwsld as decimal(20,2))) as sapse,
v.belnr as pzh,
v.zbzdh as bzdh,
v.create_time
FROM
dxhy_tertiary.voucher_record_item i
LEFT JOIN dxhy_tertiary.voucher_record v
ON v.id = i.relation_id
where i.racct like CONCAT(#{kjkmbh},'%')
and DATE_FORMAT(v.create_time,'%Y-%m-%d %H:%i:%s') between #{start} and #{end}
and v.zbzdh != ''
group by v.zbzdh,i.racct
</select>
</mapper>

@ -0,0 +1,20 @@
<?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.dxhy.core.dao.frTask.VoucherRecordItemDao">
<resultMap id="RecordToQuery" type="com.dxhy.core.entity.frJob.VoucherRecordItemEntity">
<id property="id" column="id"/>
<result property="racct" column="racct"/>
</resultMap>
<select id="getByTime" resultMap="RecordToQuery">
SELECT
i.id,
i.racct
FROM
dxhy_tertiary.voucher_record_item i
LEFT JOIN dxhy_tertiary.voucher_record v
ON v.id = i.relation_id
where DATE_FORMAT(v.create_time,'%Y-%m-%d %H:%i:%s') between #{start} and #{end}
and i.racct like CONCAT(#{kjkmbh},'%')
</select>
</mapper>
Loading…
Cancel
Save