|
|
@@ -2,21 +2,32 @@ package org.springblade.box.tube.annualBudget.service.impl;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import io.seata.spring.annotation.GlobalTransactional;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import org.springblade.box.tube.annualBudget.mapper.AnnualBudgetItemMapper;
|
|
|
import org.springblade.box.tube.annualBudget.service.IAnnualBudgetItemService;
|
|
|
import org.springblade.box.tube.entity.AnnualBudgetItem;
|
|
|
+import org.springblade.box.tube.excel.AnnualBudgetItemExcel;
|
|
|
import org.springblade.box.tube.vo.AnnualBudgetItemVO;
|
|
|
+import org.springblade.client.entity.CorpsDesc;
|
|
|
+import org.springblade.client.feign.ICorpsDescClient;
|
|
|
import org.springblade.core.mp.support.Condition;
|
|
|
import org.springblade.core.mp.support.Query;
|
|
|
import org.springblade.core.secure.utils.AuthUtil;
|
|
|
+import org.springblade.core.tool.api.R;
|
|
|
+import org.springblade.core.tool.utils.BeanUtil;
|
|
|
import org.springblade.core.tool.utils.ObjectUtil;
|
|
|
import org.springblade.purchase.sales.feign.IOrderDescClient;
|
|
|
import org.springblade.purchase.sales.vo.OrderStatisticsVo;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.util.Date;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
|
@@ -30,6 +41,7 @@ import java.util.List;
|
|
|
public class AnnualBudgetItemServiceImpl extends ServiceImpl<AnnualBudgetItemMapper, AnnualBudgetItem> implements IAnnualBudgetItemService {
|
|
|
|
|
|
private final IOrderDescClient orderDescClient;//销售订单
|
|
|
+ private final ICorpsDescClient corpsDescClient;//客户
|
|
|
|
|
|
/**
|
|
|
* 自定义分页
|
|
|
@@ -55,26 +67,36 @@ public class AnnualBudgetItemServiceImpl extends ServiceImpl<AnnualBudgetItemMap
|
|
|
IPage<AnnualBudgetItem> iPage = baseMapper.selectPage(Condition.getPage(query), lambdaQueryWrapper);
|
|
|
|
|
|
if (ObjectUtil.isNotEmpty(iPage.getRecords())){
|
|
|
- //根据年月和客户查询订单数量和发货数量
|
|
|
iPage.getRecords().forEach(e -> {
|
|
|
- List<OrderStatisticsVo> list = orderDescClient.getByOrderQuantity(e.getYear(), e.getMonth(), e.getCorpId());
|
|
|
- if (ObjectUtil.isNotEmpty(list)){
|
|
|
- list.forEach(o -> {
|
|
|
+ //默认为0 防止报错
|
|
|
+ e.setKeterOrdQuantity(BigDecimal.ZERO);
|
|
|
+ e.setKeterDeliverQuantity(BigDecimal.ZERO);
|
|
|
+ e.setXcentwayOrdQuantity(BigDecimal.ZERO);
|
|
|
+ e.setXcentwayDeliverQuantity(BigDecimal.ZERO);
|
|
|
+ e.setLuxxanOrdQuantity(BigDecimal.ZERO);
|
|
|
+ e.setLuxxanDeliverQuantity(BigDecimal.ZERO);
|
|
|
+ e.setDrivemasterOrdQuantity(BigDecimal.ZERO);
|
|
|
+ e.setDrivemasterDeliverQuantity(BigDecimal.ZERO);
|
|
|
+
|
|
|
+ //根据年 月 客户 查询订单数量和发货数量
|
|
|
+ List<OrderStatisticsVo> orderList = orderDescClient.getByOrderQuantity(e.getYear(), e.getMonth(), e.getCorpId());
|
|
|
+ if (ObjectUtil.isNotEmpty(orderList)){
|
|
|
+ orderList.forEach(o -> {//循环根据品牌赋值
|
|
|
if ("KETER".equals(o.getBrand())){//欧记
|
|
|
- e.setKeterOrdQuantity(o.getOrderQuantity());
|
|
|
- e.setKeterDeliverQuantity(o.getActualQuantity());
|
|
|
+ e.setKeterOrdQuantity(o.getOrderQuantity() == null ? BigDecimal.ZERO : o.getOrderQuantity());
|
|
|
+ e.setKeterDeliverQuantity(o.getActualQuantity() == null ? BigDecimal.ZERO : o.getActualQuantity());
|
|
|
}
|
|
|
if ("XCENTWAY".equals(o.getBrand())){//艾特路
|
|
|
- e.setXcentwayOrdQuantity(o.getOrderQuantity());
|
|
|
- e.setXcentwayDeliverQuantity(o.getActualQuantity());
|
|
|
+ e.setXcentwayOrdQuantity(o.getOrderQuantity() == null ? BigDecimal.ZERO : o.getOrderQuantity());
|
|
|
+ e.setXcentwayDeliverQuantity(o.getActualQuantity() == null ? BigDecimal.ZERO : o.getActualQuantity());
|
|
|
}
|
|
|
if ("LUXXAN".equals(o.getBrand())){//路迈
|
|
|
- e.setLuxxanOrdQuantity(o.getOrderQuantity());
|
|
|
- e.setLuxxanDeliverQuantity(o.getActualQuantity());
|
|
|
+ e.setLuxxanOrdQuantity(o.getOrderQuantity() == null ? BigDecimal.ZERO : o.getOrderQuantity());
|
|
|
+ e.setLuxxanDeliverQuantity(o.getActualQuantity() == null ? BigDecimal.ZERO : o.getActualQuantity());
|
|
|
}
|
|
|
if ("DRIVEMASTER".equals(o.getBrand())){//登马
|
|
|
- e.setDrivemasterOrdQuantity(o.getOrderQuantity());
|
|
|
- e.setDrivemasterDeliverQuantity(o.getActualQuantity());
|
|
|
+ e.setDrivemasterOrdQuantity(o.getOrderQuantity() == null ? BigDecimal.ZERO : o.getOrderQuantity());
|
|
|
+ e.setDrivemasterDeliverQuantity(o.getActualQuantity() == null ? BigDecimal.ZERO : o.getActualQuantity());
|
|
|
}
|
|
|
});
|
|
|
//订单汇总
|
|
|
@@ -116,26 +138,41 @@ public class AnnualBudgetItemServiceImpl extends ServiceImpl<AnnualBudgetItemMap
|
|
|
if (ObjectUtil.isNotEmpty(list)){
|
|
|
//根据年月和客户查询订单数量和发货数量
|
|
|
list.forEach(e -> {
|
|
|
+ //默认为0 防止报错
|
|
|
+ e.setKeterOrdQuantity(BigDecimal.ZERO);
|
|
|
+ e.setKeterDeliverQuantity(BigDecimal.ZERO);
|
|
|
+ e.setXcentwayOrdQuantity(BigDecimal.ZERO);
|
|
|
+ e.setXcentwayDeliverQuantity(BigDecimal.ZERO);
|
|
|
+ e.setLuxxanOrdQuantity(BigDecimal.ZERO);
|
|
|
+ e.setLuxxanDeliverQuantity(BigDecimal.ZERO);
|
|
|
+ e.setDrivemasterOrdQuantity(BigDecimal.ZERO);
|
|
|
+ e.setDrivemasterDeliverQuantity(BigDecimal.ZERO);
|
|
|
+
|
|
|
+ //根据年 月 客户 查询订单数量和发货数量
|
|
|
List<OrderStatisticsVo> orderList = orderDescClient.getByOrderQuantity(e.getYear(), e.getMonth(), e.getCorpId());
|
|
|
if (ObjectUtil.isNotEmpty(orderList)){
|
|
|
- orderList.forEach(o -> {
|
|
|
+ orderList.forEach(o -> {//循环根据品牌赋值
|
|
|
if ("KETER".equals(o.getBrand())){//欧记
|
|
|
- e.setKeterOrdQuantity(o.getOrderQuantity());
|
|
|
- e.setKeterDeliverQuantity(o.getActualQuantity());
|
|
|
+ e.setKeterOrdQuantity(o.getOrderQuantity() == null ? BigDecimal.ZERO : o.getOrderQuantity());
|
|
|
+ e.setKeterDeliverQuantity(o.getActualQuantity() == null ? BigDecimal.ZERO : o.getActualQuantity());
|
|
|
}
|
|
|
if ("XCENTWAY".equals(o.getBrand())){//艾特路
|
|
|
- e.setXcentwayOrdQuantity(o.getOrderQuantity());
|
|
|
- e.setXcentwayDeliverQuantity(o.getActualQuantity());
|
|
|
+ e.setXcentwayOrdQuantity(o.getOrderQuantity() == null ? BigDecimal.ZERO : o.getOrderQuantity());
|
|
|
+ e.setXcentwayDeliverQuantity(o.getActualQuantity() == null ? BigDecimal.ZERO : o.getActualQuantity());
|
|
|
}
|
|
|
if ("LUXXAN".equals(o.getBrand())){//路迈
|
|
|
- e.setLuxxanOrdQuantity(o.getOrderQuantity());
|
|
|
- e.setLuxxanDeliverQuantity(o.getActualQuantity());
|
|
|
+ e.setLuxxanOrdQuantity(o.getOrderQuantity() == null ? BigDecimal.ZERO : o.getOrderQuantity());
|
|
|
+ e.setLuxxanDeliverQuantity(o.getActualQuantity() == null ? BigDecimal.ZERO : o.getActualQuantity());
|
|
|
}
|
|
|
if ("DRIVEMASTER".equals(o.getBrand())){//登马
|
|
|
- e.setDrivemasterOrdQuantity(o.getOrderQuantity());
|
|
|
- e.setDrivemasterDeliverQuantity(o.getActualQuantity());
|
|
|
+ e.setDrivemasterOrdQuantity(o.getOrderQuantity() == null ? BigDecimal.ZERO : o.getOrderQuantity());
|
|
|
+ e.setDrivemasterDeliverQuantity(o.getActualQuantity() == null ? BigDecimal.ZERO : o.getActualQuantity());
|
|
|
}
|
|
|
});
|
|
|
+ //订单汇总
|
|
|
+ e.setOrderSummary(e.getKeterOrdQuantity().add(e.getXcentwayOrdQuantity()).add(e.getLuxxanOrdQuantity()).add(e.getDrivemasterOrdQuantity()));
|
|
|
+ //发货汇总
|
|
|
+ e.setDeliverySummary(e.getKeterDeliverQuantity().add(e.getXcentwayDeliverQuantity()).add(e.getLuxxanDeliverQuantity()).add(e.getDrivemasterDeliverQuantity()));
|
|
|
}else {
|
|
|
e.setKeterOrdQuantity(BigDecimal.ZERO);
|
|
|
e.setKeterDeliverQuantity(BigDecimal.ZERO);
|
|
|
@@ -145,9 +182,66 @@ public class AnnualBudgetItemServiceImpl extends ServiceImpl<AnnualBudgetItemMap
|
|
|
e.setLuxxanDeliverQuantity(BigDecimal.ZERO);
|
|
|
e.setDrivemasterOrdQuantity(BigDecimal.ZERO);
|
|
|
e.setDrivemasterDeliverQuantity(BigDecimal.ZERO);
|
|
|
+ e.setOrderSummary(BigDecimal.ZERO);
|
|
|
+ e.setDeliverySummary(BigDecimal.ZERO);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
return list;
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
|
|
|
+ public R importItem(List<AnnualBudgetItemExcel> excelList, Boolean isCovered, Long id, MultipartFile file) {
|
|
|
+ if(org.springframework.util.CollectionUtils.isEmpty(excelList))
|
|
|
+ {
|
|
|
+ throw new SecurityException("导入数据不能为空");
|
|
|
+ }
|
|
|
+ for(int i = 0; i < excelList.size(); i++)
|
|
|
+ {
|
|
|
+ //判断必填项是否为空
|
|
|
+ AnnualBudgetItemExcel ItemExcel = excelList.get(i);
|
|
|
+ if (ObjectUtil.isEmpty(ItemExcel.getYear())){
|
|
|
+ throw new SecurityException("第"+(i+2)+"行,年份为空,");
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isEmpty(ItemExcel.getMonth())){
|
|
|
+ throw new SecurityException("第"+(i+2)+"行,月份为空,");
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(ItemExcel.getCorpName())){
|
|
|
+ throw new SecurityException("第"+(i+2)+"行,客户为空,");
|
|
|
+ }
|
|
|
+
|
|
|
+ AnnualBudgetItem item = new AnnualBudgetItem();
|
|
|
+ BeanUtil.copy(ItemExcel,item);
|
|
|
+
|
|
|
+ //判断客户是否存在
|
|
|
+ R<CorpsDesc> detail = corpsDescClient.getCorpByName(item.getCorpName(), AuthUtil.getTenantId());
|
|
|
+ if (detail.isSuccess() && ObjectUtils.isNotNull(detail.getData())) {
|
|
|
+ item.setCorpId(detail.getData().getId());
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("客户不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断明细是否存在,存在更新否则新增
|
|
|
+ LambdaQueryWrapper<AnnualBudgetItem> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper.eq(AnnualBudgetItem::getTenantId, AuthUtil.getTenantId()).eq(AnnualBudgetItem::getIsDeleted, 0)
|
|
|
+ .eq(AnnualBudgetItem::getCorpId, item.getCorpId()).eq(AnnualBudgetItem::getYear, item.getYear()).eq(AnnualBudgetItem::getMonth, item.getMonth());
|
|
|
+
|
|
|
+ AnnualBudgetItem selectItem = baseMapper.selectOne(lambdaQueryWrapper);
|
|
|
+ if (ObjectUtil.isNotEmpty(selectItem)){//存在更新
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setId(selectItem.getId());
|
|
|
+ baseMapper.updateById(item);
|
|
|
+ }else {//不存在新增
|
|
|
+ item.setCreateUser(AuthUtil.getUserId());
|
|
|
+ item.setCreateTime(new Date());
|
|
|
+ item.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ item.setPid(id);
|
|
|
+ baseMapper.insert(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return R.data("操作成功");
|
|
|
+ }
|
|
|
}
|