diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/mem/ImportTemplateTask.java b/mallinkAdmin/src/main/java/com/iformall/controller/mem/ImportTemplateTask.java index 1052e6566..5e097c3d7 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/mem/ImportTemplateTask.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/mem/ImportTemplateTask.java @@ -9,6 +9,7 @@ import com.iformall.domain.po.MallUserInfo; import com.iformall.domain.po.WxMerchant; import com.iformall.domain.po.WxTags; import com.iformall.domain.vo.CUserBaseInfoT; +import com.iformall.domain.vo.WxBillExcelTemplate; import com.iformall.domain.vo.WxBillExcelTemplateOther; import com.iformall.enums.EnumMerchantStatus; import com.iformall.mapper.WxMerchantMapper; @@ -57,8 +58,102 @@ public class ImportTemplateTask { ImportParams params = new ImportParams(); // 需要验证 params.setImportFields(new String[]{"商户名*", "费用类型*", "费用属性*", "费用所属期-开始时间*", "费用所属期-结束时间*", "收款金额(元)*", "收款日期*", "截止缴款日*", "收款方式"}); - IExcelDataHandler handler = new ImportTemplateTask.UserExcelHandler(); - handler.setNeedHandlerFields(new String[]{"商户名*", "费用类型*", "费用属性*", "费用所属期-开始时间*", "费用所属期-结束时间*", "收款金额(元)*", "收款日期*", "截止缴款日*"}); + params.setNeedVerify(true); + + ExcelImportResult datalist = null; + + try { + datalist = ExcelImportUtil.importExcelMore(file, WxBillExcelTemplate.class, params); + } catch (Exception e) { + set_redis_value(importKey, "1", "0", "0", "1", true); + logger.error(e.getMessage()); + // 删除缓存文件 + file.delete(); + return; + } + // 删除缓存文件 + file.delete(); + + if (datalist == null) { + logger.error("导入模板失败: 模板数据解析失败"); + set_redis_value(importKey, "1", "0", "0", "1", true); + return; + } + + List successList = datalist.getList(); + List failList = datalist.getFailList(); + + //此处判断商户是否存在 + //1 过滤重复商户名 + Set merchantSet = successList.parallelStream().filter(s -> StringUtils.isNotEmpty(s.getMerchantName())) + .map(s -> StringUtils.trim(s.getMerchantName())) + .collect(Collectors.toSet()); + //2 查询商户名是否存在 + Map merchantMap = new HashMap<>(); + merchantSet.parallelStream().forEach(merchantName -> { + WxMerchant wxMerchantQuery = new WxMerchant(); + wxMerchantQuery.setTenantId(tenantId); + wxMerchantQuery.setName(merchantName); + wxMerchantQuery.setStatus(EnumMerchantStatus.VALID.getCode()); + WxMerchant wxMerchant = wxMerchantMapper.selectOne(wxMerchantQuery); + if (wxMerchant != null) { + merchantMap.put(merchantName, wxMerchant); + } + }); + //3 计失败条数 + List billSuccessList = new ArrayList<>(); + successList.parallelStream().forEach(s -> { + if (StringUtils.isNotEmpty(s.getMerchantName()) && null != s.getBillType() + && StringUtils.isNotEmpty(s.getBillAttr()) && null != s.getStarttime() + && null != s.getEndtime() && StringUtils.isNotEmpty(s.getPayStr()) + && null != s.getPayDate() && null != s.getReceiveDate()) { + WxMerchant wxMerchant = merchantMap.get(s.getMerchantName()); + if (wxMerchant != null) { + Long merchantId = wxMerchant.getId(); + if (merchantId != null) { + s.setMerchantId(merchantId); + Integer type = wxMerchant.getType(); + s.setMerchantType(type); + billSuccessList.add(s); + } + } + } + }); + int billSuccessSize = billSuccessList.size(); + int successSize = successList.size(); + int failSize = failList.size(); + int total = successSize + failSize; + int failCount = successSize - billSuccessSize; + int all_success = billSuccessSize; + int all_fail = failSize + failCount; + + logger.info("验证通过的数量: " + billSuccessSize); + logger.info("验证未通过的数量: " + failSize); + + //添加到redis里 + set_redis_value(importKey, "" + total, "" + all_success, "0", "" + all_fail, total == all_fail); + + if (billSuccessSize > 0) { + try { + billSuccessList.stream().forEach(bill -> { + try { + wxBillAllService.importBill(tenantId, importKey, bill, user); + } catch (UnknownSessionException ue) { + logger.error("session :" + ue.getMessage()); + } + }); + } catch (Exception e) { + set_redis_value(importKey, "1", "0", "0", "1", true); + e.printStackTrace(); + logger.error("导入模板失败:" + e.getMessage()); + } + } + } + + public void importBillDataOther(File file, MallUserInfo user, String importKey, String tenantId) { + ImportParams params = new ImportParams(); + // 需要验证 + params.setImportFields(new String[]{"商户名*", "费用类型*", "费用属性*", "费用所属期-开始时间*", "费用所属期-结束时间*", "实际应收金额(元)*", "收款金额(元)*", "收款日期*", "截止缴款日*", "收款方式"}); params.setNeedVerify(true); ExcelImportResult datalist = null; @@ -107,7 +202,8 @@ public class ImportTemplateTask { if (StringUtils.isNotEmpty(s.getMerchantName()) && null != s.getBillType() && StringUtils.isNotEmpty(s.getBillAttr()) && null != s.getStarttime() && null != s.getEndtime() && StringUtils.isNotEmpty(s.getPayStr()) - && null != s.getPayDate() && null != s.getReceiveDate()) { + && null != s.getPayDate() && null != s.getReceiveDate() + && StringUtils.isNotEmpty(s.getReceivePayStr()) && Long.parseLong(s.getPayStr()) > 0L) { WxMerchant wxMerchant = merchantMap.get(s.getMerchantName()); if (wxMerchant != null) { Long merchantId = wxMerchant.getId(); @@ -138,7 +234,7 @@ public class ImportTemplateTask { try { billSuccessList.stream().forEach(bill -> { try { - wxBillAllService.importBill(tenantId, importKey, bill, user); + wxBillAllService.importBillOther(tenantId, importKey, bill, user); } catch (UnknownSessionException ue) { logger.error("session :" + ue.getMessage()); } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/template/WxImportTemplateController.java b/mallinkAdmin/src/main/java/com/iformall/controller/template/WxImportTemplateController.java index 371fb78c9..e322b5f09 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/template/WxImportTemplateController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/template/WxImportTemplateController.java @@ -136,10 +136,13 @@ public class WxImportTemplateController extends BaseController { } if (type.equals(EnumImportType.MEMBER.getCode())) { importTemplateTask.importMemberData(lFile, user, importKey, tenantId); + } else if (type.equals(EnumImportType.SHOP_RENT.getCode()) || type.equals(EnumImportType.POINT_RENT.getCode()) + || type.equals(EnumImportType.SHOP_PROPERTY.getCode()) || type.equals(EnumImportType.POINT_PROPERTY.getCode())) { + importTemplateTask.importBillData(lFile, user, importKey, tenantId); + } else if (type.equals(EnumImportType.DAILY.getCode()) || type.equals(EnumImportType.OTHER.getCode()) + || type.equals(EnumImportType.OTHER_DEPOSIT.getCode())) { + importTemplateTask.importBillDataOther(lFile, user, importKey, tenantId); } - //暂时不区分账单类型,导入时区分 - importTemplateTask.importBillData(lFile, user, importKey, tenantId); - return new ResultData(Result.SUCCESS, "模板正在导入"); } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxBillExcelTemplate.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxBillExcelTemplate.java index b86933a0d..302cb33c0 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxBillExcelTemplate.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxBillExcelTemplate.java @@ -17,6 +17,9 @@ public class WxBillExcelTemplate { @Excel(name = "费用类型*", width = 20, orderNum = "2", replace = {"商铺租金_1", "多经点位租金_2", "商铺物业费_3", "多经点位物业费_4", "日常费用_5", "其他费用_6", "其他押金_7"}) private Integer billType; + @Excel(name = "费用属性*", width = 20, orderNum = "3") + private String billAttr; + @Excel(name = "费用所属期-开始时间*", width = 20, orderNum = "4", format = "yyyy-MM-dd") private Date starttime; diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxBillExcelTemplateDaily.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxBillExcelTemplateDaily.java deleted file mode 100644 index 7ca105ae2..000000000 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxBillExcelTemplateDaily.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.iformall.domain.vo; - -import cn.afterturn.easypoi.excel.annotation.Excel; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - * @author gongbiao - */ -@Data -@EqualsAndHashCode(callSuper = true) -public class WxBillExcelTemplateDaily extends WxBillExcelTemplate { - - @Excel(name = "费用属性*", width = 20, orderNum = "3", replace = {"租金_1", "物业费_2", "水费_3", "电费_4", "空调费_5", "其他费用_6", "其他押金_7"}) - private Integer billAttr; - -} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxBillExcelTemplateOther.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxBillExcelTemplateOther.java index e3d0ee825..96fc6cc49 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxBillExcelTemplateOther.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxBillExcelTemplateOther.java @@ -4,6 +4,8 @@ import cn.afterturn.easypoi.excel.annotation.Excel; import lombok.Data; import lombok.EqualsAndHashCode; +import java.util.Date; + /** * @author gongbiao */ @@ -11,7 +13,27 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) public class WxBillExcelTemplateOther extends WxBillExcelTemplate { - @Excel(name = "费用属性*", width = 20, orderNum = "3") + @Excel(name = "费用名称*", width = 20, orderNum = "3") private String billAttr; + @Excel(name = "费用所属期-开始时间*", width = 20, orderNum = "4", format = "yyyy-MM-dd") + private Date starttime; + + @Excel(name = "费用所属期-结束时间*", width = 20, orderNum = "5", format = "yyyy-MM-dd") + private Date endtime; + @Excel(name = "实际应收金额(元)*", width = 20, orderNum = "6") + private String receivePayStr; + + @Excel(name = "收款金额(元)*", width = 20, orderNum = "7") + private String payStr; + + @Excel(name = "收款日期*", width = 20, orderNum = "8", format = "yyyy-MM-dd") + private Date payDate; + + @Excel(name = "截止缴款日*", width = 20, orderNum = "9", format = "yyyy-MM-dd") + private Date receiveDate; + + @Excel(name = "收款方式", width = 20, orderNum = "10") + private String payWay; + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java b/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java index d88478445..1950f3b16 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java @@ -62,5 +62,8 @@ public interface WxBillAllService { void exportTemplate(WxBillExcelTemplate wxBillExcelTemplate, HttpServletRequest request, HttpServletResponse response); - void importBill(String tenantId, String importKey, WxBillExcelTemplateOther bill, MallUserInfo user); + void importBill(String tenantId, String importKey, WxBillExcelTemplate bill, MallUserInfo user); + + void importBillOther(String tenantId, String importKey, WxBillExcelTemplateOther bill, MallUserInfo user); + } \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java index 4a6cc94f9..2b557b12a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java @@ -907,7 +907,9 @@ public class WxBillAllServiceImpl implements WxBillAllService { @Override public void exportTemplate(WxBillExcelTemplate WxBillExcelTemplate, HttpServletRequest request, HttpServletResponse response) { - List datalist = new ArrayList<>(); + List datalist = new ArrayList<>(); + List otherDatalist = new ArrayList<>(); + Integer billType = WxBillExcelTemplate.getBillType(); if (billType.equals(EnumBillExcelTemplate.DAILY.getCode())) { WxBillExcelTemplateOther one = new WxBillExcelTemplateOther(); @@ -917,11 +919,12 @@ public class WxBillAllServiceImpl implements WxBillAllService { one.setBillAttr("水费"); one.setStarttime(date); one.setEndtime(date); + one.setReceivePayStr("1000"); one.setPayStr("1000"); one.setPayDate(date); one.setReceiveDate(date); one.setPayWay("微信"); - datalist.add(one); + otherDatalist.add(one); WxBillExcelTemplateOther two = new WxBillExcelTemplateOther(); two.setMerchantName("商户2"); @@ -929,11 +932,12 @@ public class WxBillAllServiceImpl implements WxBillAllService { two.setBillAttr("电费"); two.setStarttime(date); two.setEndtime(date); + two.setReceivePayStr("2000.50"); two.setPayStr("2000.50"); two.setPayDate(date); two.setReceiveDate(date); two.setPayWay("支付宝"); - datalist.add(two); + otherDatalist.add(two); WxBillExcelTemplateOther three = new WxBillExcelTemplateOther(); three.setMerchantName("商户3"); @@ -941,107 +945,80 @@ public class WxBillAllServiceImpl implements WxBillAllService { three.setBillAttr("空调费"); three.setStarttime(date); three.setEndtime(date); + three.setReceivePayStr("3333"); three.setPayStr("3333"); three.setPayDate(date); three.setReceiveDate(date); three.setPayWay("其他"); - datalist.add(three); + otherDatalist.add(three); + excelService.exportExcel(otherDatalist, null, "账单模板", WxBillExcelTemplateOther.class, "账单模板.xlsx", response, true); + } else if (billType.equals(EnumBillExcelTemplate.SHOP_RENT.getCode()) || billType.equals(EnumBillExcelTemplate.POINT_RENT.getCode())) { + WxBillExcelTemplate one = new WxBillExcelTemplate(); + Date date = new Date(); + one.setMerchantName("商户"); + one.setBillType(billType); + one.setBillAttr("租金"); + one.setStarttime(date); + one.setEndtime(date); + one.setPayStr("2000.50"); + one.setReceiveDate(date); + one.setPayDate(date); + one.setPayWay("微信"); + datalist.add(one); + excelService.exportExcel(datalist, null, "账单模板", WxBillExcelTemplate.class, "账单模板.xlsx", response, true); + } else if (billType.equals(EnumBillExcelTemplate.SHOP_PROPERTY.getCode()) || billType.equals(EnumBillExcelTemplate.POINT_PROPERTY.getCode())) { + WxBillExcelTemplate one = new WxBillExcelTemplate(); + Date date = new Date(); + one.setMerchantName("商户"); + one.setBillType(billType); + one.setBillAttr("物业费"); + one.setStarttime(date); + one.setEndtime(date); + one.setPayStr("2000.50"); + one.setReceiveDate(date); + one.setPayDate(date); + one.setPayWay("微信"); + datalist.add(one); + excelService.exportExcel(datalist, null, "账单模板", WxBillExcelTemplate.class, "账单模板.xlsx", response, true); + } else if (billType.equals(EnumBillExcelTemplate.OTHER.getCode())) { + WxBillExcelTemplateOther one = new WxBillExcelTemplateOther(); + Date date = new Date(); + one.setMerchantName("商户"); + one.setBillType(billType); + one.setBillAttr("其他费用"); + one.setStarttime(date); + one.setEndtime(date); + one.setReceivePayStr("2000.50"); + one.setPayStr("2000.50"); + one.setReceiveDate(date); + one.setPayDate(date); + one.setPayWay("微信"); + otherDatalist.add(one); + excelService.exportExcel(otherDatalist, null, "账单模板", WxBillExcelTemplateOther.class, "账单模板.xlsx", response, true); } else { - WxBillExcelTemplateOther one = new WxBillExcelTemplateOther(); Date date = new Date(); one.setMerchantName("商户"); one.setBillType(billType); - if (billType.equals(EnumBillExcelTemplate.SHOP_RENT.getCode()) || billType.equals(EnumBillExcelTemplate.POINT_RENT.getCode())) { - one.setBillAttr("租金"); - } else if (billType.equals(EnumBillExcelTemplate.SHOP_PROPERTY.getCode()) || billType.equals(EnumBillExcelTemplate.POINT_PROPERTY.getCode())) { - one.setBillAttr("物业费"); - } else if (billType.equals(EnumBillExcelTemplate.OTHER.getCode())) { - one.setBillAttr("其他费用"); - } else { - one.setBillAttr("其他押金"); - } + one.setBillAttr("其他押金"); one.setStarttime(date); one.setEndtime(date); + one.setReceivePayStr("2000.50"); one.setPayStr("2000.50"); one.setReceiveDate(date); one.setPayDate(date); one.setPayWay("微信"); - datalist.add(one); + otherDatalist.add(one); + excelService.exportExcel(otherDatalist, null, "账单模板", WxBillExcelTemplateOther.class, "账单模板.xlsx", response, true); } - excelService.exportExcel(datalist, null, "账单模板", WxBillExcelTemplateOther.class, "账单模板.xlsx", response, true); - } @Override - public void importBill(String tenantId, String importKey, WxBillExcelTemplateOther bill, MallUserInfo user) { - //租金 + public void importBillOther(String tenantId, String importKey, WxBillExcelTemplateOther bill, MallUserInfo user) { Integer billType = bill.getBillType(); - if (billType.equals(EnumBillExcelTemplate.SHOP_RENT.getCode()) || billType.equals(EnumBillExcelTemplate.POINT_RENT.getCode())) { - WxBillRent rentQuery = new WxBillRent(); - rentQuery.setTenantId(tenantId); - rentQuery.setMerchantId(bill.getMerchantId()); - rentQuery.setStarttime(bill.getStarttime()); - rentQuery.setEndtime(bill.getEndtime()); - if (billType.equals(EnumBillExcelTemplate.SHOP_RENT.getCode())) { - rentQuery.setRentShopType(EnumRentShopType.SHOP.getCode()); - } else { - rentQuery.setRentShopType(EnumRentShopType.POINT.getCode()); - } - rentQuery.setIsPreview(EnumIsPreview.NO.getCode()); - WxBillRent rent = wxBillRentMapper.selectBillOne(rentQuery); - if (rent != null && !rent.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { - long pay = new BigDecimal(bill.getPayStr()).multiply(new BigDecimal(100)).longValueExact(); - if (rent.getOwe() <= pay) { - rent.setStatus(EnumBillRentStatus.PAID.getCode()); - Date payDate = bill.getPayDate(); - Date receiveDate = bill.getReceiveDate(); - rent.setExpiredDay(0L); - if (payDate.after(receiveDate)) { - int expiredDay = DateUtils.daysBetween(receiveDate, payDate); - rent.setExpiredDay((long) expiredDay); - } - } - rent.setPay(rent.getPay() + pay); - rent.setOwe(rent.getOwe() - pay); - rent.setPayDate(bill.getPayDate()); - rent.setReceiveDate(bill.getReceiveDate()); - wxBillRentMapper.updateByPrimaryKey(rent); - addActionImport(rent.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); - } - } else if (billType.equals(EnumBillExcelTemplate.SHOP_PROPERTY.getCode()) || billType.equals(EnumBillExcelTemplate.POINT_PROPERTY.getCode())) { - WxBillProperty propertyQuery = new WxBillProperty(); - propertyQuery.setTenantId(tenantId); - propertyQuery.setMerchantId(bill.getMerchantId()); - propertyQuery.setStarttime(bill.getStarttime()); - propertyQuery.setEndtime(bill.getEndtime()); - if (billType.equals(EnumBillExcelTemplate.SHOP_PROPERTY.getCode())) { - propertyQuery.setRentShopType(EnumRentShopType.SHOP.getCode()); - } else { - propertyQuery.setRentShopType(EnumRentShopType.POINT.getCode()); - } - propertyQuery.setIsPreview(EnumIsPreview.NO.getCode()); - WxBillProperty property = wxBillPropertyMapper.selectBillOne(propertyQuery); - if (property != null && !property.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { - long pay = new BigDecimal(bill.getPayStr()).multiply(new BigDecimal(100)).longValueExact(); - if (property.getOwe() <= pay) { - property.setStatus(EnumBillRentStatus.PAID.getCode()); - Date payDate = bill.getPayDate(); - Date receiveDate = bill.getReceiveDate(); - property.setExpiredDay(0L); - if (payDate.after(receiveDate)) { - int expiredDay = DateUtils.daysBetween(receiveDate, payDate); - property.setExpiredDay((long) expiredDay); - } - } - property.setPay(property.getPay() + pay); - property.setOwe(property.getOwe() - pay); - property.setPayDate(bill.getPayDate()); - property.setReceiveDate(bill.getReceiveDate()); - wxBillPropertyMapper.updateByPrimaryKey(property); - addActionImport(property.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); - } - } else if (billType.equals(EnumBillExcelTemplate.DAILY.getCode())) { + long receivePay = new BigDecimal(bill.getReceivePayStr()).multiply(new BigDecimal(100)).longValueExact(); + long pay = new BigDecimal(bill.getPayStr()).multiply(new BigDecimal(100)).longValueExact(); + if (billType.equals(EnumBillExcelTemplate.DAILY.getCode())) { WxBillDaily dailyQuery = new WxBillDaily(); String billAttrStr = StringUtils.trim(bill.getBillAttr()); if (billAttrStr.equals(EnumBillExcelTemplateDaily.WATER.getMessage())) { @@ -1058,10 +1035,10 @@ public class WxBillAllServiceImpl implements WxBillAllService { dailyQuery.setReceiveDate(bill.getReceiveDate()); dailyQuery.setIsDel(EnumDelStatus.NOT_DEL.getCode()); WxBillDaily daily = wxBillDailyMapper.selectOne(dailyQuery); - long pay = new BigDecimal(bill.getPayStr()).multiply(new BigDecimal(100)).longValueExact(); if (daily != null) { if (!daily.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { - if (daily.getOwe() <= pay) { + long allPay = new BigDecimal(daily.getPay()).add(new BigDecimal(pay)).longValueExact(); + if (allPay >= receivePay) { daily.setStatus(EnumBillRentStatus.PAID.getCode()); Date payDate = bill.getPayDate(); Date receiveDate = bill.getReceiveDate(); @@ -1088,8 +1065,7 @@ public class WxBillAllServiceImpl implements WxBillAllService { daily = new WxBillDaily(); final IdWorker idWorker = IdWorker.get(); daily.setId(idWorker.nextId()); - daily.setStatus(EnumBillRentStatus.PAID.getCode()); - daily.setReceivePay(pay); + daily.setReceivePay(receivePay); daily.setReceiveDate(bill.getReceiveDate()); daily.setPay(pay); daily.setType(dailyQuery.getType()); @@ -1106,11 +1082,18 @@ public class WxBillAllServiceImpl implements WxBillAllService { daily.setIsDel(EnumDelStatus.NOT_DEL.getCode()); daily.setStarttime(bill.getStarttime()); daily.setEndtime(bill.getEndtime()); - Date payDate = daily.getPayDate(); - Date receiveDate = daily.getReceiveDate(); - if (payDate.after(receiveDate)) { - int expiredDay = DateUtils.daysBetween(receiveDate, payDate); - daily.setExpiredDay((long) expiredDay); + if (receivePay <= pay) { + daily.setStatus(EnumBillRentStatus.PAID.getCode()); + } else { + Date payDate = daily.getPayDate(); + Date receiveDate = daily.getReceiveDate(); + if (payDate.before(receiveDate)) { + daily.setStatus(EnumBillRentStatus.WAIT_PAY.getCode()); + } else { + daily.setStatus(EnumBillRentStatus.NOT_PAID.getCode()); + int expiredDay = DateUtils.daysBetween(receiveDate, payDate); + daily.setExpiredDay((long) expiredDay); + } } wxBillDailyMapper.insertSelective(daily); addActionImport(daily.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); @@ -1124,10 +1107,10 @@ public class WxBillAllServiceImpl implements WxBillAllService { otherQuery.setName(bill.getBillAttr()); otherQuery.setIsDel(EnumDelStatus.NOT_DEL.getCode()); WxBillOther other = wxBillOtherMapper.selectOne(otherQuery); - long pay = new BigDecimal(bill.getPayStr()).multiply(new BigDecimal(100)).longValueExact(); if (other != null) { if (!other.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { - if (other.getOwe() <= pay) { + long allPay = new BigDecimal(other.getPay()).add(new BigDecimal(pay)).longValueExact(); + if (allPay >= receivePay) { other.setStatus(EnumBillRentStatus.PAID.getCode()); Date payDate = bill.getPayDate(); Date receiveDate = bill.getReceiveDate(); @@ -1158,8 +1141,7 @@ public class WxBillAllServiceImpl implements WxBillAllService { other.setId(idWorker.nextId()); other.setName(bill.getBillAttr()); other.setComments(bill.getBillAttr()); - other.setStatus(EnumBillRentStatus.PAID.getCode()); - other.setReceivePay(pay); + other.setReceivePay(receivePay); other.setReceiveDate(bill.getReceiveDate()); other.setPay(pay); other.setTenantId(tenantId); @@ -1175,11 +1157,18 @@ public class WxBillAllServiceImpl implements WxBillAllService { other.setIsDel(EnumDelStatus.NOT_DEL.getCode()); other.setStarttime(bill.getStarttime()); other.setEndtime(bill.getEndtime()); - Date payDate = other.getPayDate(); - Date receiveDate = other.getReceiveDate(); - if (payDate.after(receiveDate)) { - int expiredDay = DateUtils.daysBetween(receiveDate, payDate); - other.setExpiredDay((long) expiredDay); + if (receivePay <= pay) { + other.setStatus(EnumBillRentStatus.PAID.getCode()); + } else { + Date payDate = other.getPayDate(); + Date receiveDate = other.getReceiveDate(); + if (payDate.before(receiveDate)) { + other.setStatus(EnumBillRentStatus.WAIT_PAY.getCode()); + } else { + other.setStatus(EnumBillRentStatus.NOT_PAID.getCode()); + int expiredDay = DateUtils.daysBetween(receiveDate, payDate); + other.setExpiredDay((long) expiredDay); + } } wxBillOtherMapper.insertSelective(other); addActionImport(other.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); @@ -1193,10 +1182,10 @@ public class WxBillAllServiceImpl implements WxBillAllService { otherDepositQuery.setComments(bill.getBillAttr()); otherDepositQuery.setIsDel(EnumDelStatus.NOT_DEL.getCode()); WxBillOtherDeposit otherDeposit = wxBillOtherDepositMapper.selectOne(otherDepositQuery); - long pay = new BigDecimal(bill.getPayStr()).multiply(new BigDecimal(100)).longValueExact(); if (otherDeposit != null) { if (!otherDeposit.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { - if (otherDeposit.getOwe() <= pay) { + long allPay = new BigDecimal(otherDeposit.getPay()).add(new BigDecimal(pay)).longValueExact(); + if (allPay >= receivePay) { otherDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); Date payDate = bill.getPayDate(); Date receiveDate = bill.getReceiveDate(); @@ -1226,8 +1215,7 @@ public class WxBillAllServiceImpl implements WxBillAllService { otherDeposit.setId(idWorker.nextId()); otherDeposit.setName(bill.getBillAttr()); otherDeposit.setComments(bill.getBillAttr()); - otherDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); - otherDeposit.setReceivePay(pay); + otherDeposit.setReceivePay(receivePay); otherDeposit.setReceiveDate(bill.getReceiveDate()); otherDeposit.setPay(pay); otherDeposit.setTenantId(tenantId); @@ -1243,11 +1231,18 @@ public class WxBillAllServiceImpl implements WxBillAllService { otherDeposit.setIsDel(EnumDelStatus.NOT_DEL.getCode()); otherDeposit.setStarttime(bill.getStarttime()); otherDeposit.setEndtime(bill.getEndtime()); - Date payDate = otherDeposit.getPayDate(); - Date receiveDate = otherDeposit.getReceiveDate(); - if (payDate.after(receiveDate)) { - int expiredDay = DateUtils.daysBetween(receiveDate, payDate); - otherDeposit.setExpiredDay((long) expiredDay); + if (receivePay <= pay) { + otherDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); + } else { + Date payDate = otherDeposit.getPayDate(); + Date receiveDate = otherDeposit.getReceiveDate(); + if (payDate.before(receiveDate)) { + otherDeposit.setStatus(EnumBillRentStatus.WAIT_PAY.getCode()); + } else { + otherDeposit.setStatus(EnumBillRentStatus.NOT_PAID.getCode()); + int expiredDay = DateUtils.daysBetween(receiveDate, payDate); + otherDeposit.setExpiredDay((long) expiredDay); + } } wxBillOtherDepositMapper.insertSelective(otherDeposit); addActionImport(otherDeposit.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); @@ -1261,6 +1256,82 @@ public class WxBillAllServiceImpl implements WxBillAllService { stringRedisTemplate.expire(importKey, 10, TimeUnit.SECONDS); } + @Override + public void importBill(String tenantId, String importKey, WxBillExcelTemplate bill, MallUserInfo user) { + //租金 + Integer billType = bill.getBillType(); + if (billType.equals(EnumBillExcelTemplate.SHOP_RENT.getCode()) || billType.equals(EnumBillExcelTemplate.POINT_RENT.getCode())) { + WxBillRent rentQuery = new WxBillRent(); + rentQuery.setTenantId(tenantId); + rentQuery.setMerchantId(bill.getMerchantId()); + rentQuery.setStarttime(bill.getStarttime()); + rentQuery.setEndtime(bill.getEndtime()); + if (billType.equals(EnumBillExcelTemplate.SHOP_RENT.getCode())) { + rentQuery.setRentShopType(EnumRentShopType.SHOP.getCode()); + } else { + rentQuery.setRentShopType(EnumRentShopType.POINT.getCode()); + } + rentQuery.setIsPreview(EnumIsPreview.NO.getCode()); + WxBillRent rent = wxBillRentMapper.selectBillOne(rentQuery); + if (rent != null && !rent.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { + long pay = new BigDecimal(bill.getPayStr()).multiply(new BigDecimal(100)).longValueExact(); + if (rent.getOwe() <= pay) { + rent.setStatus(EnumBillRentStatus.PAID.getCode()); + Date payDate = bill.getPayDate(); + Date receiveDate = bill.getReceiveDate(); + rent.setExpiredDay(0L); + if (payDate.after(receiveDate)) { + int expiredDay = DateUtils.daysBetween(receiveDate, payDate); + rent.setExpiredDay((long) expiredDay); + } + } + rent.setPay(rent.getPay() + pay); + rent.setOwe(rent.getOwe() - pay); + rent.setPayDate(bill.getPayDate()); + rent.setReceiveDate(bill.getReceiveDate()); + wxBillRentMapper.updateByPrimaryKey(rent); + addActionImport(rent.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); + } + } else if (billType.equals(EnumBillExcelTemplate.SHOP_PROPERTY.getCode()) || billType.equals(EnumBillExcelTemplate.POINT_PROPERTY.getCode())) { + WxBillProperty propertyQuery = new WxBillProperty(); + propertyQuery.setTenantId(tenantId); + propertyQuery.setMerchantId(bill.getMerchantId()); + propertyQuery.setStarttime(bill.getStarttime()); + propertyQuery.setEndtime(bill.getEndtime()); + if (billType.equals(EnumBillExcelTemplate.SHOP_PROPERTY.getCode())) { + propertyQuery.setRentShopType(EnumRentShopType.SHOP.getCode()); + } else { + propertyQuery.setRentShopType(EnumRentShopType.POINT.getCode()); + } + propertyQuery.setIsPreview(EnumIsPreview.NO.getCode()); + WxBillProperty property = wxBillPropertyMapper.selectBillOne(propertyQuery); + if (property != null && !property.getStatus().equals(EnumBillRentStatus.PAID.getCode())) { + long pay = new BigDecimal(bill.getPayStr()).multiply(new BigDecimal(100)).longValueExact(); + if (property.getOwe() <= pay) { + property.setStatus(EnumBillRentStatus.PAID.getCode()); + Date payDate = bill.getPayDate(); + Date receiveDate = bill.getReceiveDate(); + property.setExpiredDay(0L); + if (payDate.after(receiveDate)) { + int expiredDay = DateUtils.daysBetween(receiveDate, payDate); + property.setExpiredDay((long) expiredDay); + } + } + property.setPay(property.getPay() + pay); + property.setOwe(property.getOwe() - pay); + property.setPayDate(bill.getPayDate()); + property.setReceiveDate(bill.getReceiveDate()); + wxBillPropertyMapper.updateByPrimaryKey(property); + addActionImport(property.getId(), bill.getPayWay(), bill.getPayDate(), user, bill.getPayStr()); + } + } else { + logger.error("账单导入失败"); + } + //记数 + stringRedisTemplate.opsForHash().increment(importKey, "processCount", 1); + stringRedisTemplate.expire(importKey, 10, TimeUnit.SECONDS); + } + public void addActionImport(Long billId, String payWay, Date payDate, MallUserInfo user, String pay) { WxBillAction wxBillAction = new WxBillAction(); wxBillAction.setBillId(billId);