Merge branches '0925-临时合并分支' and 'release' of http://192.168.12.182/invoice/pt into 0925-临时合并分支

 Conflicts:
	dxhy-core/src/main/java/com/dxhy/core/service/mailGather/impl/EmailMaintainServiceImpl.java
	dxhy-erp/src/main/java/com/dxhy/erp/service/impl/BaseIReceiptInvoiceServiceImpl.java
	dxhy-erp/src/main/java/com/dxhy/erp/service/impl/ReceiptOutServiceImpl.java
	dxhy-export-domestic/src/main/java/com/dxhy/domestic/controller/DomesticExportCustomsRzdkController.java
release
yefei 2 years ago
commit 4eeeb580c5
  1. 2
      dxhy-admin/src/main/java/com/dxhy/admin/sys/dao/SysUserOrgDao.java
  2. 2
      dxhy-admin/src/main/java/com/dxhy/admin/sys/model/User.java
  3. 2
      dxhy-admin/src/main/java/com/dxhy/admin/sys/service/SysUserOrgService.java
  4. 7
      dxhy-admin/src/main/java/com/dxhy/admin/sys/service/impl/SysUserOrgServiceImpl.java
  5. 6
      dxhy-admin/src/main/java/com/dxhy/admin/sys/service/impl/SysUserServiceImpl.java
  6. 7
      dxhy-admin/src/main/resources/mapper/sys/SysUserOrgDao.xml
  7. 6
      dxhy-base/src/main/java/com/dxhy/base/controller/BaseFpcjController.java
  8. 7
      dxhy-base/src/main/java/com/dxhy/base/controller/BaseInvoiceController.java
  9. 21
      dxhy-core/src/main/java/com/dxhy/core/controller/mailGather/EmailMaintainController.java
  10. 31
      dxhy-core/src/main/java/com/dxhy/core/dao/frTask/QueryDetailDataDao.java
  11. 37
      dxhy-core/src/main/java/com/dxhy/core/dao/frTask/RecordToQueryDao.java
  12. 17
      dxhy-core/src/main/java/com/dxhy/core/dao/frTask/VoucherRecordItemDao.java
  13. 1
      dxhy-core/src/main/java/com/dxhy/core/dao/mailGather/EmailMaintainDao.java
  14. 120
      dxhy-core/src/main/java/com/dxhy/core/enmu/FplxEnmu.java
  15. 49
      dxhy-core/src/main/java/com/dxhy/core/enmu/KjkmTaxEnmu.java
  16. 10
      dxhy-core/src/main/java/com/dxhy/core/entity/frJob/FpTaxAmount.java
  17. 10
      dxhy-core/src/main/java/com/dxhy/core/entity/frJob/KjkmSl.java
  18. 271
      dxhy-core/src/main/java/com/dxhy/core/entity/frJob/VoucherRecordItemEntity.java
  19. 79
      dxhy-core/src/main/java/com/dxhy/core/entity/frJob/VoucherRecordQuery.java
  20. 92
      dxhy-core/src/main/java/com/dxhy/core/entity/frJob/VoucherRecordQueryDetail.java
  21. 3
      dxhy-core/src/main/java/com/dxhy/core/model/mailGather/EmailMaintainVo.java
  22. 21
      dxhy-core/src/main/java/com/dxhy/core/service/frJob/QueryDetailDataService.java
  23. 105
      dxhy-core/src/main/java/com/dxhy/core/service/frJob/QueryDetailDataServiceImpl.java
  24. 10
      dxhy-core/src/main/java/com/dxhy/core/service/frJob/RecordToQueryService.java
  25. 215
      dxhy-core/src/main/java/com/dxhy/core/service/frJob/RecordToQueryServiceImpl.java
  26. 8
      dxhy-core/src/main/java/com/dxhy/core/service/frJob/VoucherRecordItemService.java
  27. 60
      dxhy-core/src/main/java/com/dxhy/core/service/frJob/VoucherRecordItemServiceImpl.java
  28. 2
      dxhy-core/src/main/java/com/dxhy/core/service/mailGather/EmailMaintainService.java
  29. 1
      dxhy-core/src/main/java/com/dxhy/core/service/mailGather/impl/EmailMaintainServiceImpl.java
  30. 44
      dxhy-core/src/main/java/com/dxhy/core/task/FrDataTask.java
  31. 617
      dxhy-core/src/main/java/com/dxhy/core/task/SnEmailGatherTask.java
  32. 188
      dxhy-core/src/main/resources/mapper/frJob/QueryDetailDataDao.xml
  33. 140
      dxhy-core/src/main/resources/mapper/frJob/RecordToQueryDao.xml
  34. 20
      dxhy-core/src/main/resources/mapper/frJob/VoucherRecordItemDao.xml
  35. 19
      dxhy-core/src/main/resources/mapper/mailGather/EmailMaintainMapper.xml
  36. 3
      dxhy-core/src/main/resources/mapper/mailGather/MailGatherLogMapper.xml
  37. 14
      dxhy-customs/src/main/java/com/dxhy/customs/service/impl/CustomsRecordDkrzServiceImpl.java
  38. 9
      dxhy-customs/src/main/java/com/dxhy/customs/service/impl/CustomsSignServiceImpl.java
  39. 86
      dxhy-erp/src/main/java/com/dxhy/erp/controller/InterfaceController.java
  40. 24
      dxhy-erp/src/main/java/com/dxhy/erp/model/ZDATAN.java
  41. 8
      dxhy-erp/src/main/java/com/dxhy/erp/service/IReceiptOutService.java
  42. 50
      dxhy-erp/src/main/java/com/dxhy/erp/service/impl/ReceiptOutServiceImpl.java
  43. 13
      dxhy-export-domestic/src/main/java/com/dxhy/domestic/service/ckzrz/impl/DomesticExportCustomsCkServiceImpl.java
  44. 26
      dxhy-export-domestic/src/main/java/com/dxhy/domestic/service/ckzrz/impl/DomesticExportInvoiceCkServiceImpl.java
  45. 4
      dxhy-gateway/src/main/resources/bootstrap-test.yaml
  46. 4
      dxhy-operation-flow/src/main/resources/bootstrap-test.yaml

@ -55,4 +55,6 @@ public interface SysUserOrgDao extends BaseMapper<SysUserOrgEntity> {
* 用户id
*/
List<SysCompanyEntity> getOrgsByUserId(Long userId);
List<SysCompanyEntity> getEmailOrgsByUserId(Long userId);
}

