|
@@ -1320,6 +1320,422 @@ public class BizArchiveInputServiceImpl extends ServiceImpl<BizArchiveInputMappe
|
|
|
return successMsg.toString();
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public String importLoopNew(@Validated List<OrderExcelImportLoopNewModel> orderList, Long userId, long tenantId) {
|
|
|
+ if (StringUtils.isNull(orderList) || orderList.size() == 0) {
|
|
|
+ throw new ServiceException("导入数据不能为空!");
|
|
|
+ }
|
|
|
+ List<String> contractNo = orderList.stream().map(m -> m.getContractNo()).collect(Collectors.toList());
|
|
|
+ //合同号不能重复
|
|
|
+ Map<String, Long> nameCountMap = contractNo.stream()
|
|
|
+ .collect(Collectors.groupingBy(name -> name, Collectors.counting()));
|
|
|
+ List<BizArchiveInput> archiveInputs = new ArrayList<>();
|
|
|
+ List<BizWorkOrder> bizWorkOrders = new ArrayList<>();
|
|
|
+ List<BizWorkOrderDetail> bizWorkOrderDetails = new ArrayList<>();
|
|
|
+ List<BizArchiveInputDetail> archiveInputDetails = new ArrayList<>();
|
|
|
+ List<BizCompany> companies = companyService.query().eq("tenant_id", tenantId).list();
|
|
|
+ BizSource sourceCondition = new BizSource();
|
|
|
+ sourceCondition.setTenantId(tenantId);
|
|
|
+ List<BizSource> sources = bizSourceService.getList(sourceCondition);
|
|
|
+ int successNum = 0;
|
|
|
+ int failureNum = 0;
|
|
|
+ StringBuilder successMsg = new StringBuilder();
|
|
|
+ StringBuilder failureMsg = new StringBuilder();
|
|
|
+ List<String> contNOs = this.query().eq("service_type", 1).eq("tenant_id", tenantId).list().stream().map(m -> m.getContractNo()).collect(Collectors.toList());
|
|
|
+ for (OrderExcelImportLoopNewModel item : orderList) {
|
|
|
+ BizArchiveInput archiveInput = new BizArchiveInput();
|
|
|
+ List<BizArchiveInputDetail> myArchiveInputDetails = new ArrayList<>();
|
|
|
+ BizCompany company = companies.stream().filter(v -> v.getName().equals(item.getCompanyName())).findFirst().orElse(null);
|
|
|
+ if (company == null) {
|
|
|
+ failureNum++;
|
|
|
+ failureMsg.append("<br/>").append(failureNum).append("、客户 ").append(item.getCompanyName()).append(" 不存在");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ archiveInput.setCompanyId(company.getId());
|
|
|
+ archiveInput.setArchiveCode(String.valueOf(snowflakeIdWorker.nextId()));
|
|
|
+ archiveInput.setAmount(item.getAmount());
|
|
|
+ archiveInput.setTrueAmount(item.getAmount());
|
|
|
+ archiveInput.setFormDate(new Date());
|
|
|
+ archiveInput.setContractNo(item.getContractNo());
|
|
|
+ SysUser user = userService.selectUserByNickName(item.getSignerName(), tenantId);
|
|
|
+
|
|
|
+ // 判断下订单总价单价是否和录入相符
|
|
|
+ // 假设 amount - discountAmount != trueAmount 跳过该订单
|
|
|
+
|
|
|
+ // 假设子表金额不等于订单总金额
|
|
|
+ BigDecimal keepAccount = item.getKeepAccountAmount() == null ? BigDecimal.ZERO : item.getKeepAccountAmount();
|
|
|
+ BigDecimal security = item.getSocialSecurityAmount() == null ? BigDecimal.ZERO : item.getSocialSecurityAmount();
|
|
|
+ BigDecimal housingFund = item.getHousingFundAmount() == null ? BigDecimal.ZERO : item.getHousingFundAmount();
|
|
|
+ BigDecimal returnTax = item.getReturnTaxAmount() == null ? BigDecimal.ZERO : item.getReturnTaxAmount();
|
|
|
+ BigDecimal keepAccountPrice = item.getKeepAccountPrice() == null ? BigDecimal.ZERO : item.getKeepAccountPrice();
|
|
|
+// BigDecimal securityPrice = item.getSocialSecurityPrice() == null ? BigDecimal.ZERO : item.getSocialSecurityPrice();
|
|
|
+// BigDecimal housingFundPrice = item.getHousingFundPrice() == null ? BigDecimal.ZERO : item.getHousingFundPrice();
|
|
|
+ BigDecimal returnTaxPrice = item.getReturnTaxPrice() == null ? BigDecimal.ZERO : item.getReturnTaxPrice();
|
|
|
+ BigDecimal keepAccountMonth = item.getKeepAccountMonth() == null ? BigDecimal.ZERO : BigDecimal.valueOf(item.getKeepAccountMonth());
|
|
|
+ BigDecimal securityMonth = item.getSocialSecurityMonth() == null ? BigDecimal.ZERO : BigDecimal.valueOf(item.getSocialSecurityMonth());
|
|
|
+ BigDecimal housingFundMonth = item.getHousingFundMonth() == null ? BigDecimal.ZERO : BigDecimal.valueOf(item.getHousingFundMonth());
|
|
|
+ BigDecimal returnTaxMonth = item.getReturnTaxMonth() == null ? BigDecimal.ZERO : BigDecimal.valueOf(item.getReturnTaxMonth());
|
|
|
+ if("是".equals(item.getKeepAccount())) {
|
|
|
+ if (item.getKeepAccountStartMonth() != null && item.getKeepAccountEndMonth() != null){
|
|
|
+ Calendar startCalendar = Calendar.getInstance();
|
|
|
+ startCalendar.setTime(item.getKeepAccountStartMonth());
|
|
|
+ Calendar endCalendar = Calendar.getInstance();
|
|
|
+ endCalendar.setTime(item.getKeepAccountEndMonth());
|
|
|
+ // 计算年份和月份的差异
|
|
|
+ int yearDiff = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR);
|
|
|
+ int monthDiff = endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH);
|
|
|
+ // 总的月份差异
|
|
|
+ int totalMonthsBetween = yearDiff * 12 + monthDiff+1;
|
|
|
+ BigDecimal keeFreeMonth = item.getKeepAccountFreeMonth() == null ? BigDecimal.ZERO : BigDecimal.valueOf(item.getKeepAccountFreeMonth());
|
|
|
+ if (totalMonthsBetween != keepAccountMonth.add(keeFreeMonth).intValue()){
|
|
|
+ failureNum++;
|
|
|
+ failureMsg.append("<br/>").append(failureNum).append(company.getName()+"的代理记账服务的服务月数+赠送月数跟结束月-开始月的时间不等,请检查数据");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if("是".equals(item.getSocialSecurity())) {
|
|
|
+ if(item.getSocialSecurityStartMonth() != null && item.getSocialSecurityEndMonth()!= null){
|
|
|
+ Calendar startCalendar2 = Calendar.getInstance();
|
|
|
+ startCalendar2.setTime(item.getSocialSecurityStartMonth());
|
|
|
+ Calendar endCalendar2 = Calendar.getInstance();
|
|
|
+ endCalendar2.setTime(item.getSocialSecurityEndMonth());
|
|
|
+ // 计算年份和月份的差异
|
|
|
+ int yearDiff2 = endCalendar2.get(Calendar.YEAR) - startCalendar2.get(Calendar.YEAR);
|
|
|
+ int monthDiff2 = endCalendar2.get(Calendar.MONTH) - startCalendar2.get(Calendar.MONTH);
|
|
|
+ // 总的月份差异
|
|
|
+ int totalMonthsBetween2 = yearDiff2 * 12 + monthDiff2+1;
|
|
|
+ BigDecimal socialSecurityMonth = item.getSocialSecurityFreeMonth() == null ? BigDecimal.ZERO : BigDecimal.valueOf(item.getSocialSecurityFreeMonth());
|
|
|
+ if (totalMonthsBetween2 != securityMonth.add(socialSecurityMonth).intValue()){
|
|
|
+ failureNum++;
|
|
|
+
|
|
|
+ failureMsg.append("<br/>").append(failureNum).append(company.getName()+"的社保代缴服务的服务月数+赠送月数跟结束月-开始月的时间不等,请检查数据");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if("是".equals(item.getHousingFund())) {
|
|
|
+ if(item.getHousingFundStartMonth() != null && item.getHousingFundEndMonth()!= null){
|
|
|
+ Calendar startCalendar3 = Calendar.getInstance();
|
|
|
+ startCalendar3.setTime(item.getHousingFundStartMonth());
|
|
|
+ Calendar endCalendar3 = Calendar.getInstance();
|
|
|
+ endCalendar3.setTime(item.getHousingFundEndMonth());
|
|
|
+ // 计算年份和月份的差异
|
|
|
+ int yearDiff3= endCalendar3.get(Calendar.YEAR) - startCalendar3.get(Calendar.YEAR);
|
|
|
+ int monthDiff3 = endCalendar3.get(Calendar.MONTH) - startCalendar3.get(Calendar.MONTH);
|
|
|
+ // 总的月份差异
|
|
|
+ int totalMonthsBetween3 = yearDiff3 * 12 + monthDiff3+1;
|
|
|
+ BigDecimal housingFundMonths = item.getHousingFundFreeMonth() == null ? BigDecimal.ZERO : BigDecimal.valueOf(item.getHousingFundFreeMonth());
|
|
|
+ if (totalMonthsBetween3!= housingFundMonth.add(housingFundMonths).intValue()){
|
|
|
+ failureNum++;
|
|
|
+ failureMsg.append("<br/>").append(failureNum).append(company.getName()+"的公积金服务的服务月数+赠送月数跟结束月-开始月的时间不等,请检查数据");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+// if(item.getReturnTaxStartMonth() != null && item.getReturnTaxEndMonth()!= null){
|
|
|
+// Calendar startCalendar4 = Calendar.getInstance();
|
|
|
+// startCalendar4.setTime(item.getReturnTaxStartMonth());
|
|
|
+// Calendar endCalendar4 = Calendar.getInstance();
|
|
|
+// endCalendar4.setTime(item.getReturnTaxEndMonth());
|
|
|
+// // 计算年份和月份的差异
|
|
|
+// int yearDiff4= endCalendar4.get(Calendar.YEAR) - startCalendar4.get(Calendar.YEAR);
|
|
|
+// int monthDiff4 = endCalendar4.get(Calendar.MONTH) - startCalendar4.get(Calendar.MONTH);
|
|
|
+// // 总的月份差异
|
|
|
+// int totalMonthsBetween4 = yearDiff4 * 12 + monthDiff4+1;
|
|
|
+// BigDecimal returnTaxFreeMonth = item.getReturnTaxFreeMonth() == null ? BigDecimal.ZERO : BigDecimal.valueOf(item.getReturnTaxFreeMonth());
|
|
|
+// if (totalMonthsBetween4!= returnTaxMonth.add(returnTaxFreeMonth).intValue()){
|
|
|
+// failureNum++;
|
|
|
+// failureMsg.append("<br/>").append(failureNum).append(company.getName()+"的返税申报服务的服务月数+赠送月数跟结束月-开始月的时间不等,请检查数据");
|
|
|
+// continue;
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if (nameCountMap.get(item.getContractNo()) > 1L) {
|
|
|
+ failureNum++;
|
|
|
+ failureMsg.append("<br/>").append(failureNum).append("导入的合同编号 ").append(item.getContractNo()).append("不能重复");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (contNOs.contains(item.getContractNo())) {
|
|
|
+ failureNum++;
|
|
|
+ failureMsg.append("<br/>").append(failureNum).append("合同编号 ").append(item.getContractNo()).append("已存在不能重复导入");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ archiveInput.setSignerId(user != null ? user.getUserId() : null);
|
|
|
+ archiveInput.setContractType("新签".equals(item.getContractType()) ? 0 : "续签".equals(item.getContractType()) ? 1 : 3);
|
|
|
+ archiveInput.setServiceType(1);
|
|
|
+ archiveInput.setTenantId(tenantId);
|
|
|
+ archiveInput.setId(snowflakeIdWorker.nextId());
|
|
|
+ archiveInput.setStatus(1);
|
|
|
+ archiveInput.setVerifyStatus(1);
|
|
|
+ archiveInput.setRemark(item.getRemark());
|
|
|
+ String sourceName = item.getSourceName();
|
|
|
+ String sourceCategory = item.getSourceCategoryName();
|
|
|
+ BizSource source = sources.stream().filter(v -> v.getTitle().equals(sourceCategory)).findFirst().orElse(null);
|
|
|
+ if (source != null) {
|
|
|
+ archiveInput.setSourceCategoryId(source.getId());
|
|
|
+ switch (source.getReferrerDataSource()) {
|
|
|
+ case "company":
|
|
|
+ QueryWrapper<BizCompany> companyWrapper = new QueryWrapper<>();
|
|
|
+ companyWrapper.eq("name", sourceName);
|
|
|
+ BizCompany sourceCompany = companyService.getOne(companyWrapper);
|
|
|
+ archiveInput.setSourceId(sourceCompany.getId());
|
|
|
+ break;
|
|
|
+ case "employee":
|
|
|
+ SysUser sourceUser = userService.selectUserByUserName(sourceName);
|
|
|
+ archiveInput.setSourceId(sourceUser != null ? sourceUser.getId() : null);
|
|
|
+ break;
|
|
|
+ case "channel":
|
|
|
+ QueryWrapper<BizChannel> channelWrapper = new QueryWrapper<>();
|
|
|
+ channelWrapper.eq("name", sourceName);
|
|
|
+ BizChannel sourceChannel = channelService.getOne(channelWrapper);
|
|
|
+ archiveInput.setSourceId(sourceChannel.getId());
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ("是".equals(item.getKeepAccount())) {
|
|
|
+ BizArchiveInputDetail detail = new BizArchiveInputDetail();
|
|
|
+ detail.setTaskTypeId(1L);
|
|
|
+ detail.setAmount(item.getKeepAccountAmount());
|
|
|
+ // 计算单价
|
|
|
+ BigDecimal price = getPrice(item.getKeepAccountAmount(), item.getKeepAccountMonth());
|
|
|
+ detail.setDiscountAmount(price.multiply(new BigDecimal(item.getKeepAccountMonth())).subtract(item.getKeepAccountAmount()));
|
|
|
+ detail.setPrice(price);
|
|
|
+ detail.setServiceNum(item.getKeepAccountMonth());
|
|
|
+ detail.setFreeNum(item.getKeepAccountFreeMonth());
|
|
|
+ detail.setContractId(archiveInput.getId());
|
|
|
+ detail.setCompanyId(archiveInput.getCompanyId());
|
|
|
+ detail.setId(snowflakeIdWorker.nextId());
|
|
|
+ detail.setTenantId(tenantId);
|
|
|
+ archiveInputDetails.add(detail);
|
|
|
+ myArchiveInputDetails.add(detail);
|
|
|
+ BizWorkOrder workOrder = bizWorkOrders.stream().filter(v -> v.getCompanyId().equals(detail.getCompanyId()) && v.getTaskTypeId().equals(1L)).findFirst().orElse(null);
|
|
|
+ if (workOrder == null) {
|
|
|
+ workOrder = new BizWorkOrder();
|
|
|
+ workOrder.setCompanyId(archiveInput.getCompanyId());
|
|
|
+ workOrder.setType(1);
|
|
|
+ workOrder.setTaskTypeId(1L);
|
|
|
+ workOrder.setId(snowflakeIdWorker.nextId());
|
|
|
+ workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
|
|
|
+ workOrder.setContractDetailId(detail.getId());
|
|
|
+ workOrder.setCompanyId(archiveInput.getCompanyId());
|
|
|
+ workOrder.setContractId(archiveInput.getId());
|
|
|
+ workOrder.setStartMonth(item.getKeepAccountStartMonth());
|
|
|
+ workOrder.setEndMonth(item.getKeepAccountEndMonth());
|
|
|
+ workOrder.setTenantId(tenantId);
|
|
|
+ int monthNum = (item.getKeepAccountMonth() == null ? 0 : item.getKeepAccountMonth()) + (item.getKeepAccountFreeMonth() == null ? 0 : item.getKeepAccountFreeMonth());
|
|
|
+ workOrder.setMonthNum(monthNum);
|
|
|
+ bizWorkOrders.add(workOrder);
|
|
|
+ } else {
|
|
|
+ int monthNum = (item.getKeepAccountMonth() == null ? 0 : item.getKeepAccountMonth()) + (item.getKeepAccountFreeMonth() == null ? 0 : item.getKeepAccountFreeMonth());
|
|
|
+ workOrder.setMonthNum(workOrder.getMonthNum() + monthNum);
|
|
|
+ workOrder.setEndMonth(workOrder.getEndMonth().compareTo(item.getKeepAccountEndMonth()) > 0 ? workOrder.getEndMonth() : item.getKeepAccountEndMonth());
|
|
|
+ workOrder.setStartMonth(workOrder.getStartMonth().compareTo(item.getKeepAccountStartMonth()) > 0 ? item.getKeepAccountStartMonth() : workOrder.getStartMonth());
|
|
|
+ }
|
|
|
+ BizWorkOrderDetail workOrderDetail = new BizWorkOrderDetail();
|
|
|
+ workOrderDetail.setCompanyId(archiveInput.getCompanyId());
|
|
|
+ workOrderDetail.setContractDetailId(detail.getId());
|
|
|
+ workOrderDetail.setContractId(archiveInput.getId());
|
|
|
+ workOrderDetail.setTaskTypeId(detail.getTaskTypeId());
|
|
|
+ workOrderDetail.setWorkOrderId(workOrder.getId());
|
|
|
+ workOrderDetail.setFreeNum(detail.getFreeNum());
|
|
|
+ workOrderDetail.setServiceNum(detail.getServiceNum());
|
|
|
+ workOrderDetail.setTenantId(tenantId);
|
|
|
+ bizWorkOrderDetails.add(workOrderDetail);
|
|
|
+ }
|
|
|
+ if ("是".equals(item.getSocialSecurity())) {
|
|
|
+ BizArchiveInputDetail detail = new BizArchiveInputDetail();
|
|
|
+ detail.setTaskTypeId(2L);
|
|
|
+ detail.setAmount(item.getSocialSecurityAmount());
|
|
|
+ // 计算单价
|
|
|
+ BigDecimal price = getPrice(item.getSocialSecurityAmount(), item.getSocialSecurityMonth());
|
|
|
+ detail.setDiscountAmount(price.multiply(new BigDecimal(item.getSocialSecurityMonth())).subtract(item.getSocialSecurityAmount()));
|
|
|
+ detail.setPrice(price);
|
|
|
+// detail.setDiscountAmount(item.getSocialSecurityFreeAmount());
|
|
|
+// detail.setPrice(item.getSocialSecurityPrice());
|
|
|
+ detail.setServiceNum(item.getSocialSecurityMonth());
|
|
|
+ detail.setFreeNum(item.getSocialSecurityFreeMonth());
|
|
|
+ detail.setContractId(archiveInput.getId());
|
|
|
+ detail.setCompanyId(archiveInput.getCompanyId());
|
|
|
+ detail.setId(snowflakeIdWorker.nextId());
|
|
|
+ detail.setTenantId(tenantId);
|
|
|
+ archiveInputDetails.add(detail);
|
|
|
+ myArchiveInputDetails.add(detail);
|
|
|
+ BizWorkOrder workOrder = bizWorkOrders.stream().filter(v -> v.getCompanyId().equals(detail.getCompanyId()) && v.getTaskTypeId().equals(2L)).findFirst().orElse(null);
|
|
|
+ if (workOrder == null) {
|
|
|
+ workOrder = new BizWorkOrder();
|
|
|
+ workOrder.setCompanyId(archiveInput.getCompanyId());
|
|
|
+ workOrder.setType(1);
|
|
|
+ workOrder.setTaskTypeId(2L);
|
|
|
+ workOrder.setId(snowflakeIdWorker.nextId());
|
|
|
+ workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
|
|
|
+ workOrder.setContractDetailId(detail.getId());
|
|
|
+ workOrder.setCompanyId(archiveInput.getCompanyId());
|
|
|
+ workOrder.setContractId(archiveInput.getId());
|
|
|
+ workOrder.setStartMonth(item.getSocialSecurityStartMonth());
|
|
|
+ workOrder.setEndMonth(item.getSocialSecurityEndMonth());
|
|
|
+ workOrder.setTenantId(tenantId);
|
|
|
+ int monthNum = (item.getSocialSecurityMonth() == null ? 0 : item.getSocialSecurityMonth()) + (item.getSocialSecurityFreeMonth() == null ? 0 : item.getSocialSecurityFreeMonth());
|
|
|
+ workOrder.setMonthNum(monthNum);
|
|
|
+ bizWorkOrders.add(workOrder);
|
|
|
+ } else {
|
|
|
+ int monthNum = (item.getSocialSecurityMonth() == null ? 0 : item.getSocialSecurityMonth()) + (item.getSocialSecurityFreeMonth() == null ? 0 : item.getSocialSecurityFreeMonth());
|
|
|
+ workOrder.setMonthNum(workOrder.getMonthNum() + monthNum);
|
|
|
+ workOrder.setEndMonth(workOrder.getEndMonth().compareTo(item.getSocialSecurityEndMonth()) > 0 ? workOrder.getEndMonth() : item.getSocialSecurityEndMonth());
|
|
|
+ workOrder.setStartMonth(workOrder.getStartMonth().compareTo(item.getSocialSecurityStartMonth()) > 0 ? item.getSocialSecurityStartMonth() : workOrder.getStartMonth());
|
|
|
+ }
|
|
|
+ BizWorkOrderDetail workOrderDetail = new BizWorkOrderDetail();
|
|
|
+ workOrderDetail.setCompanyId(archiveInput.getCompanyId());
|
|
|
+ workOrderDetail.setContractDetailId(detail.getId());
|
|
|
+ workOrderDetail.setContractId(archiveInput.getId());
|
|
|
+ workOrderDetail.setTaskTypeId(detail.getTaskTypeId());
|
|
|
+ workOrderDetail.setWorkOrderId(workOrder.getId());
|
|
|
+ workOrderDetail.setFreeNum(detail.getFreeNum());
|
|
|
+ workOrderDetail.setServiceNum(detail.getServiceNum());
|
|
|
+ workOrderDetail.setTenantId(tenantId);
|
|
|
+ bizWorkOrderDetails.add(workOrderDetail);
|
|
|
+ }
|
|
|
+ if ("是".equals(item.getHousingFund())) {
|
|
|
+ BizArchiveInputDetail detail = new BizArchiveInputDetail();
|
|
|
+ detail.setTaskTypeId(3L);
|
|
|
+ detail.setAmount(item.getHousingFundAmount());
|
|
|
+ // 计算单价
|
|
|
+ BigDecimal price = getPrice(item.getHousingFundAmount(), item.getHousingFundMonth());
|
|
|
+ detail.setDiscountAmount(price.multiply(new BigDecimal(item.getHousingFundMonth())).subtract(item.getHousingFundAmount()));
|
|
|
+ detail.setPrice(price);
|
|
|
+// detail.setPrice(item.getHousingFundPrice());
|
|
|
+// detail.setDiscountAmount(item.getHousingFundFreeAmount());
|
|
|
+ detail.setServiceNum(item.getHousingFundMonth());
|
|
|
+ detail.setFreeNum(item.getHousingFundFreeMonth());
|
|
|
+ detail.setContractId(archiveInput.getId());
|
|
|
+ detail.setCompanyId(archiveInput.getCompanyId());
|
|
|
+ detail.setId(snowflakeIdWorker.nextId());
|
|
|
+ detail.setTenantId(tenantId);
|
|
|
+ archiveInputDetails.add(detail);
|
|
|
+ myArchiveInputDetails.add(detail);
|
|
|
+ BizWorkOrder workOrder = bizWorkOrders.stream().filter(v -> v.getCompanyId().equals(detail.getCompanyId()) && v.getTaskTypeId().equals(3L)).findFirst().orElse(null);
|
|
|
+ if (workOrder == null) {
|
|
|
+ workOrder = new BizWorkOrder();
|
|
|
+ workOrder.setCompanyId(archiveInput.getCompanyId());
|
|
|
+ workOrder.setType(1);
|
|
|
+ workOrder.setTaskTypeId(3L);
|
|
|
+ workOrder.setId(snowflakeIdWorker.nextId());
|
|
|
+ workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
|
|
|
+ workOrder.setContractDetailId(detail.getId());
|
|
|
+ workOrder.setCompanyId(archiveInput.getCompanyId());
|
|
|
+ workOrder.setContractId(archiveInput.getId());
|
|
|
+ workOrder.setStartMonth(item.getHousingFundStartMonth());
|
|
|
+ workOrder.setEndMonth(item.getHousingFundEndMonth());
|
|
|
+ workOrder.setTenantId(tenantId);
|
|
|
+ int monthNum = (item.getHousingFundMonth() == null ? 0 : item.getHousingFundMonth()) + (item.getHousingFundFreeMonth() == null ? 0 : item.getHousingFundFreeMonth());
|
|
|
+ workOrder.setMonthNum(monthNum);
|
|
|
+ bizWorkOrders.add(workOrder);
|
|
|
+ } else {
|
|
|
+ int monthNum = (item.getHousingFundMonth() == null ? 0 : item.getHousingFundMonth()) + (item.getHousingFundFreeMonth() == null ? 0 : item.getHousingFundFreeMonth());
|
|
|
+ workOrder.setMonthNum(workOrder.getMonthNum() + monthNum);
|
|
|
+ workOrder.setEndMonth(workOrder.getEndMonth().compareTo(item.getHousingFundEndMonth()) > 0 ? workOrder.getEndMonth() : item.getHousingFundEndMonth());
|
|
|
+
|
|
|
+ workOrder.setStartMonth(workOrder.getStartMonth().compareTo(item.getHousingFundStartMonth()) > 0 ? item.getHousingFundStartMonth() : workOrder.getStartMonth());
|
|
|
+ }
|
|
|
+ BizWorkOrderDetail workOrderDetail = new BizWorkOrderDetail();
|
|
|
+ workOrderDetail.setCompanyId(archiveInput.getCompanyId());
|
|
|
+ workOrderDetail.setContractDetailId(detail.getId());
|
|
|
+ workOrderDetail.setTaskTypeId(detail.getTaskTypeId());
|
|
|
+ workOrderDetail.setContractId(archiveInput.getId());
|
|
|
+ workOrderDetail.setWorkOrderId(workOrder.getId());
|
|
|
+ workOrderDetail.setFreeNum(detail.getFreeNum());
|
|
|
+ workOrderDetail.setServiceNum(detail.getServiceNum());
|
|
|
+ workOrderDetail.setTenantId(tenantId);
|
|
|
+ bizWorkOrderDetails.add(workOrderDetail);
|
|
|
+ }
|
|
|
+ if ("是".equals(item.getReturnTax())) {
|
|
|
+ BizArchiveInputDetail detail = new BizArchiveInputDetail();
|
|
|
+ detail.setTaskTypeId(4L);
|
|
|
+ detail.setAmount(item.getReturnTaxAmount());
|
|
|
+ detail.setDiscountAmount(item.getReturnTaxFreeAmount());
|
|
|
+ detail.setPrice(item.getReturnTaxPrice());
|
|
|
+ detail.setServiceNum(item.getReturnTaxMonth());
|
|
|
+ detail.setFreeNum(item.getReturnTaxFreeMonth());
|
|
|
+ detail.setContractId(archiveInput.getId());
|
|
|
+ detail.setCompanyId(archiveInput.getCompanyId());
|
|
|
+ detail.setId(snowflakeIdWorker.nextId());
|
|
|
+ detail.setTenantId(tenantId);
|
|
|
+ archiveInputDetails.add(detail);
|
|
|
+ myArchiveInputDetails.add(detail);
|
|
|
+ BizWorkOrder workOrder = bizWorkOrders.stream().filter(v -> v.getCompanyId().equals(detail.getCompanyId()) && v.getTaskTypeId().equals(4L)).findFirst().orElse(null);
|
|
|
+ if (workOrder == null) {
|
|
|
+ workOrder = new BizWorkOrder();
|
|
|
+ workOrder.setCompanyId(archiveInput.getCompanyId());
|
|
|
+ workOrder.setType(1);
|
|
|
+ workOrder.setTaskTypeId(4L);
|
|
|
+ workOrder.setId(snowflakeIdWorker.nextId());
|
|
|
+ workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
|
|
|
+ workOrder.setContractDetailId(detail.getId());
|
|
|
+ workOrder.setCompanyId(archiveInput.getCompanyId());
|
|
|
+ workOrder.setContractId(archiveInput.getId());
|
|
|
+ workOrder.setStartMonth(item.getReturnTaxStartMonth());
|
|
|
+ workOrder.setEndMonth(item.getReturnTaxEndMonth());
|
|
|
+ workOrder.setTenantId(tenantId);
|
|
|
+ int monthNum = (item.getReturnTaxMonth() == null ? 0 : item.getReturnTaxMonth()) + (item.getReturnTaxFreeMonth() == null ? 0 : item.getReturnTaxFreeMonth());
|
|
|
+ workOrder.setMonthNum(monthNum);
|
|
|
+ bizWorkOrders.add(workOrder);
|
|
|
+ } else {
|
|
|
+ int monthNum = (item.getReturnTaxMonth() == null ? 0 : item.getReturnTaxMonth()) + (item.getReturnTaxFreeMonth() == null ? 0 : item.getReturnTaxFreeMonth());
|
|
|
+ workOrder.setMonthNum(workOrder.getMonthNum() + monthNum);
|
|
|
+ workOrder.setEndMonth(workOrder.getEndMonth().compareTo(item.getReturnTaxEndMonth()) > 0 ? workOrder.getEndMonth() : item.getReturnTaxEndMonth());
|
|
|
+ workOrder.setStartMonth(workOrder.getStartMonth().compareTo(item.getReturnTaxStartMonth()) > 0 ? item.getReturnTaxStartMonth() : workOrder.getStartMonth());
|
|
|
+ }
|
|
|
+ BizWorkOrderDetail workOrderDetail = new BizWorkOrderDetail();
|
|
|
+ workOrderDetail.setCompanyId(archiveInput.getCompanyId());
|
|
|
+ workOrderDetail.setContractDetailId(detail.getId());
|
|
|
+ workOrderDetail.setTaskTypeId(detail.getTaskTypeId());
|
|
|
+ workOrderDetail.setContractId(archiveInput.getId());
|
|
|
+ workOrderDetail.setWorkOrderId(workOrder.getId());
|
|
|
+ workOrderDetail.setFreeNum(detail.getFreeNum());
|
|
|
+ workOrderDetail.setServiceNum(detail.getServiceNum());
|
|
|
+ workOrderDetail.setTenantId(tenantId);
|
|
|
+ bizWorkOrderDetails.add(workOrderDetail);
|
|
|
+ }
|
|
|
+ archiveInput.setDiscountAmount(myArchiveInputDetails.stream().map(BizArchiveInputDetail::getDiscountAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ archiveInputs.add(archiveInput);
|
|
|
+ successNum++;
|
|
|
+ successMsg.append("<br/>").append(successNum).append("、订单 ").append(item.getContractNo()).append(" 导入成功");
|
|
|
+ }
|
|
|
+ super.saveBatch(archiveInputs);
|
|
|
+ archiveInputDetailService.saveBatch(archiveInputDetails);
|
|
|
+ workOrderService.saveBatch(bizWorkOrders);
|
|
|
+ workOrderDetailService.saveBatch(bizWorkOrderDetails);
|
|
|
+ bizWorkOrders.forEach(this::addLoopTasks);
|
|
|
+ archiveInputs.forEach(this::saveDetailMonth);
|
|
|
+ if (failureNum > 0) {
|
|
|
+ failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
|
|
|
+ throw new ServiceException(failureMsg.toString());
|
|
|
+ } else {
|
|
|
+ successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
|
|
|
+ }
|
|
|
+ return successMsg.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ private BigDecimal getPrice(BigDecimal amount, Integer month) {
|
|
|
+ if(amount.equals(BigDecimal.ZERO) || month == 0) {
|
|
|
+ return BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+ BigDecimal res = amount.divide(new BigDecimal(month), 2, BigDecimal.ROUND_CEILING);
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public String importOnce(List<OrderExcelImportOnceModel> orderList, Long userId, long tenantId) {
|
|
|
if (StringUtils.isNull(orderList) || orderList.size() == 0) {
|