diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/mem/ImportTemplateTask.java b/mallinkAdmin/src/main/java/com/iformall/controller/mem/ImportTemplateTask.java new file mode 100644 index 000000000..b8e369a62 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/mem/ImportTemplateTask.java @@ -0,0 +1,228 @@ +package com.iformall.controller.mem; + +import cn.afterturn.easypoi.excel.ExcelImportUtil; +import cn.afterturn.easypoi.excel.entity.ImportParams; +import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; +import cn.afterturn.easypoi.handler.impl.ExcelDataHandlerDefaultImpl; +import cn.afterturn.easypoi.handler.inter.IExcelDataHandler; +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.WxBillExcelTemplateOther; +import com.iformall.mapper.WxMerchantMapper; +import com.iformall.service.WxBillAllService; +import com.iformall.service.WxCUserBasicInfoService; +import com.iformall.service.WxTagsService; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.session.UnknownSessionException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import java.io.File; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * @author gongbiao + */ +@Component +public class ImportTemplateTask { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxCUserBasicInfoService wxCUserBasicInfoService; + + @Autowired + private WxTagsService wxTagsService; + + @Autowired + StringRedisTemplate stringRedisTemplate; + + @Autowired + private WxBillAllService wxBillAllService; + + @Autowired + private WxMerchantMapper wxMerchantMapper; + + + @Async + public void importBillData(File file, MallUserInfo user, String importKey, String tenantId) { + 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, WxBillExcelTemplateOther.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().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); + WxMerchant wxMerchant = wxMerchantMapper.selectOne(wxMerchantQuery); + if (wxMerchant != null) { + merchantMap.put(merchantName, wxMerchant); + } + }); + //3 计失败条数 + List billSuccessList = new ArrayList<>(); + successList.parallelStream().forEach(s -> { + WxMerchant wxMerchant = merchantMap.get(s.getMerchantName()); + 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 (successSize > 0) { + try { + successList.parallelStream().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()); + } + } + } + + private class UserExcelHandler extends ExcelDataHandlerDefaultImpl { + @Override + public Object importHandler(CUserBaseInfoT obj, String name, Object value) { + if (value == null) { + value = ""; + } + System.out.println(name + " + " + value.toString()); + return super.importHandler(obj, name, value); + } + + } + + private void set_redis_value(String importKey, String allCount, String allSuccessCount, String processCount, String failCount, boolean fail) { + stringRedisTemplate.opsForHash().put(importKey, "allCount", allCount); + stringRedisTemplate.opsForHash().put(importKey, "allSuccessCount", allSuccessCount); + stringRedisTemplate.opsForHash().put(importKey, "processCount", processCount); + stringRedisTemplate.opsForHash().put(importKey, "failCount", failCount); + if (fail) { + stringRedisTemplate.expire(importKey, 10, TimeUnit.SECONDS); + } + } + + @Async + public void importMemberData(File file, MallUserInfo user, String importKey, String tenantId) { + 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, CUserBaseInfoT.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(); + + logger.info("验证通过的数量: " + successList.size()); + logger.info("验证未通过的数量: " + failList.size()); + + int total = successList.size() + failList.size(); + int all_success = successList.size(); + int all_fail = failList.size(); + + //添加到redis里 + set_redis_value(importKey, "" + total, "" + all_success, "0", "" + all_fail, total == all_fail); + + if (successList.size() > 0) { + WxTags wxTagsQ = new WxTags(); + List tagList = wxTagsService.findList(wxTagsQ); + + try { + successList.parallelStream().forEach(uBase -> { + try { + wxCUserBasicInfoService.importOneMem(tenantId, importKey, tagList, uBase, 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()); + } + } + } + + +} diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/template/WxImportTemplateController.java b/mallinkAdmin/src/main/java/com/iformall/controller/template/WxImportTemplateController.java new file mode 100644 index 000000000..bccd1ea92 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/template/WxImportTemplateController.java @@ -0,0 +1,182 @@ +package com.iformall.controller.template; + +import com.alibaba.fastjson.JSONArray; +import com.iformall.annotation.SystemControllerLog; +import com.iformall.common.ErrorCode; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.controller.base.BaseController; +import com.iformall.controller.mem.ImportTemplateTask; +import com.iformall.domain.po.MallUserInfo; +import com.iformall.enums.EnumImportType; +import com.iformall.exception.MallinkException; +import com.iformall.utils.Constant; +import io.swagger.annotations.Api; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * @author gongbiao + */ +@RestController +@RequestMapping("wxImportTemplate") +@Api(description = "模板导入") +public class WxImportTemplateController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private String fmUploadDir; + + @Autowired + StringRedisTemplate stringRedisTemplate; + + @Autowired + private ImportTemplateTask importTemplateTask; + + private void set_redis_value(String importKey, String allCount, String allSuccessCount, String processCount, String failCount, boolean fail) { + stringRedisTemplate.opsForHash().put(importKey, "allCount", allCount); + stringRedisTemplate.opsForHash().put(importKey, "allSuccessCount", allSuccessCount); + stringRedisTemplate.opsForHash().put(importKey, "processCount", processCount); + stringRedisTemplate.opsForHash().put(importKey, "failCount", failCount); + if (fail) { + stringRedisTemplate.expire(importKey, 10, TimeUnit.SECONDS); + } + } + + @PostMapping(value = "/importTemplate", consumes = "multipart/*") + @SystemControllerLog(description = "导入数据") + public ResultData importTemplate(@RequestParam("file") MultipartFile mFile, @RequestParam("type") Integer type) { + logger.debug("[" + getIpAddr() + "] WxImportTemplateController::importTemplate"); + if (mFile.isEmpty()) { + throw new MallinkException(Result.ERROR, "上传文件不能为空"); + } + //得到当前用户ID + final MallUserInfo user = getUser(); + String userId = type + "_" + user.getId(); + String importKey = Constant.importMemPrev + userId; + final String tenantId = getTenantId(); + + //查询当前用户得到的值是否为空,为空继续,不为空,返回模板正在导入 + Boolean allCount = stringRedisTemplate.opsForHash().hasKey(importKey, "allCount"); + if (allCount) { + return new ResultData(Result.SUCCESS, "模板正在导入"); + } + + stringRedisTemplate.opsForHash().putIfAbsent(importKey, "allCount", 0 + ""); + stringRedisTemplate.expire(importKey, 30, TimeUnit.MINUTES); + stringRedisTemplate.opsForHash().putIfAbsent(importKey, "allSuccessCount", 0 + ""); + stringRedisTemplate.opsForHash().putIfAbsent(importKey, "processCount", ""); + stringRedisTemplate.opsForHash().putIfAbsent(importKey, "failCount", ""); + + String fpath = fmUploadDir; + File targetFile = new File(fpath); + if (!targetFile.exists()) { + targetFile.mkdirs(); + } + String fileName = type + ".xlsx"; + int dot = mFile.getOriginalFilename().lastIndexOf('.'); + fileName = fileName + mFile.getOriginalFilename().substring(dot, mFile.getOriginalFilename().length()); + + File lFile = new File(fpath + File.separator + fileName); + + FileOutputStream fos = null; + BufferedInputStream fs = null; + try { + fos = new FileOutputStream(lFile); + fs = (BufferedInputStream) mFile.getInputStream(); + byte[] buffer = new byte[1024]; + int len = 0; + while ((len = fs.read(buffer)) != -1) { + fos.write(buffer, 0, len); + } + fos.close(); + fs.close(); + } catch (Exception e) { + stringRedisTemplate.expire(importKey, 3, TimeUnit.SECONDS); + stringRedisTemplate.opsForHash().putIfAbsent(importKey, "allCount", "1"); + stringRedisTemplate.opsForHash().putIfAbsent(importKey, "failCount", "1"); + logger.error(e.getMessage()); + return new ResultData(ErrorCode.MEM_IMPORT_ERR.getCode(), "模板上传失败"); + } finally { + if (fos != null) { + try { + fos.close(); + } catch (IOException e) { + stringRedisTemplate.expire(importKey, 3, TimeUnit.SECONDS); + stringRedisTemplate.opsForHash().putIfAbsent(importKey, "allCount", "1"); + stringRedisTemplate.opsForHash().putIfAbsent(importKey, "failCount", "1"); + logger.error(e.getMessage()); + return new ResultData(ErrorCode.MEM_IMPORT_ERR.getCode(), "模板上传失败"); + } + } + if (fs != null) { + try { + fs.close(); + } catch (IOException e) { + stringRedisTemplate.expire(importKey, 3, TimeUnit.SECONDS); + stringRedisTemplate.opsForHash().putIfAbsent(importKey, "allCount", "1"); + stringRedisTemplate.opsForHash().putIfAbsent(importKey, "failCount", "1"); + logger.error(e.getMessage()); + return new ResultData(ErrorCode.MEM_IMPORT_ERR.getCode(), "模板上传失败"); + } + } + } + if (type.equals(EnumImportType.MEMBER.getCode())) { + importTemplateTask.importMemberData(lFile, user, importKey, tenantId); + } + //暂时不区分账单类型,导入时区分 + importTemplateTask.importBillData(lFile, user, importKey, tenantId); + + return new ResultData(Result.SUCCESS, "模板正在导入"); + } + + + @GetMapping("/queryTemplateCount") + @SystemControllerLog(description = "导入数据查询") + public ResultData queryTemplateCount(@RequestParam("type") MultipartFile type) { + String importKey = Constant.importMemPrev + type + "_" + getUser().getId(); + Map entries = stringRedisTemplate.opsForHash().entries(importKey); + logger.info(JSONArray.toJSONString(entries) + ">>>>>>>>>>>>>>>>>>>>>1"); + if (entries.size() < 4) { + entries.clear(); + return new ResultData(Result.SUCCESS, "ok", entries); + } + String allCount = entries.get("allCount").toString(); + String allSuccessCount = entries.get("allSuccessCount").toString(); + String processCount = entries.get("processCount").toString(); + String failCount = entries.get("failCount").toString(); + + if (StringUtils.isNotBlank(failCount) && allCount.equals(failCount)) {//stringRedisTemplate.expire(userId,1,TimeUnit.SECONDS); + logger.info(JSONArray.toJSONString(entries) + ">>>>>>>>>>>>>>>>>>>>>2"); + //完全失败 + stringRedisTemplate.opsForHash().delete(importKey, "allCount"); + stringRedisTemplate.opsForHash().delete(importKey, "allSuccessCount"); + stringRedisTemplate.opsForHash().delete(importKey, "processCount"); + stringRedisTemplate.opsForHash().delete(importKey, "failCount"); + return new ResultData(ErrorCode.MEM_IMPORT_ERR); + } + //导入完成 + if (StringUtils.isNotBlank(allSuccessCount) && allSuccessCount.equals(processCount)) { + ResultData ok = new ResultData(Result.SUCCESS, "ok", entries); + stringRedisTemplate.opsForHash().delete(importKey, "allCount"); + stringRedisTemplate.opsForHash().delete(importKey, "allSuccessCount"); + stringRedisTemplate.opsForHash().delete(importKey, "processCount"); + stringRedisTemplate.opsForHash().delete(importKey, "failCount"); + return ok; + } + return new ResultData(Result.SUCCESS, "查询成功", entries); + } + +} \ No newline at end of file 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 475ef7ed0..b86933a0d 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxBillExcelTemplate.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxBillExcelTemplate.java @@ -35,4 +35,6 @@ public class WxBillExcelTemplate { @Excel(name = "收款方式", width = 20, orderNum = "9") private String payWay; + private Long merchantId; + private Integer merchantType; } diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumImportType.java b/mallinkService/src/main/java/com/iformall/enums/EnumImportType.java new file mode 100644 index 000000000..bf57cc319 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumImportType.java @@ -0,0 +1,43 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ + +public enum EnumImportType { + + MEMBER(1, "会员"), + SHOP_RENT(2, "商铺租金"), + POINT_RENT(3, "多经点位租金"), + SHOP_PROPERTY(4, "商铺物业费"), + POINT_PROPERTY(5, "多经点位物业费"), + DAILY(6, "日常费用"), + OTHER(7, "其他费用"), + OTHER_DEPOSIT(8, "其他押金"),; + + public static EnumImportType getEnum(Integer code) { + for (EnumImportType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumImportType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java b/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java index 0c0f8489c..cb04b8139 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java @@ -4,6 +4,7 @@ import com.iformall.common.ResultData; import com.iformall.domain.po.MallUserInfo; import com.iformall.domain.vo.WxBillAll; import com.iformall.domain.vo.WxBillExcelTemplate; +import com.iformall.domain.vo.WxBillExcelTemplateOther; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -60,4 +61,6 @@ public interface WxBillAllService { void exportTemplate(WxBillExcelTemplate wxBillExcelTemplate, HttpServletRequest request, HttpServletResponse response); + void importBill(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/WxBillActionServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillActionServiceImpl.java index 5e1b4e443..2994d27c3 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillActionServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillActionServiceImpl.java @@ -5,7 +5,6 @@ import com.github.pagehelper.PageInfo; import com.iformall.common.IdWorker; import com.iformall.domain.po.MallUserInfo; import com.iformall.domain.po.WxBillAction; -import com.iformall.enums.EnumBillAction; import com.iformall.mapper.WxBillActionMapper; import com.iformall.service.WxBillActionService; import org.slf4j.Logger; @@ -13,7 +12,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.math.BigDecimal; import java.util.Date; /** @@ -49,10 +47,8 @@ public class WxBillActionServiceImpl implements WxBillActionService { WxBillAction wxBillAction = new WxBillAction(); wxBillAction.setId(idWorker.nextId()); wxBillAction.setBillId(action.getBillId()); - String oldPrice = new BigDecimal(action.getOldPrice()).divide(new BigDecimal(100)).toPlainString(); - String newPrice = new BigDecimal(action.getNewPrice()).divide(new BigDecimal(100)).toPlainString(); - wxBillAction.setDetails(oldPrice + "元变更成" + newPrice + "元"); - wxBillAction.setAction(EnumBillAction.UPDATE_BILL.getCode()); + wxBillAction.setDetails(action.getDetails()); + wxBillAction.setAction(action.getAction()); wxBillAction.setUserId(user.getId()); wxBillAction.setUserName(user.getName()); wxBillAction.setPhone(user.getPhone()); 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 e7dc17c68..a7231ca8a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; import com.iformall.common.ResultData; import com.iformall.domain.po.*; import com.iformall.domain.po.msg.MailMsg; @@ -107,6 +108,9 @@ public class WxBillAllServiceImpl implements WxBillAllService { @Autowired private WxPayAccountBillMapper wxPayAccountBillMapper; + @Autowired + WxMerchantShopMapper wxMerchantShopMapper; + @Override public Map listAsPage(WxBillAll record, Integer pageIndex, Integer pageSize) { //更新各账单状态 @@ -867,8 +871,10 @@ public class WxBillAllServiceImpl implements WxBillAllService { public void addBillAction(Long billId, Long oldPrice, Long newPrice, MallUserInfo mallUserInfo) { WxBillAction wxBillAction = new WxBillAction(); wxBillAction.setBillId(billId); - wxBillAction.setOldPrice(oldPrice); - wxBillAction.setNewPrice(newPrice); + String oldPriceStr = new BigDecimal(oldPrice).divide(new BigDecimal(100)).toPlainString(); + String newPriceStr = new BigDecimal(newPrice).divide(new BigDecimal(100)).toPlainString(); + wxBillAction.setDetails(oldPriceStr + "元变更成" + newPriceStr + "元"); + wxBillAction.setAction(EnumBillAction.UPDATE_BILL.getCode()); wxBillActionService.modifyBill(wxBillAction, mallUserInfo); } @@ -940,6 +946,226 @@ public class WxBillAllServiceImpl implements WxBillAllService { } + @Override + public void importBill(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.selectOne(rentQuery); + if (rent != null) { + long pay = new BigDecimal(bill.getPayStr()).multiply(new BigDecimal(100)).longValueExact(); + if (rent.getOwe() <= pay) { + rent.setStatus(EnumBillRentStatus.PAID.getCode()); + } + 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(), user); + } + } 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.selectOne(propertyQuery); + if (property != null) { + long pay = new BigDecimal(bill.getPayStr()).multiply(new BigDecimal(100)).longValueExact(); + if (property.getOwe() <= pay) { + property.setStatus(EnumBillRentStatus.PAID.getCode()); + } + 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(), user); + } + } else if (billType.equals(EnumBillExcelTemplate.DAILY.getCode())) { + WxBillDaily dailyQuery = new WxBillDaily(); + String billAttrStr = StringUtils.trim(bill.getBillAttr()); + if (billAttrStr.equals(EnumBillExcelTemplateDaily.WATER.getMessage())) { + dailyQuery.setType(EnumBillDailyType.WATER.getCode()); + } + if (billAttrStr.equals(EnumBillExcelTemplateDaily.POWER.getMessage())) { + dailyQuery.setType(EnumBillDailyType.POWER.getCode()); + } + if (billAttrStr.equals(EnumBillExcelTemplateDaily.AIR_CONDITIONING.getMessage())) { + dailyQuery.setType(EnumBillDailyType.AIR_CONDITIONING.getCode()); + } + dailyQuery.setTenantId(tenantId); + dailyQuery.setMerchantId(bill.getMerchantId()); + 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.getOwe() <= pay) { + daily.setStatus(EnumBillRentStatus.PAID.getCode()); + } + daily.setPay(daily.getPay() + pay); + daily.setOwe(daily.getOwe() - pay); + daily.setPayDate(bill.getPayDate()); + daily.setReceiveDate(bill.getReceiveDate()); + wxBillDailyMapper.updateByPrimaryKey(daily); + } else { + WxMerchantShop wxMerchantShop = new WxMerchantShop(); + wxMerchantShop.setTenantId(tenantId); + wxMerchantShop.setMerchantId(bill.getMerchantId()); + wxMerchantShop.setIsDel(EnumDelStatus.NOT_DEL.getCode()); + List select = wxMerchantShopMapper.select(wxMerchantShop); + if (!select.isEmpty()) { + daily = new WxBillDaily(); + final IdWorker idWorker = IdWorker.get(); + daily.setId(idWorker.nextId()); + daily.setStatus(EnumBillRentStatus.PAID.getCode()); + daily.setReceivePay(pay); + daily.setReceiveDate(bill.getReceiveDate()); + daily.setPay(pay); + daily.setType(dailyQuery.getType()); + daily.setTenantId(tenantId); + daily.setMerchantId(bill.getMerchantId()); + daily.setShopId(select.get(0).getShopId()); + daily.setRentShopType(bill.getMerchantType()); + daily.setPayDate(bill.getPayDate()); + Date date = new Date(); + daily.setCreatetime(date); + daily.setUpdatetime(date); + daily.setExpiredDay(0L); + daily.setOwe(0L); + daily.setIsDel(EnumDelStatus.NOT_DEL.getCode()); + wxBillDailyMapper.insertSelective(daily); + } + } + addActionImport(daily.getId(), bill.getPayWay(), user); + } else if (billType.equals(EnumBillExcelTemplate.OTHER.getCode())) { + WxBillOther otherQuery = new WxBillOther(); + otherQuery.setTenantId(tenantId); + otherQuery.setMerchantId(bill.getMerchantId()); + otherQuery.setReceiveDate(bill.getReceiveDate()); + 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.getOwe() <= pay) { + other.setStatus(EnumBillRentStatus.PAID.getCode()); + } + other.setName(bill.getBillAttr()); + other.setComments(bill.getBillAttr()); + other.setPay(other.getPay() + pay); + other.setOwe(other.getOwe() - pay); + other.setPayDate(bill.getPayDate()); + other.setReceiveDate(bill.getReceiveDate()); + wxBillOtherMapper.updateByPrimaryKey(other); + } else { + WxMerchantShop wxMerchantShop = new WxMerchantShop(); + wxMerchantShop.setTenantId(tenantId); + wxMerchantShop.setMerchantId(bill.getMerchantId()); + wxMerchantShop.setIsDel(EnumDelStatus.NOT_DEL.getCode()); + List select = wxMerchantShopMapper.select(wxMerchantShop); + if (!select.isEmpty()) { + other = new WxBillOther(); + final IdWorker idWorker = IdWorker.get(); + other.setId(idWorker.nextId()); + other.setStatus(EnumBillRentStatus.PAID.getCode()); + other.setReceivePay(pay); + other.setReceiveDate(bill.getReceiveDate()); + other.setPay(pay); + other.setTenantId(tenantId); + other.setMerchantId(bill.getMerchantId()); + other.setShopId(select.get(0).getShopId()); + other.setRentShopType(bill.getMerchantType()); + other.setPayDate(bill.getPayDate()); + Date date = new Date(); + other.setCreatetime(date); + other.setUpdatetime(date); + other.setExpiredDay(0L); + other.setOwe(0L); + other.setIsDel(EnumDelStatus.NOT_DEL.getCode()); + wxBillOtherMapper.insertSelective(other); + } + } + addActionImport(other.getId(), bill.getPayWay(), user); + } else if (billType.equals(EnumBillExcelTemplate.OTHER_DEPOSIT.getCode())) { + WxBillOtherDeposit otherDepositQuery = new WxBillOtherDeposit(); + otherDepositQuery.setTenantId(tenantId); + otherDepositQuery.setMerchantId(bill.getMerchantId()); + otherDepositQuery.setReceiveDate(bill.getReceiveDate()); + 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.getOwe() <= pay) { + otherDeposit.setStatus(EnumBillRentStatus.PAID.getCode()); + } + otherDeposit.setPay(otherDeposit.getPay() + pay); + otherDeposit.setOwe(otherDeposit.getOwe() - pay); + otherDeposit.setPayDate(bill.getPayDate()); + otherDeposit.setReceiveDate(bill.getReceiveDate()); + wxBillOtherDepositMapper.updateByPrimaryKey(otherDeposit); + } else { + WxMerchantShop wxMerchantShop = new WxMerchantShop(); + wxMerchantShop.setTenantId(tenantId); + wxMerchantShop.setMerchantId(bill.getMerchantId()); + wxMerchantShop.setIsDel(EnumDelStatus.NOT_DEL.getCode()); + List select = wxMerchantShopMapper.select(wxMerchantShop); + if (!select.isEmpty()) { + otherDepositQuery = new WxBillOtherDeposit(); + final IdWorker idWorker = IdWorker.get(); + otherDepositQuery.setId(idWorker.nextId()); + otherDepositQuery.setStatus(EnumBillRentStatus.PAID.getCode()); + otherDepositQuery.setReceivePay(pay); + otherDepositQuery.setReceiveDate(bill.getReceiveDate()); + otherDepositQuery.setPay(pay); + otherDepositQuery.setTenantId(tenantId); + otherDepositQuery.setMerchantId(bill.getMerchantId()); + otherDepositQuery.setShopId(select.get(0).getShopId()); + otherDepositQuery.setRentShopType(bill.getMerchantType()); + otherDepositQuery.setPayDate(bill.getPayDate()); + Date date = new Date(); + otherDepositQuery.setCreatetime(date); + otherDepositQuery.setUpdatetime(date); + otherDepositQuery.setExpiredDay(0L); + otherDepositQuery.setOwe(0L); + otherDepositQuery.setIsDel(EnumDelStatus.NOT_DEL.getCode()); + wxBillOtherDepositMapper.insertSelective(otherDepositQuery); + } + } + addActionImport(otherDeposit.getId(), bill.getPayWay(), user); + } else { + logger.error("账单导入失败"); + } + + } + + public void addActionImport(Long billId, String payWay, MallUserInfo user) { + WxBillAction wxBillAction = new WxBillAction(); + wxBillAction.setBillId(billId); + String details = StringUtils.isEmpty(payWay) ? "其他缴费" : payWay + "缴费"; + wxBillAction.setDetails(details); + wxBillAction.setAction(EnumBillAction.IMPORT_PAY.getCode()); + wxBillActionService.modifyBill(wxBillAction, user); + } + public void updateDailyBill(Long businessId, Long newPrice, Date updateDate) { WxBillDaily dbBill = wxBillDailyMapper.selectByPrimaryKey(businessId); WxBillDaily wxBillDaily = new WxBillDaily();