@ -51,6 +51,8 @@ public class User implements Serializable {
private List<SysCompanyEntity> companyCodes;
private List<SysCompanyEntity> emailCodes;
private String qsStatus;
private String webscoketUrl;

@ -69,4 +69,6 @@ public interface SysUserOrgService extends IService<SysUserOrgEntity> {
*/
List<SysCompanyEntity> getOrgsByUserId(Long userId);
List<SysCompanyEntity> getEmailOrgsByUserId(Long userId);
}

@ -82,6 +82,13 @@ public class SysUserOrgServiceImpl extends ServiceImpl<SysUserOrgDao, SysUserOrg
return baseMapper.getOrgsByUserId(userId);
}
@Override
public List<SysCompanyEntity> getEmailOrgsByUserId(Long userId) {
DynamicContextHolder.push(DbConstant.BASICS_WRITE);
return baseMapper.getEmailOrgsByUserId(userId);
}
@Transactional(rollbackFor = Exception.class)
public void deleteUserOrg(Long userId) {
baseMapper.delete(new QueryWrapper<SysUserOrgEntity>().eq("userid", userId));

@ -1,6 +1,7 @@
package com.dxhy.admin.sys.service.impl;
import java.util.*;
import java.util.stream.Collectors;
import javax.annotation.Resource;
@ -313,6 +314,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserDao, SysUserEntity> i
}
//获取组织编码
List<SysCompanyEntity> companyEntitys = sysUserOrgService.getOrgsByUserId(userEntity.getUserId());
List<SysCompanyEntity> emailCodes = new ArrayList<>();
if (companyEntitys != null && companyEntitys.size() > 0) {
for (SysCompanyEntity companyEntity : companyEntitys) {
if (companyEntity != null) {
@ -326,6 +328,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserDao, SysUserEntity> i
// company.setCompanyName("()暂无组织编码发票");
// company.setCompanyCode("88");
// companyEntitys.add(company);
List<SysCompanyEntity> collect = companyEntitys.stream().filter(e -> StringUtils.isNotBlank(e.getGfsh())).collect(Collectors.toList());
emailCodes = JSON.parseArray(JSON.toJSONString(collect), SysCompanyEntity.class);
}
user = this.toUser(user, userEntity);
@ -333,10 +337,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserDao, SysUserEntity> i
user.setUserOrg(userOrgEntity);
user.setUserBusiness(businessList);
user.setCompanyCodes(companyEntitys);
user.setUserModels(this.getUserCompanyList(userEntity.getCompany()));
// 刷新菜单缓存处理
this.setMetnuRedis(userEntity.getUserId());
user.setEmailCodes(emailCodes);
} catch (Exception e) {
e.printStackTrace();
}

@ -79,4 +79,11 @@
where org.userid = #{userId}
</select>
<select id="getEmailOrgsByUserId" parameterType="long" resultType="com.dxhy.admin.sys.entity.SysCompanyEntity">
select dept.org_code as companyCode,dept.name as companyName,dept.dept_id as deptId,dept.taxno gfsh from sys_user_org org
inner join sys_dept dept on org.dept_id = dept.dept_id
where org.userid = #{userId}
and dept.taxno != ''
</select>
</mapper>

@ -161,6 +161,12 @@ public class BaseFpcjController extends AbstractController {
@SysLog("调用未补发票明细列表接口")
public ResponseEntity<?> listWbfpmx(@RequestBody Map<String, Object> map) {
String gfsh = (String)map.get("gfsh");
if (map.get("cjksrq") != null && !"".equals(map.get("cjksyf"))) {
map.put("cjksrq", DateUtils.getMorning(DateUtils.strToDate(map.get("cjksrq").toString())));
}
if (map.get("cjjsrq") != null && !"".equals(map.get("cjjsrq"))) {
map.put("cjjsrq", DateUtils.getNight(DateUtils.strToDate(map.get("cjjsrq").toString())));
}
String cjksrq = (String)map.get("cjksrq");
String cjjsrq = (String)map.get("cjjsrq");
String invoiceNo = (String)map.get("invoiceNo");

@ -297,7 +297,7 @@ public class BaseInvoiceController extends AbstractController {
return ResponseEntity.ok(R.error("认证开始日期不能为空!"));
}
if (!StringHelper.isBlank(rzjsrq)) {
rzjsrq = DateUtils.getMorning(DateUtils.strToDate(rzjsrq));
rzjsrq = DateUtils.getNight(DateUtils.strToDate(rzjsrq));
pramsMap.put("rzjsrq", rzjsrq);
} else {
return ResponseEntity.ok(R.error("认证结束日期不能为空!"));
@ -642,13 +642,14 @@ public class BaseInvoiceController extends AbstractController {
if ("1".equals(qsflag)) {
pramsMap.put("qszt", "1");
}
if (!StringUtils.isBlank(kpksrq)) {
pramsMap.put("kpksrq", kpksrq);
pramsMap.put("kpksrq", DateUtils.getMorning(DateUtils.strToDate(kpksrq)));
} else {
return ResponseEntity.ok(R.error("开票开始日期不能为空!"));
}
if (!StringUtils.isBlank(kpjsrq)) {
pramsMap.put("kpjsrq", kpjsrq);
pramsMap.put("kpjsrq", DateUtils.getNight(DateUtils.strToDate(kpjsrq)));
} else {
return ResponseEntity.ok(R.error("开票结束日期不能为空!"));
}

@ -65,15 +65,11 @@ public class EmailMaintainController extends AbstractController {
// return ResponseEntity.ok(R.ok().put("data", ""));
// }
// }
Object deptId = pramsMap.get("deptId");
if(deptId == null || "".equals(String.valueOf(deptId))){
return ResponseEntity.ok(R.error("查询参数有误!"));
String companyCode = (String) pramsMap.get("companyCode");
if(StringUtils.isBlank(companyCode)){
return ResponseEntity.ok(R.error("组织编码不能为空"));
}
if("99".equals(String.valueOf(deptId))){
pramsMap.put("deptId","");
}
UserInfo userInfo = getUserInfo();
log.debug("用户信息:{}", JSONObject.toJSONString(userInfo));
String loginname = getUserInfo().getLoginname();
pramsMap.put("createUser",loginname);
return ResponseEntity.ok(R.ok().put("data",this.emailMaintainService.queryByPage(pramsMap)));
@ -139,6 +135,10 @@ public class EmailMaintainController extends AbstractController {
data.put("data", "");
return ResponseEntity.ok(data);
}
int count = emailMaintainService.selectByEmailAddressAndId(emailMaintain);
if(count>0){
return ResponseEntity.ok(R.error("邮箱地址已存在!"));
}
boolean b = emailMaintainService.update(emailMaintain);
if(b){
@ -177,7 +177,8 @@ public class EmailMaintainController extends AbstractController {
@RequestMapping("/emailUpload")
public ResponseEntity<R> emailUpload(@RequestParam(value = "file") MultipartFile file,
@RequestParam(value = "deptId") String deptId,
@RequestParam(value = "deptName") String deptName) {
@RequestParam(value = "deptName") String deptName,
@RequestParam (value = "companyCode") String companyCode) {
try {
List<EmailMaintainExcel> emailMaintainExcels =
@ -233,7 +234,7 @@ public class EmailMaintainController extends AbstractController {
EmailMaintainVo maintainVo = new EmailMaintainVo();
maintainVo.setId(UUIDUtils.generateShortUuid());
maintainVo.setCompanyCode(deptId);
maintainVo.setCompanyCode(companyCode);
maintainVo.setDeptId(deptId);
maintainVo.setDeptName(deptName);
maintainVo.setUsername(userName);

@ -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);
}

@ -90,4 +90,5 @@ public interface EmailMaintainDao extends BaseMapper<EmailMaintainVo> {
String getUserName(@Param("userCode") String userCode);
String getUserByUsername(@Param("username") String username);
int selectEmailWithId(@Param("email") EmailMaintainVo emailMaintainVo);
}

@ -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;
}

@ -1,6 +1,7 @@
package com.dxhy.core.model.mailGather;
import com.dxhy.core.model.CommonDTO;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -32,6 +33,8 @@ public class EmailMaintainVo extends CommonDTO {
public String createUser;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
public Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
public Date modifyTime;
}

@ -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;
}
}

@ -56,4 +56,6 @@ public interface EmailMaintainService {
int selectByEmail(String email);
EmailMaintainVo getEmailMaintainVo(EmailMaintainVo emailMaintain);
int selectByEmailAddressAndId(EmailMaintainVo emailMaintainVo);
}

@ -121,6 +121,7 @@ public class EmailMaintainServiceImpl implements EmailMaintainService {
@Override
public String getUserByUsername(String username) {
DynamicContextHolder.push("business_itax_read");
return emailMaintainDao.getUserByUsername(username);
}

@ -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);
}
}
}
}

@ -7,6 +7,7 @@ import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSONObject;
import com.dxhy.common.constant.DbConstant;
import com.dxhy.common.datasource.config.DynamicContextHolder;
import com.dxhy.common.util.FileUtil;
import com.dxhy.common.util.MD5;
import com.dxhy.common.util.UUIDUtils;
import com.dxhy.core.job.entity.ScheduleJobEntity;
@ -19,19 +20,24 @@ import com.dxhy.core.service.mailGather.EmailMaintainService;
import com.dxhy.core.service.mailGather.MailGatherLogService;
import com.dxhy.core.service.openservice.IOpenServicePlatformService;
import com.dxhy.core.service.openservice.impl.OpenServicePlatformServiceImpl;
import com.dxhy.core.service.openservice.model.ocr.SnpjInvoiceTypeEnum;
import com.dxhy.core.service.openservice.model.ocr.*;
import com.dxhy.core.util.EmailParseUtils;
import com.github.pagehelper.util.StringUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.sun.mail.pop3.POP3Folder;
import com.sun.mail.util.MailConnectException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
@ -39,6 +45,7 @@ import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.stream.Collectors;
@Component("snEmailGatherTask")
@ -95,19 +102,22 @@ public class SnEmailGatherTask {
public void parseEmail(EmailMaintainVo maintainVo){
log.info("邮箱采集内部方法开始执行--");
log.info("解析用户"+maintainVo.getUsername()+"邮箱");
// log.info("邮箱:{}密码:{}",maintainVo.getEmailAddress(),maintainVo.getEmailPassword());
long startTime = System.currentTimeMillis();
String password = Base64Decoder.decodeStr(maintainVo.getEmailPassword());
String emailName = maintainVo.getEmailAddress();
String uid = maintainVo.getEmailUid();
Folder folder = null;
Store store = null;
List<String> uids = Lists.newArrayList();
try {
Store store = mailAuth(emailName, password);
store = mailAuth(emailName, password);
if(store == null){
MailGatherLogVo gatherLogVo = new MailGatherLogVo();
gatherLogVo.setFromAddress(emailName);
buildMsg(gatherLogVo,"1","邮箱认证失败");
return;
}
Folder folder = store.getFolder("INBOX");
folder = store.getFolder("INBOX");
//获取邮件列表
folder.open(Folder.READ_WRITE);
// 由于POP3协议无法获知邮件的状态,所以getUnreadMessageCount得到的是收件箱的邮件总数
@ -117,9 +127,18 @@ public class SnEmailGatherTask {
log.debug("新邮件: " + folder.getNewMessageCount());
// 获得收件箱中的邮件总数
log.debug("邮件总数: " + folder.getMessageCount());
EmailMaintainVo emailMaintainVo = new EmailMaintainVo();
emailMaintainVo.setId(maintainVo.getId());
// EmailMaintainVo emailMaintainVo = new EmailMaintainVo();
// emailMaintainVo.setId(maintainVo.getId());
Message[] messages = folder.getMessages();
POP3Folder inbox = (POP3Folder) folder;
for (int i = 0; i < messages.length; i++) {
String euid = inbox.getUID(messages[i]);
uids.add(euid);
}
boolean flag = true;
if (StringUtils.isBlank(maintainVo.getEmailUid()) || !uids.contains(maintainVo.getEmailUid())){
flag = false;
}
for (int i = 0, count = messages.length; i < count; i++) {
MimeMessage msg = (MimeMessage) messages[i];
log.debug("------------------解析第" + msg.getMessageNumber() + "封邮件-------------------- ");
@ -127,9 +146,10 @@ public class SnEmailGatherTask {
MailGatherLogVo gatherLogVo = new MailGatherLogVo();
gatherLogVo.setId(IdUtil.nanoId());
gatherLogVo.setSubject(EmailParseUtils.getSubject(msg));
// String address = EmailParseUtils.getReceiveAddress(msg, null);
String from = getFrom(msg);
gatherLogVo.setFromAddress(emailName);
// String address = EmailParseUtils.getReceiveAddress(msg, null);
gatherLogVo.setReceiveAddress(emailName);
gatherLogVo.setReceiveAddress(from);
String sentDate = EmailParseUtils.getSentDate(msg, null);
gatherLogVo.setSentDate(sentDate);
gatherLogVo.setCreateTime(new Date());
@ -143,17 +163,22 @@ public class SnEmailGatherTask {
// log.debug("是否需要回执:" + EmailParseUtils.isReplySign(msg));
log.debug("邮件大小:" + msg.getSize() * 1024 + "kb");
POP3Folder inbox = (POP3Folder) folder;
String uid = inbox.getUID(msg);
if(StringUtils.isBlank(maintainVo.getEmailUid()) && i+1 == messages.length){
emailMaintainVo.setEmailUid(uid);
buildEmailMaintainVo(emailMaintainVo);
} else if(i+1 == messages.length){
emailMaintainVo.setEmailUid(uid);
buildEmailMaintainVo(emailMaintainVo);
}
uid = inbox.getUID(msg);
log.info("uid{}",uid);
// if(StringUtils.isBlank(maintainVo.getEmailUid()) && i+1 == messages.length){
// emailMaintainVo.setEmailUid(uid);
// buildEmailMaintainVo(emailMaintainVo);
// } else if(i+1 == messages.length){
// emailMaintainVo.setEmailUid(uid);
// buildEmailMaintainVo(emailMaintainVo);
// }
//增量处理 等于之后就跳过本地循环
if(StringUtils.isNotBlank(maintainVo.getEmailUid()) && maintainVo.getEmailUid().equals(uid)){
if (StringUtils.isNotBlank(uid) && uid.equals(maintainVo.getEmailUid())){
flag = false;
log.debug("跳过本次循环: "+maintainVo.getEmailUid()+"===="+uid);
continue;
}
if(flag){
log.debug("跳过本次循环: "+maintainVo.getEmailUid()+"===="+uid);
continue;
}
@ -164,11 +189,12 @@ public class SnEmailGatherTask {
List<Map<String, String>> mapList = Lists.newArrayList();
EmailParseUtils.saveAttachment(msg, mapList);
log.debug("获取附件的数量:"+mapList.size());
if(StringUtils.isNotEmpty(maintainVo.getUserId())){
String username = emailMaintainService.getUserByUsername(maintainVo.getUserId());
if(StringUtils.isNotEmpty(username)){
maintainVo.setUserId(username);
}
if(StringUtils.isNotEmpty(maintainVo.getCreateUser())){
// String username = emailMaintainService.getUserByUsername(maintainVo.getUserId());
// if(StringUtils.isNotEmpty(username)){
// maintainVo.setUserId(username);
// }
maintainVo.setUserId(maintainVo.getCreateUser());
}
for (Map<String, String> map : mapList) {
map.put("emailName",emailName);
@ -187,9 +213,9 @@ public class SnEmailGatherTask {
log.info("调用影像票夹接口返回参数:{}",body);
Map resultMap = JSONObject.parseObject(body, Map.class);
Object status = resultMap.get("status");
gatherLogVo.setFileType(map.get("contentType"));
gatherLogVo.setFileName(map.get("fileName"));
if(status != null && "200".equals(String.valueOf(status))){
gatherLogVo.setFileName(map.get("fileName"));
gatherLogVo.setFileType(map.get("contentType"));
buildMsg(gatherLogVo,"0","推送影像票夹成功");
}else {
gatherLogVo.setFphm("");
@ -218,15 +244,36 @@ public class SnEmailGatherTask {
}
}
// 释放资源
folder.close(false); // false为不更新邮件,true为更新,一般在删除邮件后使用
store.close();
// folder.close(false); // false为不更新邮件,true为更新,一般在删除邮件后使用
// store.close();
log.info("邮箱采集使用时间:{}",System.currentTimeMillis() - startTime);
} catch (MessagingException e) {
log.error("邮箱采集邮件解析异常:{}", e);
throw new RuntimeException(e);
} catch (IOException e) {
log.error("邮箱采集IO异常:{}", e);
throw new RuntimeException(e);
}catch (Exception e){
log.error("邮箱解析异常{}",e);
}finally {
//更新uid信息
if (StringUtils.isNotBlank(uid) && (uids.isEmpty() ||uids.indexOf(uid)>uids.indexOf(maintainVo.getEmailUid()))){
EmailMaintainVo emailMaintainVo = new EmailMaintainVo();
emailMaintainVo.setId(maintainVo.getId());
emailMaintainVo.setEmailUid(uid);
log.debug("uid:"+emailMaintainVo.getEmailUid());
buildEmailMaintainVo(emailMaintainVo);
}
// 释放资源
// false为不更新邮件,true为更新,一般在删除邮件后使用
try {
if (folder != null){
folder.close(false);
}
if (store != null){
store.close();
}
} catch (MessagingException e) {
log.debug("关流失败");
}
}
}
@ -270,6 +317,32 @@ public class SnEmailGatherTask {
return hashMap;
}
/**
* 获得邮件发件人
*
* @param msg 邮件内容
* @return 姓名 <Email地址>
* @throws MessagingException
* @throws UnsupportedEncodingException
*/
public String getFrom(MimeMessage msg) throws MessagingException, UnsupportedEncodingException {
String from = "";
Address[] froms = msg.getFrom();
if (froms.length < 1){
return "";
}
InternetAddress address = (InternetAddress) froms[0];
String person = address.getPersonal();
if (person != null) {
person = MimeUtility.decodeText(person) + " ";
} else {
person = "";
}
from = person + "<" + address.getAddress() + ">";
return from;
}
public Store mailAuth(String emailName, String password){
//判断是否为QQ还是163
@ -309,10 +382,35 @@ public class SnEmailGatherTask {
// });
//Session session = Session.getInstance(props);
Store store = null;
MailGatherLogVo gatherLogVo = new MailGatherLogVo();
gatherLogVo.setFromAddress(emailName);
try {
store = session.getStore("pop3");
store.connect(emailName, password);
}catch(AuthenticationFailedException e){
buildMsg(gatherLogVo,"1","密码错误连接邮箱失败");
e.printStackTrace();
log.error("连接邮箱异常信息{}",e);
try {
store.close();
} catch (MessagingException ex) {
throw new RuntimeException(ex);
}
store = null;
}catch(MailConnectException e){
buildMsg(gatherLogVo,"1","连接超时");
e.printStackTrace();
log.error("连接邮箱异常信息{}",e);
try {
store.close();
} catch (MessagingException ex) {
throw new RuntimeException(ex);
}
store = null;
} catch (Exception e) {
buildMsg(gatherLogVo,"1","未知连接异常");
e.printStackTrace();
log.error("连接邮箱异常信息{}",e);
try {
store.close();
} catch (MessagingException ex) {
@ -323,6 +421,463 @@ public class SnEmailGatherTask {
return store;
}
public static void main3(String[] args){
//判断是否为QQ还是163
//邮件接收协议
String emailName = "1149953701@qq.com";
String password = "pmdzleyabmlzgdhc";
String mail_protocol = "mail.store.protocol";
//邮件接收协议类型
String mail_protocol_type2 = "pop3";
String mail_protocol_type = "pop";
//邮件接收服务器端口
String mail_port = "mail.pop3.port";
//邮件接收服务器端口
String port = "110";
//邮件接收服务器地址
String mail_host = "mail.pop3.host";
String mailSuffix = emailName.split("@")[1];
//邮箱类型
String mailType = mailSuffix.split("\\.")[0];
Properties props = new Properties();
if(mailType.equalsIgnoreCase("qq")){
//qq邮箱
props.setProperty(mail_protocol, mail_protocol_type2); // 协议
props.setProperty(mail_host, mail_protocol_type+"."+mailSuffix); // pop3服务器
props.setProperty(mail_port, port); // 端口
}else {
props.setProperty(mail_protocol, mail_protocol_type); // 协议
props.setProperty(mail_host, mail_protocol_type+"."+mailSuffix); // pop3服务器
props.setProperty(mail_port, port); // 端口
}
Session session = Session.getInstance(props);
Store store = null;
try {
store = session.getStore("pop3");
store.connect(emailName, password);
} catch (Exception e) {
try {
store.close();
} catch (MessagingException ex) {
throw new RuntimeException(ex);
}
store = null;
}
}
public static void main1(String[] args) {
EmailMaintainVo maintainVo = new EmailMaintainVo();
maintainVo.setCompanyCode("9250");
maintainVo.setEmailAddress("1191093413@qq.com");
maintainVo.setEmailPassword("dWZobmdibGx5ZGRjZ2dlaA==");
maintainVo.setEmailUid("ZL0006_d9LNZsKMdoguImQAO4OILd7sss");
maintainVo.setId("RtDaFlwqZKU47MHi2Y_S4");
log.info("邮箱采集内部方法开始执行--");
long startTime = System.currentTimeMillis();
String password = Base64Decoder.decodeStr(maintainVo.getEmailPassword());
String emailName = maintainVo.getEmailAddress();
String uid = maintainVo.getEmailUid();
Folder folder = null;
Store store = null;
List<String> uids = Lists.newArrayList();
try {
//判断是否为QQ还是163
//邮件接收协议
String mail_protocol = "mail.store.protocol";
//邮件接收协议类型
String mail_protocol_type2 = "pop3";
String mail_protocol_type = "pop";
//邮件接收服务器端口
String mail_port = "mail.pop3.port";
//邮件接收服务器端口
String port = "110";
//邮件接收服务器地址
String mail_host = "mail.pop3.host";
String mailSuffix = emailName.split("@")[1];
//邮箱类型
String mailType = mailSuffix.split("\\.")[0];
Properties props = new Properties();
if(mailType.equalsIgnoreCase("qq")){
//qq邮箱
props.setProperty(mail_protocol, mail_protocol_type2); // 协议
props.setProperty(mail_host, mail_protocol_type+"."+mailSuffix); // pop3服务器
props.setProperty(mail_port, port); // 端口
}else {
props.setProperty(mail_protocol, mail_protocol_type); // 协议
props.setProperty(mail_host, mail_protocol_type+"."+mailSuffix); // pop3服务器
props.setProperty(mail_port, port); // 端口
}
Session session = Session.getInstance(props);
try {
store = session.getStore("pop3");
store.connect(emailName, password);
} catch (Exception e) {
try {
store.close();
} catch (MessagingException ex) {
throw new RuntimeException(ex);
}
store = null;
}
if(store == null){
log.info("store为空");
return;
}
folder = store.getFolder("INBOX");
//获取邮件列表
folder.open(Folder.READ_WRITE);
// 由于POP3协议无法获知邮件的状态,所以getUnreadMessageCount得到的是收件箱的邮件总数
log.debug("未读邮件数: " + folder.getUnreadMessageCount());
// 由于POP3协议无法获知邮件的状态,所以下面得到的结果始终都是为0
log.debug("删除邮件数: " + folder.getDeletedMessageCount());
log.debug("新邮件: " + folder.getNewMessageCount());
// 获得收件箱中的邮件总数
log.debug("邮件总数: " + folder.getMessageCount());
EmailMaintainVo emailMaintainVo = new EmailMaintainVo();
emailMaintainVo.setId(maintainVo.getId());
Message[] messages = folder.getMessages();
POP3Folder inbox = (POP3Folder) folder;
for (int i = 0; i < messages.length; i++) {
String euid = inbox.getUID(messages[i]);
uids.add(euid);
}
boolean flag = true;
if (StringUtils.isBlank(maintainVo.getEmailUid()) || !uids.contains(maintainVo.getEmailUid())){
flag = false;
}
for (int i = 0, count = messages.length; i < count; i++) {
MimeMessage msg = (MimeMessage) messages[i];
log.debug("------------------解析第" + msg.getMessageNumber() + "封邮件-------------------- ");
MailGatherLogVo gatherLogVo = new MailGatherLogVo();
gatherLogVo.setId(IdUtil.nanoId());
gatherLogVo.setSubject(EmailParseUtils.getSubject(msg));
gatherLogVo.setFromAddress(emailName);
gatherLogVo.setReceiveAddress(emailName);
String sentDate = EmailParseUtils.getSentDate(msg, null);
gatherLogVo.setSentDate(sentDate);
gatherLogVo.setCreateTime(new Date());
log.debug("主题: " + EmailParseUtils.getSubject(msg));
log.debug("发件人: " + EmailParseUtils.getFrom(msg));
log.debug("发送时间:" + sentDate);
log.debug("是否已读:" + EmailParseUtils.isSeen(msg));
log.debug("邮件大小:" + msg.getSize() * 1024 + "kb");
uid = inbox.getUID(msg);
log.info("uid{}",uid);
//增量处理 等于之后就跳过本地循环
if (StringUtils.isNotBlank(uid) && uid.equals(maintainVo.getEmailUid())){
flag = false;
log.debug("跳过本次循环: "+maintainVo.getEmailUid()+"===="+uid);
continue;
}
if(flag){
log.debug("跳过本次循环: "+maintainVo.getEmailUid()+"===="+uid);
continue;
}
gatherLogVo.setMsgUid(uid);
boolean isContainerAttachment = EmailParseUtils.isContainAttachment(msg);
log.debug("是否有附件: "+isContainerAttachment);
if(isContainerAttachment){
List<Map<String, String>> mapList = Lists.newArrayList();
EmailParseUtils.saveAttachment(msg, mapList);
log.debug("获取附件的数量:"+mapList.size());
String username = "一十七画生";
maintainVo.setUserId(username);
for (Map<String, String> map : mapList) {
map.put("emailName",emailName);
String pdfStream = map.get("pdfStream");
if(StringUtils.isNotBlank(pdfStream)){
log.debug("开始调用山能OCR识别---------");
//判断是否为图片流文件, 兼容公司平台进行base64解密
String requestUrl = "http://192.168.33.102:30006/cci_ai/service/v1/receipt_crop_and_recog?crop_complete_image=1";
log.info("调用山能OCR识别请求路径:"+requestUrl);
String result = FileUtil.uploadFile(requestUrl, Base64Decoder.decode(pdfStream));
List<OpenServiceOcr> openServices = Lists.newArrayList();
if(StringUtils.isBlank(result)){
log.info("调用山能ocr识别失败");
}else {
OcrResponseVo ocrResponseVo = JSONObject.parseObject(result, OcrResponseVo.class);
if(ocrResponseVo != null && ocrResponseVo.getCode() == 200){
List<OcrDataListEntity> ocrDataListEntities = ocrResponseVo.getResult().getObjectList();
for (OcrDataListEntity ocrDataListEntity : ocrDataListEntities) {
List<List<OcrProductListEntity>> productList = ocrDataListEntity.getProductList();
List<OcrItemListEntity> itemList = ocrDataListEntity.getItemList();
String type = ocrDataListEntity.getType();
if("other".equals(type)){
break;
}
Map<String, String> itemData = itemList.stream().collect(Collectors.toMap(OcrItemListEntity::getKey, OcrItemListEntity::getValue));
OpenServiceOcr openServiceOcr = new OpenServiceOcr();
openServiceOcr.setIMAGE(ocrDataListEntity.getImage());
openServiceOcr.setFPLXDM(OcrDataTypeEnum.getVal(type));
OpenServiceOcr.InvoiceOcrData invoiceOcrData = new OpenServiceOcr.InvoiceOcrData();
invoiceOcrData.setSFCY("0"); //是否查验
//判断发票类型
if("vat_special_invoice".equals(type) || "vat_electronic_invoice".equals(type) || "vat_common_invoice".equals(type) || "vat_electronic_toll_invoice".equals(type)){
invoiceOcrData.setJYM(itemData.get(OcrDataTypeEnum.VAT_INVOICE_CORRECT_CODE.getKey()));
invoiceOcrData.setFPDM(itemData.get(OcrDataTypeEnum.VAT_INVOICE_DAIMA.getKey()));
invoiceOcrData.setFPHM(itemData.get(OcrDataTypeEnum.VAT_INVOICE_HAOMA.getKey()));
invoiceOcrData.setKPRQ(itemData.get(OcrDataTypeEnum.VAT_INVOICE_ISSUE_DATE.getKey()));
invoiceOcrData.setGMFSBH(itemData.get(OcrDataTypeEnum.VAT_INVOICE_RATE_PAYER_ID.getKey()));
invoiceOcrData.setJDHM(itemData.get(OcrDataTypeEnum.VAT_INVOICE_JIDA_HAOMA.getKey()));
invoiceOcrData.setXHFMC(itemData.get(OcrDataTypeEnum.VAT_INVOICE_SELLER_NAME.getKey()));
invoiceOcrData.setXHFSBH(itemData.get(OcrDataTypeEnum.VAT_INVOICE_SELLER_ID.getKey()));
invoiceOcrData.setXHFDZDH(itemData.get(OcrDataTypeEnum.VAT_INVOICE_SELLER_ADDR_TELL.getKey()));
invoiceOcrData.setXHFYHZH(itemData.get(OcrDataTypeEnum.VAT_INVOICE_SELLER_BANK_ACCOUNT.getKey()));
invoiceOcrData.setGMFMC(itemData.get(OcrDataTypeEnum.VAT_INVOICE_PAYER_NAME.getKey()));
invoiceOcrData.setGMFDZDH(itemData.get(OcrDataTypeEnum.VAT_INVOICE_PAYER_ADDR_TELL.getKey()));
invoiceOcrData.setGMFYHZH(itemData.get(OcrDataTypeEnum.VAT_INVOICE_PAYER_BANK_ACCOUNT.getKey()));
invoiceOcrData.setHJJE(itemData.get(OcrDataTypeEnum.VAT_INVOICE_PRICE.getKey()));
invoiceOcrData.setSFDK(itemData.get(OcrDataTypeEnum.VAT_INVOICE_DAI_KAI_FLAG.getKey()));
invoiceOcrData.setHJSE(itemData.get(OcrDataTypeEnum.VAT_INVOICE_TAX_TOTAL.getKey()));
invoiceOcrData.setJSHJ(itemData.get(OcrDataTypeEnum.VAT_INVOICE_TOTAL_COVER_TAX_DIGITS.getKey()));
invoiceOcrData.setFPLC(itemData.get(OcrDataTypeEnum.VAT_INVOICE_PAGE_NUMBER.getKey()));
openServiceOcr.setFPLXDM(itemData.get(OcrDataTypeEnum.VAT_INVOICE_TYPE.getKey()));
invoiceOcrData.setBZ(itemData.get(OcrDataTypeEnum.VAT_INVOICE_TOTAL_NOTE.getKey()));
invoiceOcrData.setFWM(itemData.get(OcrDataTypeEnum.VAT_INVOICE_CIPHER_FIELD.getKey()));
invoiceOcrData.setSKR(itemData.get(OcrDataTypeEnum.VAT_INVOICE_PAYEE.getKey()));
invoiceOcrData.setFHR(itemData.get(OcrDataTypeEnum.VAT_INVOICE_REVIEW.getKey()));
invoiceOcrData.setKPR(itemData.get(OcrDataTypeEnum.VAT_INVOICE_DRAWER.getKey()));
invoiceOcrData.setSFYGSYZ("False".equals(itemData.get(OcrDataTypeEnum.EXIST_STAMPLE.getKey()))?"0":"1");
List<OpenServiceOcr.InvoiceOcrDetail> invoiceOcrDetailList = Lists.newArrayList();
for (List<OcrProductListEntity> productListEntities: productList) {
Map<String, String> productMap = productListEntities.stream().collect(Collectors.toMap(OcrProductListEntity::getKey, OcrProductListEntity::getValue));
OpenServiceOcr.InvoiceOcrDetail invoiceOcrDetail = new OpenServiceOcr.InvoiceOcrDetail();
invoiceOcrDetail.setHWMC(productMap.get(OcrDataTypeEnum.VAT_INVOICE_GOODS.getKey()));
invoiceOcrDetail.setGGXH(productMap.get(OcrDataTypeEnum.VAT_INVOICE_PLATE_SPECIFIC.getKey()));
invoiceOcrDetail.setDW(productMap.get(OcrDataTypeEnum.VAT_INVOICE_ELECTRANS_UNIT.getKey()));
invoiceOcrDetail.setSPSL(productMap.get(OcrDataTypeEnum.VAT_INVOICE_ELECTRANS_QUANTITY.getKey()));
invoiceOcrDetail.setDJ(productMap.get(OcrDataTypeEnum.VAT_INVOICE_ELECTRANS_UNIT_PRICE.getKey()));
invoiceOcrDetail.setJE(productMap.get(OcrDataTypeEnum.VAT_INVOICE_PRICE.getKey()));
invoiceOcrDetail.setSL(productMap.get(OcrDataTypeEnum.VAT_INVOICE_TAX_RATE.getKey()));
invoiceOcrDetail.setSE(productMap.get(OcrDataTypeEnum.VAT_INVOICE_TAX.getKey()));
invoiceOcrDetailList.add(invoiceOcrDetail);
}
invoiceOcrData.setFPMX(invoiceOcrDetailList);
} else if ("vat_roll_invoice".equals(type)) {
invoiceOcrData.setKPRQ(itemData.get(OcrDataTypeEnum.DATE_OF_INVOICE.getKey()));
invoiceOcrData.setFPBT(itemData.get(OcrDataTypeEnum.INVOICE_HEAD.getKey()));
invoiceOcrData.setJYM(itemData.get(OcrDataTypeEnum.CHECK_NUMBER.getKey()));
invoiceOcrData.setFPDM(itemData.get(OcrDataTypeEnum.INVOICE_NUMBER.getKey()));
invoiceOcrData.setFPHM(itemData.get(OcrDataTypeEnum.INVOICE_NUMBER.getKey()));
invoiceOcrData.setJQBM(itemData.get(OcrDataTypeEnum.MACHINE_CODE.getKey()));
invoiceOcrData.setGMFSBH(itemData.get(OcrDataTypeEnum.BUY_TAX_NUMBER.getKey()));
invoiceOcrData.setJSHJ(itemData.get(OcrDataTypeEnum.TOTAL_MONEY.getKey()));
invoiceOcrData.setXHFMC(itemData.get(OcrDataTypeEnum.SOLD_NAME.getKey()));
invoiceOcrData.setXHFSBH(itemData.get(OcrDataTypeEnum.SOLD_TAX_NUMBER.getKey()));
invoiceOcrData.setGMFMC(itemData.get(OcrDataTypeEnum.BUY_NAME.getKey()));
invoiceOcrData.setSKR(itemData.get(OcrDataTypeEnum.CASHIER_NAME.getKey()));
invoiceOcrData.setSFYGSYZ("False".equals(itemData.get(OcrDataTypeEnum.EXIST_STAMPLE.getKey()))?"0":"1");
List<OpenServiceOcr.InvoiceOcrDetail> invoiceOcrDetailList = Lists.newArrayList();
for (List<OcrProductListEntity> productListEntities : productList) {
Map<String, String> productMap = productListEntities.stream().collect(Collectors.toMap(OcrProductListEntity::getKey, OcrProductListEntity::getValue));
OpenServiceOcr.InvoiceOcrDetail invoiceOcrDetail = new OpenServiceOcr.InvoiceOcrDetail();
invoiceOcrDetail.setHWMC(productMap.get(OcrDataTypeEnum.VAT_INVOICE_GOODS.getKey()));
invoiceOcrDetail.setGGXH(productMap.get(OcrDataTypeEnum.VAT_INVOICE_PLATE_SPECIFIC.getKey()));
invoiceOcrDetail.setDW(productMap.get(OcrDataTypeEnum.VAT_INVOICE_ELECTRANS_UNIT.getKey()));
invoiceOcrDetail.setSPSL(productMap.get(OcrDataTypeEnum.VAT_INVOICE_ELECTRANS_QUANTITY.getKey()));
invoiceOcrDetail.setDJ(productMap.get(OcrDataTypeEnum.VAT_INVOICE_ELECTRANS_UNIT_PRICE.getKey()));
invoiceOcrDetail.setJE(productMap.get(OcrDataTypeEnum.VAT_INVOICE_PRICE.getKey()));
invoiceOcrDetail.setSL(productMap.get(OcrDataTypeEnum.VAT_INVOICE_TAX_RATE.getKey()));
invoiceOcrDetail.setSE(productMap.get(OcrDataTypeEnum.VAT_INVOICE_TAX.getKey()));
invoiceOcrDetailList.add(invoiceOcrDetail);
}
invoiceOcrData.setFPMX(invoiceOcrDetailList);
} else if ("motor_vehicle_sale_invoice".equals(type)) {
// -------------机动车销售统一发票特殊字段--------------
invoiceOcrData.setGMFMC(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_BUYER.getKey()));
invoiceOcrData.setGMFSBH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_BUYER_ID.getKey()));
invoiceOcrData.setCPXH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_CAR_MODEL.getKey()));
invoiceOcrData.setHGZH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_CERT_ID.getKey()));
invoiceOcrData.setFDJHM(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_ENGINE_ID.getKey()));
invoiceOcrData.setCLSBH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_CAR_VIN.getKey()));
invoiceOcrData.setHJJE(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_PRICE_WITHOUT_TAX.getKey()));
invoiceOcrData.setZGSWJG(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_TAX_AUTHORITH.getKey()));
invoiceOcrData.setZGSWJGDM(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_TAX_AUTHORITH_ID.getKey()));
invoiceOcrData.setJSHJ(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_TOTAL_PRICE_DIGITS.getKey()));
invoiceOcrData.setKPRQ(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_ISSUE_DATE.getKey()));
invoiceOcrData.setFPDM(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_DAIMA.getKey()));
invoiceOcrData.setFPHM(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_HAOMA.getKey()));
} else if ("used_car_purchase_invoice".equals(type)) {
// -------------二手车销售统一发票特殊字段--------------
invoiceOcrData.setGMFMC(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_BUYER.getKey()));
invoiceOcrData.setGMFSBH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_BUYER_ID.getKey()));
invoiceOcrData.setXHFMC(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_SELLER.getKey()));
invoiceOcrData.setXHFSBH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_SELLER_ID.getKey()));
invoiceOcrData.setESCSC(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_MARKET.getKey()));
invoiceOcrData.setCPZH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_PLATE_NUM.getKey()));
invoiceOcrData.setDJZH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_CAR_MODEL.getKey()));
invoiceOcrData.setCLSBH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_VIN.getKey()));
invoiceOcrData.setCPXH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_CAR_MODEL.getKey()));
invoiceOcrData.setESCNSRSBH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_MARKET_TAX_ID.getKey()));
invoiceOcrData.setESCNSRSBH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_MARKET_TAX_ID.getKey()));
invoiceOcrData.setJSHJ(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_TOTAL_PRICE_DIGITS.getKey()));
invoiceOcrData.setKPRQ(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_ISSUE_DATE.getKey()));
invoiceOcrData.setFPDM(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_DAIMA.getKey()));
invoiceOcrData.setFPHM(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_HAOMA.getKey()));
} else if("vehicle_toll".equals(type)){
// -------------过路费特殊字段--------------
invoiceOcrData.setJSHJ(itemData.get(OcrDataTypeEnum.MONEY.getKey()));
invoiceOcrData.setKPRQ(itemData.get(OcrDataTypeEnum.DATE.getKey()));
invoiceOcrData.setSJ(itemData.get(OcrDataTypeEnum.TIME.getKey()));
invoiceOcrData.setFPDM(itemData.get(OcrDataTypeEnum.TOLL_CODE.getKey()));
invoiceOcrData.setFPHM(itemData.get(OcrDataTypeEnum.TOLL_NUMBER.getKey()));
}else if ("quota_invoice".equals(type)) {
invoiceOcrData.setJSHJ(itemData.get(OcrDataTypeEnum.MONEY_SMALL.getKey()));
invoiceOcrData.setFPDM(itemData.get(OcrDataTypeEnum.QUOTA_INVOICE_CODE.getKey()));
invoiceOcrData.setFPHM(itemData.get(OcrDataTypeEnum.QUOTA_INVOICE_NUMBER.getKey()));
} else if ("taxi_ticket".equals(type)) {
// -------------出租车发票特殊字段--------------
invoiceOcrData.setJSHJ(itemData.get(OcrDataTypeEnum.SUM.getKey()));
invoiceOcrData.setFPDM(itemData.get(OcrDataTypeEnum.INVOICE_CODE.getKey()));
invoiceOcrData.setFPHM(itemData.get(OcrDataTypeEnum.INVOICE_NO.getKey()));
invoiceOcrData.setKPRQ(itemData.get(OcrDataTypeEnum.DATE.getKey()));
invoiceOcrData.setSCSJ(itemData.get(OcrDataTypeEnum.BOARDING_TIME.getKey()));
invoiceOcrData.setXCSJ(itemData.get(OcrDataTypeEnum.LANDING_TIME.getKey()));
invoiceOcrData.setLC(itemData.get(OcrDataTypeEnum.MILEAGE.getKey()));
invoiceOcrData.setSZD(itemData.get(OcrDataTypeEnum.LOCATION.getKey()));
invoiceOcrData.setCPZH(itemData.get(OcrDataTypeEnum.TAXI_NO.getKey()));
} else if("air_transport".equals(type)){
invoiceOcrData.setXM(itemData.get(OcrDataTypeEnum.PASSENGER_NAME.getKey()));
invoiceOcrData.setSFZH(itemData.get(OcrDataTypeEnum.ID_NO.getKey()));
invoiceOcrData.setPZHM(itemData.get(OcrDataTypeEnum.E_TICKET_NO.getKey()));
invoiceOcrData.setTKRQ(itemData.get(OcrDataTypeEnum.ISSUED_DATE.getKey()));
invoiceOcrData.setTKDW(itemData.get(OcrDataTypeEnum.ISSUED_BY.getKey()));
invoiceOcrData.setPJ(itemData.get(OcrDataTypeEnum.FARE.getKey()));
invoiceOcrData.setMHFZJJ(itemData.get(OcrDataTypeEnum.CIVIL_AVIATION_FUND.getKey()));
invoiceOcrData.setRYFJF(itemData.get(OcrDataTypeEnum.FUEL_SURCHARGE.getKey()));
invoiceOcrData.setQTSF(itemData.get(OcrDataTypeEnum.OTHER_TAXES.getKey()));
invoiceOcrData.setZE(itemData.get(OcrDataTypeEnum.TOTAL.getKey()));
invoiceOcrData.setBXF(itemData.get(OcrDataTypeEnum.INSURANCE.getKey()));
} else if("train_ticket".equals(type)){
// -------------火车票特殊字段--------------
// invoiceOcrData.setPZHM(itemData.get(OcrDataTypeEnum.VAT_INVOICE_TYPE.getKey()));
invoiceOcrData.setKPRQ(itemData.get(OcrDataTypeEnum.DEPARTURE_DATE.getKey()));
invoiceOcrData.setSJ(itemData.get(OcrDataTypeEnum.DEPARTURE_DATE.getKey()));
// invoiceOcrData.setXM(itemData.get(OcrDataTypeEnum.VAT_INVOICE_TYPE.getKey()));
invoiceOcrData.setCFZD(itemData.get(OcrDataTypeEnum.DEPARTURE_STATION.getKey()));
invoiceOcrData.setDDZD(itemData.get(OcrDataTypeEnum.ARRIVAL_STATION.getKey()));
invoiceOcrData.setCC(itemData.get(OcrDataTypeEnum.TRAIN_NUMBER.getKey()));
invoiceOcrData.setZWDJ(itemData.get(OcrDataTypeEnum.CLASS.getKey()));
invoiceOcrData.setXLH(itemData.get(OcrDataTypeEnum.SEAT_NUMBER.getKey()));
invoiceOcrData.setSFZH(itemData.get(OcrDataTypeEnum.PASSENGER_ID.getKey()));
} else if ("general_machine_invoice".equals(type) || "highway_passenger_invoice".equals(type) || "shipping_invoice".equals(type) || "passenger_transport_invoice".equals(type)) {
//为 general_machine_invoice(通用机打发票)、 highway_passenger_invoice(公路客运发票)、shipping_invoice(船运客票)、passenger_transport_invoice(旅客运输普票)
// -------------航空运输电子客票行程单特殊字段--------------
invoiceOcrData.setJSHJ(itemData.get(OcrDataTypeEnum.MONEY.getKey()));
invoiceOcrData.setFPDM(itemData.get(OcrDataTypeEnum.INVOICE_CODE.getKey()));
invoiceOcrData.setFPHM(itemData.get(OcrDataTypeEnum.INVOICE_NUMBER.getKey()));
invoiceOcrData.setKPRQ(itemData.get(OcrDataTypeEnum.DATE.getKey()));
invoiceOcrData.setSJ(itemData.get(OcrDataTypeEnum.TIME.getKey()));
} else if ("parking_invoice".equals(type)) {
invoiceOcrData.setJSHJ(itemData.get(OcrDataTypeEnum.MONEY.getKey()));
invoiceOcrData.setFPHM(itemData.get(OcrDataTypeEnum.INVOICE_NUMBER.getKey()));
}
openServiceOcr.setData(invoiceOcrData);
openServiceOcr.setRegion(ocrDataListEntity.getPosition());
openServices.add(openServiceOcr);
}
}
}
if(openServices != null && !openServices.isEmpty()){
Map<String, Object> ocrResult = Maps.newHashMap();
List<OcrResultToyxVo> resultToyxVoList = Lists.newArrayList();
String batchId = String.valueOf(System.currentTimeMillis());
ocrResult.put("batchId",batchId);
for (int j = 0; j < openServices.size(); j++) {
OpenServiceOcr openServiceOcr = openServices.get(j);
OpenServiceOcr.InvoiceOcrData invoiceOcrData = openServiceOcr.getData();
OcrResultToyxVo resultToyxVo = new OcrResultToyxVo();
resultToyxVo.setCompanyId(maintainVo.getCompanyCode());
resultToyxVo.setSource("01");
resultToyxVo.setInvoiceCode(invoiceOcrData.getFPDM());
resultToyxVo.setInvoiceNumber(invoiceOcrData.getFPHM());
resultToyxVo.setTotalAmount(invoiceOcrData.getJSHJ());
resultToyxVo.setBuyerName(invoiceOcrData.getGMFMC());
resultToyxVo.setSellerName(invoiceOcrData.getXHFMC());
resultToyxVo.setFileName(map.get("fileName"));
resultToyxVo.setFileType(SnpjInvoiceTypeEnum.getVal(openServiceOcr.getFPLXDM()));
resultToyxVo.setFileByte(map.get("pdfStream"));
resultToyxVo.setEmail(map.get("emailName"));
resultToyxVo.setEmployeeId(maintainVo.getUserId());
resultToyxVoList.add(resultToyxVo);
}
ocrResult.put("list",resultToyxVoList);
try {
String md5Encode = MD5.getMd5Encode(ocrResult.get("batchId") + "e4b0190b2fadc0adbe54471ffd79a729");
Map<String, String> hashMap = Maps.newHashMap();
hashMap.put("Authorization",md5Encode);
log.info("调用影像票夹接口,调用地址:{},请求头:{},请求参数:{}","http://192.168.33.105:2333/ticket/receive",hashMap,JSONObject.toJSONString(ocrResult));
String body = HttpRequest.post("http://192.168.33.105:2333/ticket/receive").addHeaders(hashMap).body(JSONObject.toJSONString(ocrResult)).timeout(300000).execute().body();
log.info("调用影像票夹接口返回参数:{}",body);
Map resultMap = JSONObject.parseObject(body, Map.class);
Object status = resultMap.get("status");
log.info("status{}",status);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}else {
log.debug("山能OCR识别失败------");
}
}
}
}else { //无附件的不处理
log.debug("没有附件跳过");
continue;
}
//进行数据插入
if(StringUtils.isNotBlank(gatherLogVo.getFpdm()) && StringUtils.isNotBlank(gatherLogVo.getFphm())){
}else {
log.info("未采集到有效数据");
}
}
log.info("邮箱采集使用时间:{}",System.currentTimeMillis() - startTime);
} catch (MessagingException e) {
log.error("邮箱采集邮件解析异常:{}", e.toString());
throw new RuntimeException(e);
} catch (IOException e) {
log.error("邮箱采集IO异常:{}", e);
throw new RuntimeException(e);
}finally {
if (uids.isEmpty() ||uids.indexOf(uid)>uids.indexOf(maintainVo.getEmailUid())){
System.out.println("保存uid:"+uid);
}
// 释放资源
// false为不更新邮件,true为更新,一般在删除邮件后使用
try {
if (folder != null){
folder.close(false);
}
if (store != null){
store.close();
}
} catch (MessagingException e) {
log.debug("关流失败");
}
}
}
public static void main(String[] args) {
//邮件接收协议
String mail_protocol = "mail.store.protocol";

@ -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 * 100 = 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 * 100 = 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>

@ -32,8 +32,8 @@
id, dept_id, company_code, dept_name, username, user_id, email_address,email_password, create_time, del_status, modify_time
from email_maintain
<where>
<if test="deptId != null and deptId != ''">
and dept_id = #{deptId}
<if test="companyCode != null and companyCode != ''">
and company_code = #{companyCode}
</if>
<if test="username != null and username != ''">
and username = #{username}
@ -152,6 +152,9 @@
<if test="emailUid != null and emailUid != ''">
email_uid = #{emailUid},
</if>
<if test="modifyTime != null">
modify_time = #{modifyTime},
</if>
</set>
where id = #{id}
</update>
@ -165,13 +168,23 @@
select username from sys_user where loginname = #{userCode}
</select>
<!-- <select id="getUserByUsername" resultType="java.lang.String">-->
<!-- select code from sys_user where username = #{username}-->
<!-- </select>-->
<select id="getUserByUsername" resultType="java.lang.String">
select code from sys_user where username = #{username}
select loginname from sys_user where username = #{username}
</select>
<select id="selectByEmail" resultType="java.lang.Integer">
select count(1) from email_maintain where email_address = #{email}
</select>
<select id="selectEmailWithId" resultType="int" parameterType="com.dxhy.core.model.mailGather.EmailMaintainVo">
select count(1)
from email_maintain
where email_address = #{email.emailAddress}
and id != #{email.id}
</select>
</mapper>

@ -34,6 +34,9 @@
mail_gather_log m
LEFT JOIN email_maintain e ON m.from_address = e.email_address
<where>
<if test="companyCode != null and companyCode != ''">
and e.company_code = #{companyCode}
</if>
<if test="deptId != null and deptId != ''">
and e.dept_id = #{deptId}
</if>

@ -3,6 +3,8 @@ package com.dxhy.customs.service.impl;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -146,6 +148,12 @@ public class CustomsRecordDkrzServiceImpl extends MpBaseServiceImpl<CustomsRecor
map.put("upgradeStatus", "1");
map.put("select", true);
if(map.get("postingTime") != null) {
LocalDateTime dateTime = (LocalDateTime) map.get("postingTime");
String format = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
map.put("postingTime", format);
}
TdxDkCount tDxDkCount = null;
TdxTaxCurrent tDxTaxCurrent = null;
List<TdxTaxCurrent> tDxTaxCurrents = customsTaxCurrentService
@ -925,6 +933,12 @@ public class CustomsRecordDkrzServiceImpl extends MpBaseServiceImpl<CustomsRecor
map.put("inAccountStatus","未入账");
}
if(map.get("postingTime") != null) {
LocalDateTime dateTime = (LocalDateTime) map.get("postingTime");
String format = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
map.put("postingTime", format);
}
map.put("taxAmount", AmountFormatUtil.fmtMicrometer(MathUtil.round((String)map.get("taxAmount"))));
map.put("yxTaxAmount",
AmountFormatUtil.fmtMicrometer(MathUtil.round((String)map.get("yxTaxAmount"))));

