823 lines
36 KiB
Java
823 lines
36 KiB
Java
package com.ruoyi.contract.controller;
|
||
|
||
import cn.hutool.core.bean.BeanUtil;
|
||
import cn.hutool.core.collection.CollUtil;
|
||
import cn.hutool.core.util.ObjectUtil;
|
||
import com.alibaba.excel.EasyExcel;
|
||
import com.ruoyi.common.annotation.Log;
|
||
import com.ruoyi.common.annotation.RepeatSubmit;
|
||
import com.ruoyi.common.core.controller.BaseController;
|
||
import com.ruoyi.common.core.domain.PageQuery;
|
||
import com.ruoyi.common.core.domain.R;
|
||
import com.ruoyi.common.core.page.TableDataInfo;
|
||
import com.ruoyi.common.core.validate.AddGroup;
|
||
import com.ruoyi.common.core.validate.EditExpendGroup;
|
||
import com.ruoyi.common.enums.BusinessType;
|
||
import com.ruoyi.common.exception.ServiceException;
|
||
import com.ruoyi.common.utils.MathCompute;
|
||
import com.ruoyi.common.utils.StringUtils;
|
||
import com.ruoyi.contract.domain.bo.*;
|
||
import com.ruoyi.contract.domain.bo.consale.*;
|
||
import com.ruoyi.contract.domain.vo.*;
|
||
import com.ruoyi.contract.service.*;
|
||
import lombok.RequiredArgsConstructor;
|
||
import org.springframework.transaction.annotation.Transactional;
|
||
import org.springframework.util.CollectionUtils;
|
||
import org.springframework.validation.annotation.Validated;
|
||
import org.springframework.web.bind.annotation.*;
|
||
import org.springframework.web.multipart.MultipartFile;
|
||
|
||
import javax.servlet.http.HttpServletResponse;
|
||
import javax.validation.constraints.NotEmpty;
|
||
import javax.validation.constraints.NotNull;
|
||
import java.io.IOException;
|
||
import java.io.InputStream;
|
||
import java.math.BigDecimal;
|
||
import java.text.ParseException;
|
||
import java.text.SimpleDateFormat;
|
||
import java.util.*;
|
||
import java.util.concurrent.atomic.AtomicBoolean;
|
||
import java.util.stream.Collectors;
|
||
|
||
/**
|
||
* 销售合同信息
|
||
*
|
||
* @author jiangjuneli
|
||
* @date 2024-06-07
|
||
*/
|
||
@Validated
|
||
@RequiredArgsConstructor
|
||
@RestController
|
||
@RequestMapping("/contract/sale" )
|
||
public class ConSaleController extends BaseController {
|
||
|
||
private final IConSaleService iConSaleService;
|
||
private final IConMediaDeptService iConMediaDeptService;
|
||
private final IConClientService iConClientService;
|
||
private final IConCityService iConCityService;
|
||
private final IConFirstService iConFirstService;
|
||
private final IConMediaTypeService iConMediaTypeService;
|
||
|
||
/**
|
||
* 查询销售合同信息列表
|
||
*/
|
||
// @SaCheckPermission("contract:sale:list")
|
||
@GetMapping("/list" )
|
||
public TableDataInfo<ConSaleVo> list(ConSaleBoExtend bo, PageQuery pageQuery) {
|
||
return iConSaleService.queryPageList(bo, pageQuery);
|
||
}
|
||
|
||
/**
|
||
* 获取销售合同信息详细信息
|
||
*
|
||
* @param id 主键
|
||
*/
|
||
// @SaCheckPermission("contract:sale:query")
|
||
@GetMapping("/{id}" )
|
||
public R<ConSaleVo> getInfo(@NotNull(message = "主键不能为空" )
|
||
@PathVariable Long id) {
|
||
return R.ok(iConSaleService.queryById(id));
|
||
}
|
||
|
||
/**
|
||
* 新增销售合同信息
|
||
*/
|
||
// @SaCheckPermission("contract:sale:add")
|
||
@Log(title = "销售合同信息", businessType = BusinessType.INSERT)
|
||
@RepeatSubmit()
|
||
@PostMapping()
|
||
public R<Void> add(@Validated(AddGroup.class) @RequestBody ConSaleBoCopy boCopy) {
|
||
ConSaleBo bo = BeanUtil.toBean(boCopy, ConSaleBo.class);
|
||
if (CollUtil.isNotEmpty(boCopy.getConSaleCollectBoList())) {
|
||
//回款
|
||
List<ConSaleCollectBo> conSaleCollectBoList = boCopy.getConSaleCollectBoList().stream().map(item -> {
|
||
ConSaleCollectBo conSaleCollectBo = BeanUtil.toBean(item, ConSaleCollectBo.class);
|
||
return conSaleCollectBo;
|
||
}).collect(Collectors.toList());
|
||
bo.setConSaleCollectBoList(conSaleCollectBoList);
|
||
}
|
||
if (CollUtil.isNotEmpty(boCopy.getConSaleMediaBoList())) {
|
||
List<ConSaleMediaBo> collect = boCopy.getConSaleMediaBoList().stream().map(item -> {
|
||
ConSaleMediaBo conSaleMediaBo = BeanUtil.toBean(item, ConSaleMediaBo.class);
|
||
return conSaleMediaBo;
|
||
}).collect(Collectors.toList());
|
||
bo.setConSaleMediaBoList(collect);
|
||
}
|
||
return toAjax(iConSaleService.insertByBo(bo));
|
||
}
|
||
|
||
/**
|
||
* 修改销售合同信息
|
||
*/
|
||
// @SaCheckPermission("contract:sale:edit")
|
||
@Log(title = "销售合同信息", businessType = BusinessType.UPDATE)
|
||
@RepeatSubmit()
|
||
@PutMapping()
|
||
public R<Void> edit(@Validated(EditExpendGroup.class) @RequestBody ConSaleBo bo) throws IllegalAccessException {
|
||
return toAjax(iConSaleService.updateByBo(bo));
|
||
}
|
||
|
||
/**
|
||
* 废除销售合同信息
|
||
*/
|
||
// @SaCheckPermission("contract:sale:edit")
|
||
@Log(title = "销售合同废除", businessType = BusinessType.UPDATE)
|
||
@RepeatSubmit()
|
||
@GetMapping("/editAblish/{id}" )
|
||
public R<Void> editAbolish(@NotNull(message = "主键不能为空" )
|
||
@PathVariable Long id) {
|
||
return toAjax(iConSaleService.updateAblish(id));
|
||
}
|
||
|
||
/**
|
||
* 恢复销售合同信息
|
||
*/
|
||
// @SaCheckPermission("contract:sale:edit")
|
||
@Log(title = "销售合同废除", businessType = BusinessType.UPDATE)
|
||
@RepeatSubmit()
|
||
@GetMapping("/editRenew/{id}" )
|
||
public R<Void> editRenew(@NotNull(message = "主键不能为空" )
|
||
@PathVariable Long id) {
|
||
return toAjax(iConSaleService.updateRenew(id));
|
||
}
|
||
|
||
/**
|
||
* 删除销售合同信息
|
||
*
|
||
* @param ids 主键串
|
||
*/
|
||
// @SaCheckPermission("contract:sale:remove")
|
||
@Log(title = "销售合同信息", businessType = BusinessType.DELETE)
|
||
@DeleteMapping("/{ids}" )
|
||
public R<Void> remove(@NotEmpty(message = "主键不能为空" )
|
||
@PathVariable Long[] ids) {
|
||
return toAjax(iConSaleService.deleteWithValidByIds(Arrays.asList(ids), true));
|
||
}
|
||
|
||
/**
|
||
* 动态列表导出其他合同信息列表
|
||
*/
|
||
// @SaCheckPermission("contract:other:export")
|
||
@Log(title = "其他合同信息", businessType = BusinessType.EXPORT)
|
||
@PostMapping("/dynamicexport" )
|
||
public void dynamicexport(@RequestBody ConSaleExcelSearch map, HttpServletResponse response) {
|
||
String fieldName = map.getFieldName();
|
||
String mediaFieldName = "";
|
||
String collectFieldName = "";
|
||
if (StringUtils.isNotBlank(fieldName)) {
|
||
mediaFieldName = map.getMediaFieldName();
|
||
collectFieldName = map.getCollectFieldName();
|
||
} else {
|
||
throw new ServiceException("主表字段属性不可不填写" );
|
||
}
|
||
String ids = map.getIds();
|
||
if (StringUtils.isNotBlank(ids)) {
|
||
String[] split = ids.split("," );
|
||
List<String> collect = new ArrayList<>(Arrays.asList(split))
|
||
.stream()
|
||
.filter(ObjectUtil::isNotNull)
|
||
.collect(Collectors.toList());
|
||
ids = String.join(",", collect);
|
||
}
|
||
iConSaleService.dynamicexportUpgrade(fieldName, mediaFieldName, collectFieldName, ids, response);
|
||
}
|
||
|
||
/**
|
||
* 获取列表汇总数据
|
||
*/
|
||
// @SaCheckPermission("contract:sale:list")
|
||
@Log(title = "销售汇总", businessType = BusinessType.EXPORT)
|
||
@PostMapping("/getSaleTatol" )
|
||
public R<ConSaleTotalVo> getSaleTatol(@RequestBody ConSaleBoExtend conSaleBoExtend) {
|
||
return R.ok(iConSaleService.getSaleTatol(conSaleBoExtend));
|
||
}
|
||
|
||
|
||
@Log(title = "销售汇总导入", businessType = BusinessType.IMPORT)
|
||
@PostMapping("/import" )
|
||
public R<List<ConSaleImportVo>> importExcel(MultipartFile file) {
|
||
// 获取上传的文件输入流
|
||
try (InputStream inputStream = file.getInputStream()) {
|
||
// 使用 EasyExcel 解析 Excel 文件,并将数据转换为 ExcelRowData 实体类对象
|
||
List<ConSaleImportVo> data = EasyExcel.read(inputStream)
|
||
.head(ConSaleImportVo.class) // 指定 Excel 对应的实体类
|
||
.sheet(0) // 指定解析第一个 sheet
|
||
.doReadSync(); // 同步读取文件
|
||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/M/d" );
|
||
|
||
List<ConSaleImportVo> filteredData = data.stream()
|
||
.filter(conSaleImportVo -> conSaleImportVo.getOrderCode() != null)
|
||
.collect(Collectors.toList());
|
||
if (CollUtil.isEmpty(filteredData)){
|
||
return R.fail("导入没有数据");
|
||
}
|
||
//处理排序问题
|
||
List<String> orderCodeList = new ArrayList<>();
|
||
filteredData.stream().forEach(item -> {
|
||
if (!orderCodeList.contains(item.getOrderCode())){
|
||
orderCodeList.add(item.getOrderCode());
|
||
}
|
||
});
|
||
//之后将顺序翻转过来
|
||
Map<String, List<ConSaleImportVo>> conSaleImportMap = filteredData.stream().collect(Collectors.groupingBy(ConSaleImportVo::getOrderCode));
|
||
List<ConSaleImportVo> failList= new ArrayList<>();
|
||
|
||
//数据合并
|
||
List<ConSaleBo> conSaleBoList = new ArrayList<>();
|
||
|
||
orderCodeList.forEach(item -> {
|
||
String projectCodeKey = item;
|
||
List<ConSaleImportVo> salesList = conSaleImportMap.get(projectCodeKey);
|
||
if (CollectionUtils.isEmpty(salesList)) {
|
||
return;
|
||
}
|
||
ConSaleImportVo datum = salesList.get(0);
|
||
|
||
datum.setStatus("1" );
|
||
ConSaleBo conSaleBo = new ConSaleBo();
|
||
String projectExecutor = datum.getProjectExecutor();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(projectExecutor)) {
|
||
datum.setStatus("0" );
|
||
datum.setNotes("项目执行人未填写" );
|
||
return;
|
||
}
|
||
//项目执行人
|
||
conSaleBo.setProjExecutor(projectExecutor);
|
||
|
||
String department = datum.getDepartment();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(department)) {
|
||
|
||
}else {
|
||
ConMediaDeptBo conMediaDeptBo = new ConMediaDeptBo();
|
||
conMediaDeptBo.setMediaDeptName(department);
|
||
List<ConMediaDeptVo> conMediaDeptVos = iConMediaDeptService.queryList(conMediaDeptBo);
|
||
if (CollectionUtils.isEmpty(conMediaDeptVos)) {
|
||
datum.setStatus("0" );
|
||
datum.setNotes("未查到部门信息" );
|
||
return;
|
||
}
|
||
ConMediaDeptVo conMediaDeptVo = conMediaDeptVos.get(0);
|
||
//部门
|
||
conSaleBo.setMediaDeptName(conMediaDeptVo.getMediaDeptName());
|
||
conSaleBo.setMediaDeptId(conMediaDeptVo.getId());
|
||
}
|
||
|
||
//项目编号
|
||
String projectCode = datum.getProjectCode();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(projectCode)) {
|
||
datum.setStatus("0" );
|
||
datum.setNotes("项目编号未填写" );
|
||
return;
|
||
}
|
||
conSaleBo.setContractNumber(projectCode);
|
||
//订单编号
|
||
String orderCode = datum.getOrderCode();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(orderCode)) {
|
||
datum.setStatus("0" );
|
||
datum.setNotes("订单编号未填写" );
|
||
return;
|
||
}
|
||
conSaleBo.setProjNumber(orderCode);
|
||
|
||
//项目名称
|
||
String projectName = datum.getProjectName();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(projectName)) {
|
||
datum.setStatus("0" );
|
||
datum.setNotes("项目名称未填写" );
|
||
return;
|
||
}
|
||
conSaleBo.setProjName(projectName);
|
||
|
||
//客户名称
|
||
String clientName = datum.getClientName();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(clientName)) {
|
||
datum.setStatus("0" );
|
||
datum.setNotes("客户名称未填写" );
|
||
return;
|
||
}
|
||
|
||
ConClientBo conClientBo = new ConClientBo();
|
||
conClientBo.setClientName(clientName);
|
||
List<ConClientVo> conClientVoList = iConClientService.queryList(conClientBo);
|
||
if (CollectionUtils.isEmpty(conClientVoList)) {
|
||
datum.setStatus("0" );
|
||
datum.setNotes("未查到客户名称" );
|
||
return;
|
||
}
|
||
ConClientVo conClientVo = conClientVoList.get(0);
|
||
conSaleBo.setClientId(conClientVo.getId());
|
||
conSaleBo.setClientName(conClientVo.getClientName());
|
||
|
||
|
||
//合同签订日期
|
||
String contractSignDate = datum.getContractSignDate();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(contractSignDate)) {
|
||
datum.setStatus("0" );
|
||
datum.setNotes("合同签订日期未填写" );
|
||
return;
|
||
}
|
||
|
||
try {
|
||
Date date = sdf.parse(contractSignDate);
|
||
conSaleBo.setSignTime(date);
|
||
} catch (ParseException e) {
|
||
datum.setStatus("0" );
|
||
datum.setNotes("合同签订日期格式错误,正确格式:yyyy/M/d" );
|
||
return;
|
||
}
|
||
|
||
|
||
//实际开票日期
|
||
String actualInvoiceDate = datum.getActualInvoiceDate();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(actualInvoiceDate)) {
|
||
|
||
}else {
|
||
try {
|
||
Date date = sdf.parse(actualInvoiceDate);
|
||
conSaleBo.setBillingTime(date);
|
||
} catch (ParseException e) {
|
||
datum.setStatus("0" );
|
||
datum.setNotes("实际开票日期格式错误,正确格式:yyyy/M/d" );
|
||
return;
|
||
}
|
||
}
|
||
|
||
|
||
//补充说明
|
||
// String additionalNotes = datum.getAdditionalNotes();
|
||
// if (org.apache.commons.lang3.StringUtils.isBlank(additionalNotes)) {
|
||
// datum.setStatus("0" );
|
||
// datum.setNotes("补充说明未填写" );
|
||
// return;
|
||
// }
|
||
// conSaleBo.setSupple(additionalNotes);
|
||
//甲方
|
||
String partyA = datum.getPartyA();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(partyA)) {
|
||
datum.setStatus("0" );
|
||
datum.setNotes("甲方未填写" );
|
||
return;
|
||
}
|
||
ConFirstBo conFirstBo = new ConFirstBo();
|
||
conFirstBo.setFirstName(partyA);
|
||
List<ConFirstVo> conFirstVoList = iConFirstService.queryList(conFirstBo);
|
||
if (CollectionUtils.isEmpty(conFirstVoList)) {
|
||
datum.setStatus("0" );
|
||
datum.setNotes("未查到甲方信息" );
|
||
return;
|
||
}
|
||
ConFirstVo conFirstVo = conFirstVoList.get(0);
|
||
conSaleBo.setFirstId(conFirstVo.getId());
|
||
conSaleBo.setFirstName(conFirstVo.getFirstName());
|
||
|
||
|
||
//乙方
|
||
String partyB = datum.getPartyB();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(partyB)) {
|
||
datum.setStatus("0" );
|
||
datum.setNotes("乙方未填写" );
|
||
return;
|
||
}
|
||
conSaleBo.setSecondName(partyB);
|
||
|
||
List<ConSaleMediaBo> conSaleMediaBoList = new ArrayList<>();
|
||
for (ConSaleImportVo conSaleImportVo : salesList) {
|
||
conSaleImportVo.setStatus("1" );
|
||
ConSaleMediaBo conSaleMediaBo = new ConSaleMediaBo();
|
||
//城市
|
||
String city = conSaleImportVo.getCity();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(city)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("城市未填写" );
|
||
return;
|
||
}
|
||
ConCityBo conCityBo = new ConCityBo();
|
||
conCityBo.setCityName(city+",全城");
|
||
ConCityVo conCityVos = iConCityService.queryOneByWholeName(conCityBo);
|
||
if (ObjectUtil.isNull(conCityVos)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("未查到城市" );
|
||
return;
|
||
}
|
||
ConCityVo conCityVo = conCityVos;
|
||
conSaleMediaBo.setCityId(conCityVo.getId());
|
||
conSaleMediaBo.setCityName(conCityVo.getCityName());
|
||
//赋予数组值
|
||
String s = iConCityService.selectTreeIds(conCityVo.getId());
|
||
conSaleMediaBo.setCityIds(s);
|
||
|
||
//上刊时间
|
||
String publishStartDate = conSaleImportVo.getPublishStartDate();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(publishStartDate)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("上刊时间未填写" );
|
||
return;
|
||
}
|
||
|
||
try {
|
||
Date date = sdf.parse(publishStartDate);
|
||
conSaleMediaBo.setUpTime(date);
|
||
} catch (ParseException e) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("上刊时间格式错误,正确格式:yyyy/M/d" );
|
||
return;
|
||
}
|
||
|
||
|
||
//下刊时间
|
||
String publishEndDate = conSaleImportVo.getPublishEndDate();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(publishEndDate)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("下刊时间未填写" );
|
||
return;
|
||
}
|
||
|
||
try {
|
||
Date date = sdf.parse(publishEndDate);
|
||
conSaleMediaBo.setDownTime(date);
|
||
} catch (ParseException e) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("下刊时间格式错误,正确格式:yyyy/M/d" );
|
||
return;
|
||
}
|
||
|
||
//媒体类型
|
||
String mediaType = conSaleImportVo.getMediaType();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(mediaType)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("媒体类型未填写" );
|
||
return;
|
||
}
|
||
|
||
ConMediaTypeBo conMediaTypeBo = new ConMediaTypeBo();
|
||
conMediaTypeBo.setMediaType(mediaType);
|
||
List<ConMediaTypeVo> conMediaTypeVos = iConMediaTypeService.queryList(conMediaTypeBo);
|
||
if (CollectionUtils.isEmpty(conMediaTypeVos)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("未查到媒体类型" );
|
||
return;
|
||
}
|
||
ConMediaTypeVo conMediaTypeVo = conMediaTypeVos.get(0);
|
||
conSaleMediaBo.setMediaId(conMediaTypeVo.getId());
|
||
conSaleMediaBo.setMediaName(conMediaTypeVo.getMediaType());
|
||
|
||
|
||
//媒体位置
|
||
String mediaPosition = conSaleImportVo.getMediaPosition();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(mediaPosition)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("媒体位置未填写" );
|
||
return;
|
||
}
|
||
conSaleMediaBo.setMediaPosition(mediaPosition);
|
||
|
||
//数量
|
||
String quantity = conSaleImportVo.getQuantity();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(quantity)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("数量未填写" );
|
||
return;
|
||
}
|
||
if(quantity.equals("#VALUE!")){
|
||
quantity = "0";
|
||
}
|
||
quantity = quantity.replaceAll(",","");
|
||
try {
|
||
// double value = Double.parseDouble(quantity);
|
||
// conSaleMediaBo.setAccountNumber(value);
|
||
conSaleMediaBo.setAccountNumber(MathCompute.formatFourStringToDouble(quantity));
|
||
} catch (Exception ex) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("数量填写错误" );
|
||
return;
|
||
}
|
||
|
||
|
||
//频次
|
||
String frequency = conSaleImportVo.getFrequency();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(frequency)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("频次未填写" );
|
||
return;
|
||
}
|
||
conSaleMediaBo.setReleaseFrequency(frequency);
|
||
|
||
|
||
//刊例价
|
||
String listPrice = conSaleImportVo.getListPrice();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(listPrice)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("刊例价未填写" );
|
||
return;
|
||
}
|
||
if(listPrice.equals("#VALUE!")){
|
||
listPrice = "0";
|
||
}
|
||
listPrice = listPrice.replaceAll(",","");
|
||
try {
|
||
// double value = Double.parseDouble(listPrice);
|
||
// conSaleMediaBo.setPrintPrice(value);
|
||
conSaleMediaBo.setPrintPrice(MathCompute.formatFourStringToDouble(listPrice));
|
||
} catch (Exception ex) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("刊例价填写错误" );
|
||
return;
|
||
}
|
||
|
||
|
||
//刊例单位
|
||
String listPriceUnit = conSaleImportVo.getListPriceUnit();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(listPriceUnit)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("刊例单位未填写" );
|
||
return;
|
||
}
|
||
conSaleMediaBo.setPrintPriceUnit(listPriceUnit);
|
||
|
||
//折扣
|
||
String discount = conSaleImportVo.getDiscount();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(discount)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("折扣未填写" );
|
||
return;
|
||
}
|
||
conSaleMediaBo.setDiscount(discount);
|
||
|
||
//媒体费
|
||
String mediaCost = conSaleImportVo.getMediaCost();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(mediaCost)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("媒体费未填写" );
|
||
return;
|
||
}
|
||
if(mediaCost.equals("#VALUE!")){
|
||
mediaCost = "0";
|
||
}
|
||
mediaCost = mediaCost.replaceAll(",","");
|
||
try {
|
||
// double value = Double.parseDouble(mediaCost);
|
||
// conSaleMediaBo.setMediaFee(value);
|
||
conSaleMediaBo.setMediaFee(MathCompute.formatFourStringToDouble(mediaCost));
|
||
} catch (Exception ex) {
|
||
conSaleMediaBo.setMediaFee(0.0);
|
||
}
|
||
|
||
|
||
//制作费
|
||
String productionCost = conSaleImportVo.getProductionCost();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(productionCost)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("制作费未填写" );
|
||
return;
|
||
}
|
||
if(productionCost.equals("#VALUE!")){
|
||
productionCost = "0";
|
||
}
|
||
productionCost = productionCost.replaceAll(",","");
|
||
try {
|
||
// double value = Double.parseDouble(productionCost);
|
||
// conSaleMediaBo.setProductFee(value);
|
||
conSaleMediaBo.setProductFee(MathCompute.formatFourStringToDouble(productionCost));
|
||
} catch (Exception ex) {
|
||
conSaleMediaBo.setProductFee(0.0);
|
||
}
|
||
|
||
|
||
//是否比稿
|
||
String isBid = conSaleImportVo.getIsBid();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(isBid)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("是否比稿未填写" );
|
||
return;
|
||
}
|
||
if ("是".equals(isBid)) {
|
||
conSaleMediaBo.setCompet("1" );
|
||
} else {
|
||
conSaleMediaBo.setCompet("2" );
|
||
}
|
||
|
||
//比稿返点
|
||
String bidRebate = conSaleImportVo.getBidRebate();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(bidRebate)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("比稿返点未填写" );
|
||
return;
|
||
}
|
||
conSaleMediaBo.setCompetReverPoit(bidRebate);
|
||
|
||
//比稿金额
|
||
String bidAmount = conSaleImportVo.getBidAmount();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(bidAmount)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("比稿金额未填写" );
|
||
return;
|
||
}
|
||
if(bidAmount.equals("#VALUE!")){
|
||
bidAmount = "0";
|
||
}
|
||
|
||
bidAmount = bidAmount.replace("¥","").replaceAll(",","");;
|
||
try {
|
||
// double value = Double.parseDouble(bidAmount);
|
||
// conSaleMediaBo.setCompetReverMoney(value);
|
||
conSaleMediaBo.setCompetReverMoney(MathCompute.formatFourStringToDouble(bidAmount));
|
||
} catch (Exception ex) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("比稿金额填写错误" );
|
||
return;
|
||
}
|
||
|
||
//YK给群邑返点比例
|
||
String ykToQunYiRebateRate = conSaleImportVo.getYkToQunYiRebateRate();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(ykToQunYiRebateRate)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("YK给群邑返点比例未填写" );
|
||
return;
|
||
}
|
||
|
||
//优客返点给群邑
|
||
String yuKeRebateToQunYi = conSaleImportVo.getYuKeRebateToQunYi();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(yuKeRebateToQunYi)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("优客返点给群邑未填写" );
|
||
return;
|
||
}
|
||
//YK给YYX返点比例
|
||
String ykToYYXRebateRate = conSaleImportVo.getYkToYYXRebateRate();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(ykToYYXRebateRate)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("YK给YYX返点比例未填写" );
|
||
return;
|
||
}
|
||
|
||
//优客返点给YYX
|
||
String yuKeRebateToYYX = conSaleImportVo.getYuKeRebateToYYX();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(yuKeRebateToYYX)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("优客返点给YYX未填写" );
|
||
return;
|
||
}
|
||
|
||
String ykToQunYiRebateRateReplace = ykToQunYiRebateRate.replace("%", "" );
|
||
String ykToYYXRebateRateReplace = ykToYYXRebateRate.replace("%", "" );
|
||
|
||
//其他返点
|
||
double otherRebates = 0;
|
||
//其他返点金额
|
||
double otherRebateAmounts = 0;
|
||
|
||
|
||
try {
|
||
double ykToQunYiRebateRateDouble = Double.parseDouble(ykToQunYiRebateRateReplace);
|
||
double ykToYYXRebateRateDouble = Double.parseDouble(ykToYYXRebateRateReplace);
|
||
otherRebates = ykToQunYiRebateRateDouble + ykToYYXRebateRateDouble;
|
||
} catch (Exception ex) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("YK给群邑返点比例 or YK给YYX返点比例错误" );
|
||
return;
|
||
}
|
||
|
||
|
||
String yuKeRebateToQunYiReplace = yuKeRebateToQunYi.replace("¥", "" ).replaceAll(",","");
|
||
String yuKeRebateToYYXReplace = yuKeRebateToYYX.replace("¥", "" ).replaceAll(",","");
|
||
if(yuKeRebateToQunYiReplace.equals("#VALUE!")){
|
||
yuKeRebateToQunYiReplace = "0";
|
||
}
|
||
if(yuKeRebateToYYXReplace.equals("#VALUE!")){
|
||
yuKeRebateToYYXReplace = "0";
|
||
}
|
||
try {
|
||
double yuKeRebateToQunYiDouble = Double.parseDouble(yuKeRebateToQunYiReplace);
|
||
double yuKeRebateToYYXDouble = Double.parseDouble(yuKeRebateToYYXReplace);
|
||
otherRebateAmounts = yuKeRebateToQunYiDouble + yuKeRebateToYYXDouble;
|
||
} catch (Exception ex) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("优客返点给群邑 or 优客返点给YYX" );
|
||
return;
|
||
}
|
||
|
||
//补充说明 其实是媒体信息中的备注
|
||
String additionalNotes = conSaleImportVo.getAdditionalNotes();
|
||
conSaleMediaBo.setRemark(additionalNotes);
|
||
|
||
// conSaleMediaBo.setOtherReverPoit(String.valueOf(otherRebates).concat("%" ));
|
||
// conSaleMediaBo.setOtherReverMoney(otherRebateAmounts);
|
||
conSaleMediaBo.setOtherReverPoit(String.valueOf(MathCompute.formatFourDoubleToDouble(otherRebates)).concat("%" ));
|
||
conSaleMediaBo.setOtherReverMoney(MathCompute.formatFourDoubleToDouble(otherRebateAmounts));
|
||
conSaleMediaBoList.add(conSaleMediaBo);
|
||
|
||
|
||
}
|
||
conSaleBo.setConSaleMediaBoList(conSaleMediaBoList);
|
||
|
||
|
||
List<ConSaleCollectBo> conSaleCollectBoList = new ArrayList<>();
|
||
int size = 1;
|
||
for (ConSaleImportVo conSaleImportVo : salesList) {
|
||
ConSaleCollectBo conSaleCollectBo = new ConSaleCollectBo();
|
||
conSaleCollectBo.setTransactionsNumber("第" + size + "笔" );
|
||
//每笔订单金额
|
||
String orderAmountPerTransaction = conSaleImportVo.getOrderAmountPerTransaction();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(orderAmountPerTransaction)) {
|
||
|
||
}else {
|
||
if(orderAmountPerTransaction.equals("#VALUE!")){
|
||
orderAmountPerTransaction = "0";
|
||
}
|
||
|
||
orderAmountPerTransaction = orderAmountPerTransaction.replace("¥","").replaceAll(",","");
|
||
try {
|
||
double value = Double.parseDouble(orderAmountPerTransaction);
|
||
// conSaleCollectBo.setActualArrivalMoney(value);
|
||
conSaleCollectBo.setConventionArrivalMoney(value);
|
||
} catch (Exception ex) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("每笔订单金额填写错误" );
|
||
return;
|
||
}
|
||
}
|
||
|
||
|
||
//约定回款日期
|
||
String agreedPaymentDate = conSaleImportVo.getAgreedPaymentDate();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(agreedPaymentDate)) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("约定回款日期未填写" );
|
||
return;
|
||
}
|
||
try {
|
||
Date date = sdf.parse(agreedPaymentDate);
|
||
conSaleCollectBo.setPayTime(date);
|
||
} catch (ParseException e) {
|
||
conSaleImportVo.setStatus("0" );
|
||
conSaleImportVo.setNotes("约定回款日期格式错误,正确格式:yyyy/M/d" );
|
||
return;
|
||
}
|
||
|
||
|
||
//实际回款日期
|
||
String actualPaymentDate = conSaleImportVo.getActualPaymentDate();
|
||
if (org.apache.commons.lang3.StringUtils.isBlank(actualPaymentDate)) {
|
||
|
||
}else {
|
||
try {
|
||
Date date = sdf.parse(actualPaymentDate);
|
||
conSaleCollectBo.setArrivalTime(date);
|
||
} catch (ParseException e) {
|
||
conSaleImportVo.setStatus("0");
|
||
conSaleImportVo.setNotes("约定回款日期格式错误,正确格式:yyyy/M/d");
|
||
return;
|
||
}
|
||
}
|
||
conSaleCollectBoList.add(conSaleCollectBo);
|
||
size++;
|
||
}
|
||
|
||
conSaleBo.setConSaleCollectBoList(conSaleCollectBoList);
|
||
conSaleBoList.add(conSaleBo);
|
||
});
|
||
|
||
|
||
|
||
AtomicBoolean flag = new AtomicBoolean(true);
|
||
conSaleImportMap.forEach((projectCodeKey, salesList) -> {
|
||
for (ConSaleImportVo conSaleImportVo : salesList) {
|
||
if (BigDecimal.ZERO.toString().equals(conSaleImportVo.getStatus())){
|
||
flag.set(false);
|
||
failList.add(conSaleImportVo);
|
||
}
|
||
}
|
||
});
|
||
if(flag.get()){
|
||
for (ConSaleBo conSaleBo : conSaleBoList) {
|
||
conSaleBo.setState("1");
|
||
iConSaleService.insertByBo(conSaleBo);
|
||
}
|
||
return R.ok();
|
||
}else{
|
||
return R.fail(failList);
|
||
}
|
||
|
||
} catch (Exception e) {
|
||
throw new RuntimeException(e);
|
||
}
|
||
|
||
}
|
||
|
||
/**
|
||
* 销售合同导入
|
||
* @param file
|
||
* @return
|
||
*/
|
||
@Log(title = "销售合同导入", businessType = BusinessType.IMPORT)
|
||
@PostMapping("/importData")
|
||
public R<Integer> importData(MultipartFile file) {
|
||
try {
|
||
return R.ok(iConSaleService.importData(file));
|
||
} catch (Exception e) {
|
||
return R.fail("导入失败");
|
||
}
|
||
}
|
||
|
||
}
|