新购税率计算修改

This commit is contained in:
syruan 2024-12-27 11:02:56 +08:00
parent badc7cd064
commit d739a97399
3 changed files with 62 additions and 56 deletions

View File

@ -20,7 +20,6 @@ import com.bonus.material.basic.mapper.BmQrBoxMapper;
import com.bonus.material.basic.service.BmQrBoxService;
import com.bonus.material.ma.domain.vo.MachineVo;
import com.bonus.material.ma.mapper.MachineMapper;
import com.bonus.material.purchase.domain.vo.PurchaseVo;
import com.bonus.material.purchase.mapper.PurchaseBindMapper;
import com.bonus.material.purchase.mapper.PurchaseStorageMapper;
import lombok.extern.slf4j.Slf4j;
@ -30,13 +29,11 @@ import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author ma_sh

View File

@ -48,9 +48,9 @@ public class PurchaseCheckInfoController extends BaseController {
//@RequiresPermissions("purchase:info:list")
@GetMapping("/list")
public AjaxResult list(PurchaseQueryDto purchaseQueryDto) {
List<PurchaseCheckInfo> list = purchaseCheckInfoService.selectPurchaseCheckInfoList(purchaseQueryDto);
Integer pageIndex = Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1);
Integer pageSize = Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10);
final List<PurchaseCheckInfo> list = purchaseCheckInfoService.selectPurchaseCheckInfoList(purchaseQueryDto);
final Integer pageIndex = Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1);
final Integer pageSize = Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10);
return AjaxResult.success(ListPagingUtil.paging(pageIndex, pageSize, list));
}
@ -76,7 +76,7 @@ public class PurchaseCheckInfoController extends BaseController {
public AjaxResult add(@Valid @NotNull @RequestBody PurchaseCheckDto purchaseCheckDto) {
try {
return purchaseCheckInfoService.insertPurchaseCheckInfo(purchaseCheckDto);
} catch (Exception e) {
} catch (final Exception e) {
return error("系统错误, " + e.getMessage());
}
}
@ -92,7 +92,7 @@ public class PurchaseCheckInfoController extends BaseController {
public AjaxResult edit(@RequestBody @NotNull(message = "请求参数不能为空") @Valid PurchaseCheckDto purchaseCheckDto) {
try {
return toAjax(purchaseCheckInfoService.updatePurchaseCheckInfo(purchaseCheckDto));
} catch (Exception e) {
} catch (final Exception e) {
return error("系统错误, " + e.getMessage());
}
}

View File

@ -83,11 +83,11 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
purchaseQueryDto.setUserId(SecurityUtils.getUserId());
PurchaseCheckDto purchaseCheckDtoResult = new PurchaseCheckDto();
PurchaseCheckInfo purchaseCheckInfo = purchaseCheckInfoMapper.selectPurchaseCheckInfoById(purchaseQueryDto.getId());
if (purchaseCheckInfo != null) {
if (null != purchaseCheckInfo) {
purchaseCheckDtoResult.setPurchaseCheckInfo(purchaseCheckInfo);
// boolean isAllowPartTransfer = bmConfigService.isBmConfigEnabledWithDefaultFalse(BmConfigItems.BOOLEAN_ALLOW_PURCHASE_PART_TRANSFER);
List<PurchaseCheckDetails> purchaseCheckDetailsList = purchaseCheckDetailsMapper.selectPurchaseCheckDetailsListByQueryDto(purchaseQueryDto);
if (purchaseQueryDto.getTaskStage() != null) {
if (null != purchaseQueryDto.getTaskStage()) {
// 根据阶段来过滤详情数据
switch (purchaseQueryDto.getTaskStage()) {
case PURCHASE_TASK_STAGE_MANAGE:
@ -128,11 +128,11 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
private void extractedFile(List<PurchaseCheckDetails> purchaseCheckDetailsList) {
if (!CollectionUtils.isEmpty(purchaseCheckDetailsList)) {
for (PurchaseCheckDetails purchaseCheckDetails : purchaseCheckDetailsList) {
BmFileInfo fileInfo = new BmFileInfo();
final BmFileInfo fileInfo = new BmFileInfo();
fileInfo.setTaskType(10);
fileInfo.setModelId(purchaseCheckDetails.getId());
fileInfo.setTaskId(purchaseCheckDetails.getTaskId());
List<BmFileInfo> bmFileInfoList = bmFileInfoMapper.selectBmFileInfoList(fileInfo);
final List<BmFileInfo> bmFileInfoList = bmFileInfoMapper.selectBmFileInfoList(fileInfo);
if (!CollectionUtils.isEmpty(bmFileInfoList)) {
purchaseCheckDetails.setBmFileInfos(bmFileInfoList);
}
@ -152,15 +152,15 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
*/
@Override
public List<PurchaseCheckInfo> selectPurchaseCheckInfoList(PurchaseQueryDto purchaseQueryDto) {
List<PurchaseCheckInfo> purchaseCheckInfos = purchaseCheckInfoMapper.selectPurchaseCheckInfoJoinList(purchaseQueryDto);
final List<PurchaseCheckInfo> purchaseCheckInfos = purchaseCheckInfoMapper.selectPurchaseCheckInfoJoinList(purchaseQueryDto);
if (CollectionUtils.isEmpty(purchaseCheckInfos) ) {return Collections.emptyList();}
AtomicReference<Long> loginUserId = new AtomicReference<>(SecurityUtils.getUserId());
final AtomicReference<Long> loginUserId = new AtomicReference<>(SecurityUtils.getUserId());
if (Objects.isNull(loginUserId.get()) || Objects.isNull(purchaseQueryDto.getTaskStage())) {return Collections.emptyList();}
List<PurchaseCheckInfo> purchaseCheckInfoResult = new ArrayList<>();
boolean isAllowPartTransfer = bmConfigService.isBmConfigEnabledWithDefaultFalse(BmConfigItems.BOOLEAN_ALLOW_PURCHASE_PART_TRANSFER);
final List<PurchaseCheckInfo> purchaseCheckInfoResult = new ArrayList<>();
final boolean isAllowPartTransfer = bmConfigService.isBmConfigEnabledWithDefaultFalse(BmConfigItems.BOOLEAN_ALLOW_PURCHASE_PART_TRANSFER);
for (PurchaseCheckInfo purchaseInfo : purchaseCheckInfos) {
for (final PurchaseCheckInfo purchaseInfo : purchaseCheckInfos) {
// 获取采购物资明细2024-12-23日修改by阮世耀 根据当前库管员绑定物资来查询 不展示非本角色管理的物资类型
List<PurchaseCheckDetails> purchaseCheckDetails = purchaseCheckDetailsMapper.selectPurchaseCheckDetailsListByTaskId(purchaseInfo.getTaskId(), null, loginUserId.get());
if (CollectionUtils.isEmpty(purchaseCheckDetails)) {continue;}
@ -169,7 +169,7 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
purchaseCheckDetails = purchaseCheckDetails.stream().filter(o -> !(MaTypeManageTypeEnum.NUMBER_DEVICE.getTypeId().equals(o.getManageType()) &&
(o.getStatus().equals(PurchaseTaskStatusEnum.TO_BIND.getStatus()) || o.getStatus().equals(PurchaseTaskStatusEnum.TO_BIND_AFTER_REJECT.getStatus())))).collect(Collectors.toList());
OptionalInt minStatus = purchaseCheckDetails.stream().mapToInt(PurchaseCheckDetails::getStatus).min();
final OptionalInt minStatus = purchaseCheckDetails.stream().mapToInt(PurchaseCheckDetails::getStatus).min();
if (isAllowPartTransfer) {
// 2024-12-23日 取消状态过滤修改由任务阶段来过滤 --- by 阮世耀
@ -207,12 +207,13 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
}
if (!CollectionUtils.isEmpty(purchaseCheckDetails)) {
BigDecimal purchaseMaTotalNumber = BigDecimal.ZERO, checkMaTotalNumber = BigDecimal.ZERO, bindMaTotalNumber = BigDecimal.ZERO, inputMaTotalNumber = BigDecimal.ZERO;
AtomicReference<BigDecimal> purchaseMaTotalPrice = new AtomicReference<>(BigDecimal.ZERO);
final AtomicReference<BigDecimal> purchaseMaTotalPrice = new AtomicReference<>(BigDecimal.ZERO);
final AtomicReference<BigDecimal> purchaseTaxPriceTotal = new AtomicReference<>(BigDecimal.ZERO);
boolean isIncludeStage = false;
for (PurchaseCheckDetails detail : purchaseCheckDetails) {
if (detail.getPurchaseNum() == null || detail.getPurchasePrice() == null) {continue;}
if (detail.getPurchaseNum().compareTo(BigDecimal.ZERO) < 0 || detail.getPurchasePrice().compareTo(BigDecimal.ZERO) < 0) {
for (final PurchaseCheckDetails detail : purchaseCheckDetails) {
if (null == detail.getPurchaseNum() || null == detail.getPurchasePrice()) {continue;}
if (0 > detail.getPurchaseNum().compareTo(BigDecimal.ZERO) || 0 > detail.getPurchasePrice().compareTo(BigDecimal.ZERO)) {
throw new IllegalArgumentException("采购数量和价格必须为非负数");
}
if (!isIncludeStage) {
@ -224,23 +225,25 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
checkMaTotalNumber = checkMaTotalNumber.add(Optional.ofNullable(detail.getCheckNum()).orElse(BigDecimal.ZERO));
bindMaTotalNumber = bindMaTotalNumber.add(Optional.ofNullable(detail.getBindNum()).orElse(BigDecimal.ZERO));
inputMaTotalNumber = inputMaTotalNumber.add(Optional.ofNullable(detail.getInputNum()).orElse(BigDecimal.ZERO));
purchaseMaTotalPrice.updateAndGet(v -> v.add(detail.getPurchaseNum().multiply(detail.getPurchasePrice())));
purchaseMaTotalPrice.updateAndGet(v -> v.add(detail.getPurchaseNum().multiply(detail.getPurchasePrice()).setScale(10, RoundingMode.HALF_DOWN)));
purchaseTaxPriceTotal.updateAndGet(v -> v.add(detail.getPurchaseNum().multiply(detail.getPurchaseTaxPrice()).setScale(10, RoundingMode.HALF_DOWN)));
}
purchaseInfo.setPurchaseMaNumber(purchaseMaTotalNumber);
purchaseInfo.setPurchasePrice(purchaseMaTotalPrice.get());
purchaseInfo.setPurchaseTaxPrice(purchaseTaxPriceTotal.get());
purchaseInfo.setBindMaNumber(bindMaTotalNumber);
purchaseInfo.setCheckMaNumber(checkMaTotalNumber);
purchaseInfo.setInputMaNumber(inputMaTotalNumber);
purchaseInfo.setWaitInputNumber(Optional.of(purchaseMaTotalNumber).orElse(BigDecimal.ZERO).subtract(Optional.of(inputMaTotalNumber).orElse(BigDecimal.ZERO)));
if (purchaseInfo.getTaxRate() != null && purchaseInfo.getPurchasePrice() != null) {
purchaseInfo.setPurchaseTaxPrice(calculateTaxPrice(purchaseMaTotalPrice.get(), purchaseInfo.getTaxRate()));
}
// if (null != purchaseInfo.getTaxRate() && null != purchaseInfo.getPurchasePrice()) {
// purchaseInfo.setPurchaseTaxPrice(calculateTaxPrice(purchaseMaTotalPrice.get(), purchaseInfo.getTaxRate()));
// }
// 设置外层任务状态入库待开始入库进行中入库已完成
TmTask tmTask = tmTaskMapper.selectTmTaskByTaskId(purchaseInfo.getTaskId());
final TmTask tmTask = tmTaskMapper.selectTmTaskByTaskId(purchaseInfo.getTaskId());
purchaseInfo.setTaskStatusName(isIncludeStage ? "未完成" : "已完成");
if (purchaseQueryDto.getIsFinish() != null) {
if (purchaseQueryDto.getIsFinish() == 1) {
if (null != purchaseQueryDto.getIsFinish()) {
if (1 == purchaseQueryDto.getIsFinish()) {
if (isIncludeStage) {continue;}
} else {
if (!isIncludeStage) {continue;}
@ -279,9 +282,15 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
* @return 不含税价格100 税率为13%结果为 113.00
*/
public static BigDecimal calculateTaxPrice(BigDecimal purchaseNoTaxPrice, BigDecimal taxRate) {
BigDecimal one = BigDecimal.ONE;
BigDecimal divisor = BigDecimal.valueOf(100);
return purchaseNoTaxPrice.multiply(one.add(taxRate.divide(divisor))).setScale(2, RoundingMode.HALF_UP);
if (null == taxRate || 0 > taxRate.compareTo(BigDecimal.ZERO) || 0 < taxRate.compareTo(BigDecimal.valueOf(100))) {
throw new IllegalArgumentException("税率必须在0到100之间");
}
// 计算税率
final BigDecimal rate = taxRate.divide(BigDecimal.valueOf(100), 3, RoundingMode.HALF_UP);
// 税后价格计算
final BigDecimal taxIncludedPrice = purchaseNoTaxPrice.multiply(BigDecimal.ONE.add(rate));
// 保留10位小数
return taxIncludedPrice.setScale(10, RoundingMode.HALF_UP);
}
/**
@ -296,24 +305,24 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
purchaseCheckInfo.getPurchaseCheckInfo().setCreateTime(DateUtils.getNowDate());
purchaseCheckInfo.getPurchaseCheckInfo().setCreateBy(SecurityUtils.getUsername());
try {
int thisMonthMaxOrder = tmTaskMapper.getMonthMaxOrderByDate(DateUtils.getCurrentYear(), DateUtils.getCurrentMonth(), TmTaskTypeEnum.TM_TASK_PURCHASE.getTaskTypeId());
final int thisMonthMaxOrder = tmTaskMapper.getMonthMaxOrderByDate(DateUtils.getCurrentYear(), DateUtils.getCurrentMonth(), TmTaskTypeEnum.TM_TASK_PURCHASE.getTaskTypeId());
String taskCode = genderTaskCode(thisMonthMaxOrder);
TmTask tmTask = new TmTask(null, TmTaskTypeEnum.TM_TASK_PURCHASE.getTaskTypeId(),
final TmTask tmTask = new TmTask(null, TmTaskTypeEnum.TM_TASK_PURCHASE.getTaskTypeId(),
PurchaseTaskStatusEnum.TO_NOTICE.getStatus(),
purchaseCheckInfo.getPurchaseCheckInfo().getCompanyId(), thisMonthMaxOrder + 1, taskCode);
tmTask.setCreateTime(DateUtils.getNowDate());
tmTaskMapper.insertTmTask(tmTask);
Long taskId = tmTask.getTaskId();
purchaseCheckInfo.getPurchaseCheckInfo().setTaskId(taskId);
int count = purchaseCheckInfoMapper.insertPurchaseCheckInfo(purchaseCheckInfo.getPurchaseCheckInfo());
if (count > 0) {
final int count = purchaseCheckInfoMapper.insertPurchaseCheckInfo(purchaseCheckInfo.getPurchaseCheckInfo());
if (0 < count) {
return insertPurchaseCheckDetails(purchaseCheckInfo.getPurchaseCheckDetailsList(), taskId);
} else {
return AjaxResult.error("新增任务失败,purchase_check_info表插入0条");
}
} catch (DataAccessException e) {
} catch (final DataAccessException e) {
return AjaxResult.error("数据库操作失败:" + e.getMessage());
} catch (Exception e) {
} catch (final Exception e) {
return AjaxResult.error("新增任务失败:" + e.getMessage());
}
}
@ -326,15 +335,15 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
PurchaseTaskStatusEnum.TO_CHECK.getStatus() :
PurchaseTaskStatusEnum.TO_NOTICE.getStatus());
details.setInputStatus("0");
List<BmFileInfo> bmFileInfos = details.getBmFileInfos();
final List<BmFileInfo> bmFileInfos = details.getBmFileInfos();
if (!CollectionUtils.isEmpty(bmFileInfos)) {
bmFileInfos.forEach(o -> o.setTaskId(taskId));
bmFileInfoMapper.insertBmFileInfos(bmFileInfos);
}
}
// 批量插入详情数据
int count = purchaseCheckDetailsMapper.insertPurchaseCheckDetailsList(purchaseCheckDetailsList);
if (count > 0) {
final int count = purchaseCheckDetailsMapper.insertPurchaseCheckDetailsList(purchaseCheckDetailsList);
if (0 < count) {
return AjaxResult.success("新增任务成功");
} else {
return AjaxResult.error("新增任务失败,purchase_check_detail详情表插入0条");
@ -369,8 +378,8 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
}
}
}
return updateCount > 0 ? AjaxResult.success("验证成功") : AjaxResult.error("无验证信息");
} catch (Exception e) {
return 0 < updateCount ? AjaxResult.success("验证成功") : AjaxResult.error("无验证信息");
} catch (final Exception e) {
return AjaxResult.error("验收状态更改失败,异常报错:" + e.getMessage());
}
}
@ -396,7 +405,7 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
// 验收驳回处理流程
for (PurchaseCheckDetails details : purchaseVerifyVo.getPurchaseCheckDetailsList()) {
details.setStatus(PurchaseTaskStatusEnum.TO_CHECK_AFTER_REJECT.getStatus());
result = purchaseCheckDetailsMapper.updatePurchaseDetails4Check(details) > 0 ? AjaxResult.success("detail验证驳回成功") : AjaxResult.error("details无验证信息");
result = 0 < purchaseCheckDetailsMapper.updatePurchaseDetails4Check(details) ? AjaxResult.success("detail验证驳回成功") : AjaxResult.error("details无验证信息");
tmTaskMapper.updateTmTask(new TmTask()
.setTaskId(details.getTaskId())
.setTaskType(TmTaskTypeEnum.TM_TASK_PURCHASE.getTaskTypeId())
@ -406,7 +415,7 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
}
}
return result;
} catch (Exception e) {
} catch (final Exception e) {
return AjaxResult.error("验收状态更改失败,异常报错:" + e.getMessage());
}
}
@ -417,8 +426,8 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
*/
private void extractedFile(PurchaseCheckDetails details) {
if (!CollectionUtils.isEmpty(details.getBmFileInfos())) {
for (BmFileInfo bmFileInfo : details.getBmFileInfos()) {
if (bmFileInfo.getTaskType() != null && bmFileInfo.getTaskType() == 10) {
for (final BmFileInfo bmFileInfo : details.getBmFileInfos()) {
if (null != bmFileInfo.getTaskType() && Objects.equals(TmTaskTypeEnum.TM_TASK_AGREEMENT_MANAGEMENT.getTaskTypeId(), bmFileInfo.getTaskType())) {
bmFileInfo.setTaskId(details.getTaskId());
bmFileInfo.setModelId(details.getId());
bmFileInfo.setCreateBy(SecurityUtils.getUsername());
@ -437,11 +446,11 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
@Override
public PurchaseCheckFormVo selectPurchaseCheckFormVoByTaskId(Long taskId) {
// 执行SQL查询外层信息
PurchaseCheckFormVo result = purchaseCheckInfoMapper.selectPurchaseCheckFormVoByTaskId(taskId);
final PurchaseCheckFormVo result = purchaseCheckInfoMapper.selectPurchaseCheckFormVoByTaskId(taskId);
if (result != null) {
if (null != result) {
// 执行SQL查询内层信息
List<PurchaseCheckDetails> purchaseCheckDetails = purchaseCheckDetailsMapper.selectPurchaseCheckDetailsListByTaskId(taskId, null, SecurityUtils.getUserId());
final List<PurchaseCheckDetails> purchaseCheckDetails = purchaseCheckDetailsMapper.selectPurchaseCheckDetailsListByTaskId(taskId, null, SecurityUtils.getUserId());
// 过滤掉空数据
purchaseCheckDetails.removeIf(Objects::isNull);
result.setMaterialList(purchaseCheckDetails);
@ -457,10 +466,10 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
* @return 任务对象
*/
private static String genderTaskCode(Integer thisMonthMaxOrder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date nowDate = DateUtils.getNowDate();
String format = dateFormat.format(nowDate);
String result = format.replace("-", "");
final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
final Date nowDate = DateUtils.getNowDate();
final String format = dateFormat.format(nowDate);
final String result = format.replace("-", "");
return PURCHASE_TASK_TYPE_LABEL + result + String.format("-%03d", thisMonthMaxOrder + 1);
}
@ -484,12 +493,12 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
);
}
try {
Long[] ids = new Long[]{purchaseCheckDto.getPurchaseCheckInfo().getId()};
final Long[] ids = {purchaseCheckDto.getPurchaseCheckInfo().getId()};
purchaseCheckDetailsMapper.deletePurchaseCheckDetailsByParentIds(ids);
insertPurchaseCheckDetails(purchaseCheckDto.getPurchaseCheckDetailsList(), purchaseCheckDto.getPurchaseCheckInfo().getTaskId());
purchaseCheckInfoMapper.updatePurchaseCheckInfo(purchaseCheckDto.getPurchaseCheckInfo());
return true;
} catch (Exception e) {
} catch (final Exception e) {
throw new ServiceException("错误信息描述");
}
}