@ -46,6 +46,8 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
@ -125,6 +127,13 @@ public class CustomsSignServiceImpl extends MpBaseServiceImpl<CustomsRecordDao,
if (map.get("fillInDate") != null) {
map.put("fillInDate", map.get("fillInDate"));
}
if(map.get("postingTime") != null) {
LocalDateTime dateTime = (LocalDateTime) map.get("postingTime");
String format = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
map.put("postingTime", format);
}
if ("1".equals(map.get("inAccountStatus"))){
map.put("inAccountStatus","已入账");
}else {

@ -1253,7 +1253,7 @@ public class InterfaceController extends AbstractController {
}
}
public String transferOut(ErpInvoiceData erpInvoiceData){
public String transferOuts(ErpInvoiceData erpInvoiceData){
String zdata = erpInvoiceData.getIS_INPUT().getZDATA();
List<Map> list = JSON.parseArray(zdata, Map.class);
@ -1406,5 +1406,89 @@ public class InterfaceController extends AbstractController {
}
public String transferOut(@RequestBody ErpInvoiceData erpInvoiceData){
try {
//转化实体
String zdata = erpInvoiceData.getIS_INPUT().getZDATA();
List<ZDATAN> zdatans = JSONObject.parseArray(zdata, ZDATAN.class);
//返回结果实体
OutPut outPut = new OutPut();
EsOutPutResp es = new EsOutPutResp();
es.setBSKEY(erpInvoiceData.getIS_INPUT().getBSKEY());
es.setSAPKEY(erpInvoiceData.getIS_INPUT().getSAPKEY());
//校验发票号码
boolean allMatch = zdatans.stream().allMatch(e -> StringUtils.isNotBlank(e.getZFPHM()));
//号码存在为空直接返回错误
if (!allMatch) {
es.setZTYPE("E");
es.setZMESSAGE("发票号码不能为空");
outPut.setES_OUTPUT(es);
log.info("进项税转出传入发票存在没有发票号码发票");
return JsonUtils.getInstance().toJsonString(outPut);
}
StringBuilder uuids = new StringBuilder();
zdatans.forEach(e -> uuids.append(e.getZFPDM() == null ? "" : e.getZFPDM()).append(e.getZFPHM()).append(","));
//根据uuid查询发票
String[] ids = uuids.toString().split(",");
DynamicContextHolder.push("business"+DbConstant.BUSINESS_READ);
List<BaseTDxRecordInvoice> tDxRecordInvoices = baseIReceiptInvoiceService.selectByUuids(ids);
if (tDxRecordInvoices == null || tDxRecordInvoices.size() == 0 || tDxRecordInvoices.size() != ids.length) {
es.setZTYPE("E");
es.setZMESSAGE("发票在发票系统中不存在");
outPut.setES_OUTPUT(es);
log.info("进项税转出传入发票在发票系统中不存在");
return JsonUtils.getInstance().toJsonString(outPut);
}
List<BaseTDxRecordInvoice> collect = tDxRecordInvoices.stream().filter(e -> "0".equals(e.getRzhYesorno())).collect(Collectors.toList());
if (collect.size() > 0) {
es.setZTYPE("E");
es.setZMESSAGE("发票未认证不可转出");
outPut.setES_OUTPUT(es);
log.info("进项税转出传入发票存在未认证发票");
return JsonUtils.getInstance().toJsonString(outPut);
}
List<BaseTDxRecordInvoice> collect1 = tDxRecordInvoices.stream().filter(e -> BigDecimal.ZERO.compareTo(e.getTaxAmount()) > 0).collect(Collectors.toList());
if (collect1 != null && collect1.size()>0){
es.setZTYPE("E");
es.setZMESSAGE("税额小于零不可转出");
outPut.setES_OUTPUT(es);
log.info("进项税转出传入发票存在税额小于零发票");
return JsonUtils.getInstance().toJsonString(outPut);
}
//进项税转出或者取消转出
UserInfo userInfo = new UserInfo();
iReceiptOutService.transferOrcancelOut(zdatans,userInfo);
es.setZTYPE("Y");
es.setZMESSAGE("操作成功");
log.info("进项税转出成功");
return JsonUtils.getInstance().toJsonString(es);
}catch(RuntimeException e){
e.printStackTrace();
log.error("error", e.getMessage());
OutPut outPut = new OutPut();
EsOutPutResp es = new EsOutPutResp();
es.setBSKEY(erpInvoiceData.getIS_INPUT().getBSKEY());
es.setSAPKEY(erpInvoiceData.getIS_INPUT().getSAPKEY());
es.setZTYPE("E");
es.setZMESSAGE(e.getMessage());
outPut.setES_OUTPUT(es);
return JsonUtils.getInstance().toJsonString(outPut);
} catch (Exception e){
e.printStackTrace();
log.error("error", e.getMessage());
OutPut outPut = new OutPut();
EsOutPutResp es = new EsOutPutResp();
es.setBSKEY(erpInvoiceData.getIS_INPUT().getBSKEY());
es.setSAPKEY(erpInvoiceData.getIS_INPUT().getSAPKEY());
es.setZTYPE("E");
es.setZMESSAGE("系统内部错误");
outPut.setES_OUTPUT(es);
return JsonUtils.getInstance().toJsonString(outPut);
}
}
}

@ -0,0 +1,24 @@
package com.dxhy.erp.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ZDATAN {
@JsonProperty(value = "IS_INPUT")
private String MANDT;
@JsonProperty(value = "IS_INPUT")
private String ZBZDH;
@JsonProperty(value = "IS_INPUT")
private String ZFPDM;
@JsonProperty(value = "IS_INPUT")
private String ZFPHM;
@JsonProperty(value = "IS_INPUT")
private BigDecimal JXSZC;
@JsonProperty(value = "IS_INPUT")
private String ZZCYY;
@JsonProperty(value = "IS_INPUT")
private String BUDAT;
}

@ -2,7 +2,13 @@ package com.dxhy.erp.service;
import com.dxhy.common.vo.UserInfo;
import com.dxhy.erp.entity.BaseInvoiceEditVO;
import com.dxhy.erp.entity.BaseTDxRecordInvoice;
import com.dxhy.erp.model.ErpInvoiceData;
import com.dxhy.erp.model.ZDATAN;
import org.junit.jupiter.api.parallel.Execution;
import java.util.List;
import java.util.concurrent.ExecutionException;
/**
* @Author wangzhikun
@ -11,4 +17,6 @@ import com.dxhy.erp.model.ErpInvoiceData;
public interface IReceiptOutService {
String transfer(BaseInvoiceEditVO baseInvoiceEditVO, UserInfo userInfo);
String transferOrcancelOut(List<ZDATAN> zdatans,UserInfo userInfo);
}

@ -51,13 +51,7 @@ public class ReceiptOutServiceImpl extends MpBaseServiceImpl<BaseReceiptOutDao,
// first:查询出底账表相关数据
List<BaseTDxRecordInvoice> invoices = baseIReceiptInvoiceService.selectByUuids(ids);
if(CollectionUtils.isEmpty(invoices)){
return TransferContant.INVOICE_NOT_EXIT;
}
invoices = invoices.stream().filter(e -> !"0".equals(e.getRzhYesorno())).collect(Collectors.toList());
if(CollectionUtils.isEmpty(invoices)){
return TransferContant.NOT_RZ;
}
// second:根据uuids查询出转出明细并转为map,key=uuid ,value=转出明细
List<BaseTDxRecordInvoiceOut> outs = listByUuids(ids);
Map<String, BaseTDxRecordInvoiceOut> outMap =
@ -83,6 +77,30 @@ public class ReceiptOutServiceImpl extends MpBaseServiceImpl<BaseReceiptOutDao,
return TransferContant.SUCCESS;
}
@Override
@Transactional(rollbackFor = Exception.class)
public String transferOrcancelOut(List<ZDATAN> zdatans,UserInfo userInfo){
String result = "";
for (ZDATAN zdata : zdatans) {
//转出税额大于1则是转出
if (zdata.getJXSZC().compareTo(BigDecimal.ZERO)==1){
BaseInvoiceEditVO baseInvoiceEditVO = new BaseInvoiceEditVO();
baseInvoiceEditVO.setPrimaryKey(zdata.getZFPDM()==null?"":zdata.getZFPDM()+zdata.getZFPHM());
baseInvoiceEditVO.setOutReason(zdata.getZZCYY());
baseInvoiceEditVO.setOutTax(zdata.getJXSZC().toPlainString());
baseInvoiceEditVO.setOutStatus("1");
baseInvoiceEditVO.setOutTaxPeriod(zdata.getBUDAT());
this.transfer(baseInvoiceEditVO,userInfo);
}else {//转出税额小于0取消转出
BaseReceiptOutCancelEditReqVO baseReceiptOutCancelEditReqVO = new BaseReceiptOutCancelEditReqVO();
baseReceiptOutCancelEditReqVO.setPrimaryKey(zdata.getZFPDM()==null?"":zdata.getZFPDM()+zdata.getZFPHM());
baseIReceiptInvoiceService.cancelOut(baseReceiptOutCancelEditReqVO);
}
}
return TransferContant.SUCCESS;
}
/**
* 根据uuids查询进项税转出明细
*
@ -135,10 +153,19 @@ public class ReceiptOutServiceImpl extends MpBaseServiceImpl<BaseReceiptOutDao,
}
/*全部转出 */
if (JxszcZtEnum.QBZC.getZcztDm().equals(condVO.getOutStatus())) {
if (record.getOutTaxAmount() != null && record.getOutTaxAmount().compareTo(BigDecimal.ZERO)>0){
throw new RuntimeException("累计转出税额不能大于发票税额");
}
// 转出金额
condRecord.setOutInvoiceAmout(record.getInvoiceAmount());
// 转出税额
condRecord.setOutTaxAmount(record.getDkTaxAmount());
if (condRecord.getOutTaxAmount() == null){
condRecord.setOutTaxAmount(new BigDecimal(condVO.getOutTax()));
}
if (condRecord.getOutTaxAmount().compareTo(record.getTaxAmount()) > 0){
throw new RuntimeException("转出税额不能大于发票税额");
}
}
/*部分转出 */
if (JxszcZtEnum.BFZC.getZcztDm().equals(condVO.getOutStatus())) {
@ -204,10 +231,19 @@ public class ReceiptOutServiceImpl extends MpBaseServiceImpl<BaseReceiptOutDao,
/* 全部转出 */
if (JxszcZtEnum.QBZC.getZcztDm().equals(condVO.getOutStatus())) {
if (invoice.getOutTaxAmount() != null && invoice.getOutTaxAmount().compareTo(BigDecimal.ZERO)>0){
throw new RuntimeException("累计转出税额不能大于发票税额");
}
// 转出金额
record.setOutInvoiceAmout(invoice.getInvoiceAmount());
// 转出税额
record.setOutTaxAmount(invoice.getDkTaxAmount());
if (record.getOutTaxAmount() == null){
record.setOutTaxAmount(new BigDecimal(condVO.getOutTax()));
}
if (record.getOutTaxAmount().compareTo(invoice.getTaxAmount()) > 0){
throw new RuntimeException("转出税额不能大于发票税额");
}
}
/* 部分转出 */
if (JxszcZtEnum.BFZC.getZcztDm().equals(condVO.getOutStatus())) {

@ -140,6 +140,11 @@ public class DomesticExportCustomsCkServiceImpl extends ServiceImpl<DomesticExpo
tDxDkCount = tdxDkCounts.get(0);
String fillInDate = (String)map.get("fillInDate");
if(map.get("postingTime") != null) {
LocalDateTime dateTime = (LocalDateTime) map.get("postingTime");
String format = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
map.put("postingTime", format);
}
if (!DateUtil.isInTwoDate(tDxTaxCurrent.getSelectStartDate(), tDxTaxCurrent.getSelectEndDate(),
fillInDate)) {
map.put("select", false);
@ -552,10 +557,10 @@ public class DomesticExportCustomsCkServiceImpl extends ServiceImpl<DomesticExpo
if (map.get("rzhDate") != null) {
map.put("rzhDate", map.get("rzhDate"));
}
if (map.get("postingTme") != null && map.get("postingTme").toString() != null && StringUtils.isNotEmpty(map.get("postingTme").toString())) {
String postingTime = map.get("postingTme").toString().replace("T"," ");
log.info("postingTme={}",postingTime);
map.put("postingTme", postingTime);
if(map.get("postingTime") != null) {
LocalDateTime dateTime = (LocalDateTime) map.get("postingTime");
String format = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
map.put("postingTime", format);
}
// 字典值转换

@ -3,10 +3,13 @@ package com.dxhy.domestic.service.ckzrz.impl;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
@ -44,6 +47,7 @@ import cn.hutool.core.codec.Base64;
* @author dxhy
*/
@SuppressWarnings("AlibabaMethodTooLong")
@Slf4j
@Service
public class DomesticExportInvoiceCkServiceImpl extends ServiceImpl<DomesticExportInvoiceDao, TdxExportInvoice>
implements DomesticExportInvoiceCkService {
@ -80,7 +84,6 @@ public class DomesticExportInvoiceCkServiceImpl extends ServiceImpl<DomesticExpo
}
Page<Map<String, Object>> result = this.baseMapper.queryVatSgrz(page, dto);
if (ResultData.isEmpty(result)) {
// List<DictdetaModel> fpztModels = dictdetaServcice.selectDictdeta("INVOICE_STATUS");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
@ -101,6 +104,12 @@ public class DomesticExportInvoiceCkServiceImpl extends ServiceImpl<DomesticExpo
map.put("inAccountStatus","未入账");
}
if(map.get("postingTime") != null) {
LocalDateTime dateTime = (LocalDateTime) map.get("postingTime");
String format = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
map.put("postingTime", format);
}
map.put("exportAmount", AmountFormatUtil
.fmtMicrometer(MathUtil.round(((BigDecimal)map.get("exportAmount")).toPlainString())));
map.put("exportTaxAmount", AmountFormatUtil
@ -391,7 +400,6 @@ public class DomesticExportInvoiceCkServiceImpl extends ServiceImpl<DomesticExpo
}
Page<Map> result = this.baseMapper.queryVatBdk(page, dto);
if (ResultData.isEmpty(result)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for (int i = 0; i < page.getRecords().size(); i++) {
@ -418,6 +426,12 @@ public class DomesticExportInvoiceCkServiceImpl extends ServiceImpl<DomesticExpo
map.put("inAccountStatus","未入账");
}
if(map.get("postingTime") != null) {
LocalDateTime dateTime = (LocalDateTime) map.get("postingTime");
String format = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
map.put("postingTime", format);
}
map.put("exportAmount", AmountFormatUtil
.fmtMicrometer(MathUtil.round(((BigDecimal)map.get("exportAmount")).toPlainString())));
map.put("exportTaxAmount", AmountFormatUtil
@ -509,7 +523,6 @@ public class DomesticExportInvoiceCkServiceImpl extends ServiceImpl<DomesticExpo
}
Page<Map<String, Object>> result = this.baseMapper.queryVatRzcx(page, dto);
if (ResultData.isEmpty(result)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for (int i = 0; i < page.getRecords().size(); i++) {
@ -520,7 +533,6 @@ public class DomesticExportInvoiceCkServiceImpl extends ServiceImpl<DomesticExpo
String rzhYesorno = (String)map.get("rzhYesorno");
String invoiceStatus = (String)map.get("invoiceStatus");
String authStatus = (String)map.get("authStatus");
String postingTime = (String)map.get("postingTime");
map.put("xh",
String.valueOf((((page.getCurrent() == 0 ? 1 : page.getCurrent()) - 1) * page.getSize()) + i + 1));
@ -537,7 +549,11 @@ public class DomesticExportInvoiceCkServiceImpl extends ServiceImpl<DomesticExpo
map.put("authStatus", dictdetaServcice.queryDictName(DictConstant.AUTH_STATUS_ALL, authStatus));
map.put("bdkStatus", dictdetaServcice.queryDictName(DictConstant.BDK_STATUS, bdkStatus));
map.put("cxrzStatus", dictdetaServcice.queryDictName(DictConstant.CXRZ_STATUS, cxrzStatus));
map.put("postingTime", StringUtils.isNotEmpty(postingTime) ? postingTime.replace("T"," ") : "");
if(map.get("postingTime") != null) {
LocalDateTime dateTime = (LocalDateTime) map.get("postingTime");
String format = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
map.put("postingTime", format);
}
if ("1".equals(map.get("inAccountStatus"))){
map.put("inAccountStatus","已入账");

@ -4,7 +4,7 @@ spring:
nacos:
config:
# Nacos config 地址
server-addr: 172.31.36.143:33000
server-addr: 172.31.36.146:33000
# Nacos config 命名空间,对应配置中的名称(dxhy-jxpt-namespace)
namespace: b271ba8e-84d9-4393-88b8-9271aff9465c
# Nacos config 分组
@ -19,7 +19,7 @@ spring:
file-extension: yaml
# Nacos discovery 配置
discovery:
server-addr: 172.31.36.143:33000
server-addr: 172.31.36.146:33000
# Nacos config 登录用户名
username: admin
# Nacos config 登录密码

@ -4,7 +4,7 @@ spring:
nacos:
config:
# Nacos config 地址
server-addr: 172.31.36.143:33000
server-addr: 172.31.36.146:33000
# Nacos config 命名空间,对应配置中的名称(dxhy-jxpt-namespace)
namespace: b271ba8e-84d9-4393-88b8-9271aff9465c
# Nacos config 分组
@ -19,7 +19,7 @@ spring:
file-extension: yaml
# Nacos discovery 配置
discovery:
server-addr: 172.31.36.143:33000
server-addr: 172.31.36.146:33000
# Nacos config 登录用户名
username: admin
# Nacos config 登录密码

Loading…
Cancel
Save