fix(order): 修复订单金额计算和显示问题

- 在 add.html 和 edit.html 中将订单金额输入框设置为只读,防止直接修改
- 添加 setOrderPriceData 函数用于计算和更新订单金额
- 在产品列表中添加计算订单总金额的逻辑
- 更新订单信息时自动计算和设置订单金额
master
chenhao 2025-06-26 11:35:53 +08:00
parent c968dc1d9b
commit e6bd2b80d1
5 changed files with 41 additions and 12 deletions

View File

@ -112,7 +112,7 @@
} }
}); });
function getAllPriceData(){ function setOrderPriceData(){
let allPrice=0.00; let allPrice=0.00;
$('#productTable tbody').find('tr').find('.allPrice').each(function (index) { $('#productTable tbody').find('tr').find('.allPrice').each(function (index) {
allPrice+=parseFloat($(this).val()) allPrice+=parseFloat($(this).val())
@ -123,8 +123,11 @@
$('#productTable3 tbody').find('tr').find('.allPrice').each(function (index) { $('#productTable3 tbody').find('tr').find('.allPrice').each(function (index) {
allPrice+=parseFloat($(this).val()) allPrice+=parseFloat($(this).val())
}) })
console.log(`allPrice=${allPrice}`) let shipmentAmount = $('#shipmentAmount');
console.log('allPrice='+allPrice) if (shipmentAmount){
shipmentAmount.val(allPrice)
$('#displayshipmentAmount').val(formatAmountNumber(allPrice))
}
} }
function addProduct(data) { function addProduct(data) {
let length = $('#productTable tbody').find('tr').length let length = $('#productTable tbody').find('tr').length
@ -223,10 +226,7 @@
let flag=true let flag=true
console.log(data) console.log(data)
if (data){ if (data){
console.log(data)
flag =! updatePriceProductList.filter(item=>item===data.productBomCode).length>0; flag =! updatePriceProductList.filter(item=>item===data.productBomCode).length>0;
console.log(flag)
} }
let tr = $(` let tr = $(`
@ -288,6 +288,7 @@
$(this).parent().parent().find('.catalogueAllPrice').val((num * cateVal).toFixed(2)) $(this).parent().parent().find('.catalogueAllPrice').val((num * cateVal).toFixed(2))
$(this).parent().parent().find('.catalogueAllPrice-formmat').val(formatAmountNumber((num * cateVal).toFixed(2))) $(this).parent().parent().find('.catalogueAllPrice-formmat').val(formatAmountNumber((num * cateVal).toFixed(2)))
} }
setOrderPriceData()
}) })
$('.productTable .catalogue-price-format').on('input', function () { $('.productTable .catalogue-price-format').on('input', function () {
let val = $(this).val() let val = $(this).val()
@ -308,7 +309,7 @@
$(this).parent().parent().find('.catalogueAllPrice').val((val * quantity).toFixed(2)) $(this).parent().parent().find('.catalogueAllPrice').val((val * quantity).toFixed(2))
$(this).parent().parent().find('.catalogueAllPrice-formmat').val(formatAmountNumber((val * quantity).toFixed(2))) $(this).parent().parent().find('.catalogueAllPrice-formmat').val(formatAmountNumber((val * quantity).toFixed(2)))
} }
setOrderPriceData()
}) })
$('.productTable .guidance-discount-format').on('input', function () { $('.productTable .guidance-discount-format').on('input', function () {
let val = $(this).val() let val = $(this).val()
@ -323,6 +324,7 @@
// $(this).parent().parent().find('.allPrice').val((price * quantity).toFixed(2)) // $(this).parent().parent().find('.allPrice').val((price * quantity).toFixed(2))
// $(this).parent().parent().find('.allPrice-formmat').val(Number((price * quantity).toFixed(2)).toLocaleString("en-US")) // $(this).parent().parent().find('.allPrice-formmat').val(Number((price * quantity).toFixed(2)).toLocaleString("en-US"))
// } // }
setOrderPriceData()
}) })
$('.productTable .discount-format').on('change', function () { $('.productTable .discount-format').on('change', function () {
let percentageDiscount = $(this).val() let percentageDiscount = $(this).val()
@ -336,6 +338,7 @@
$(this).parent().parent().parent().find('.allPrice').val((price * num).toFixed(2)) $(this).parent().parent().parent().find('.allPrice').val((price * num).toFixed(2))
let allPrice = $(this).parent().parent().parent().find('.allPrice').val() let allPrice = $(this).parent().parent().parent().find('.allPrice').val()
$(this).parent().parent().parent().find('.allPrice-formmat').val(formatAmountNumber(allPrice)) $(this).parent().parent().parent().find('.allPrice-formmat').val(formatAmountNumber(allPrice))
setOrderPriceData()
}) })
$('.productTable .price-formmat').change('input', function () { $('.productTable .price-formmat').change('input', function () {
let val = $(this).val() let val = $(this).val()
@ -349,6 +352,7 @@
let discount = (val*1.0000/cataloguePrice).toFixed(4); let discount = (val*1.0000/cataloguePrice).toFixed(4);
$(this).parent().parent().find('.discount').val(discount) $(this).parent().parent().find('.discount').val(discount)
$(this).parent().parent().find('.discount-format').val(discount * 100) $(this).parent().parent().find('.discount-format').val(discount * 100)
setOrderPriceData()
// $(this).val(formatAmountNumber(val)) // $(this).val(formatAmountNumber(val))
}) })
} }

View File

@ -185,7 +185,7 @@
<td class="shortTd">订单金额<span class="is-required">*</span></td> <td class="shortTd">订单金额<span class="is-required">*</span></td>
<td> <td>
<input id="shipmentAmount" name="shipmentAmount" class="form-control" type="hidden" > <input id="shipmentAmount" name="shipmentAmount" class="form-control" type="hidden" >
<input type="text" required id="displayshipmentAmount" class="form-control" placeholder="输入金额" <input type="text" readonly required id="displayshipmentAmount" class="form-control" placeholder="输入金额"
oninput="this.value = this.value.replace(/[^0-9.]/g,'').replace(/(\..*)\./g, '$1');" oninput="this.value = this.value.replace(/[^0-9.]/g,'').replace(/(\..*)\./g, '$1');"
onfocus="this.value=document.getElementById('shipmentAmount').value" onfocus="this.value=document.getElementById('shipmentAmount').value"
onblur="updateShipmentAmountValue('shipmentAmount')" > onblur="updateShipmentAmountValue('shipmentAmount')" >

View File

@ -187,7 +187,7 @@
<td class="shortTd">订单金额<span class="is-required">*</span></td> <td class="shortTd">订单金额<span class="is-required">*</span></td>
<td><input name="shipmentAmount" id="shipmentAmount" th:field="*{shipmentAmount}" class="form-control" type="hidden" <td><input name="shipmentAmount" id="shipmentAmount" th:field="*{shipmentAmount}" class="form-control" type="hidden"
> >
<input type="text" required id="displayshipmentAmount" class="form-control" placeholder="输入金额" <input type="text" readonly required id="displayshipmentAmount" class="form-control" placeholder="输入金额"
oninput="this.value = this.value.replace(/[^0-9.]/g,'').replace(/(\..*)\./g, '$1');" oninput="this.value = this.value.replace(/[^0-9.]/g,'').replace(/(\..*)\./g, '$1');"
onfocus="this.value=document.getElementById('shipmentAmount').value" onfocus="this.value=document.getElementById('shipmentAmount').value"
onblur="updateShipmentAmountValue('shipmentAmount')" > onblur="updateShipmentAmountValue('shipmentAmount')" >
@ -447,6 +447,7 @@
$(function () { $(function () {
let shipmentAmount = [[${projectOrderInfo.shipmentAmount}]] || '' let shipmentAmount = [[${projectOrderInfo.shipmentAmount}]] || ''
if (shipmentAmount) { if (shipmentAmount) {
document.getElementById('displayshipmentAmount').value=formatAmountNumber(shipmentAmount); document.getElementById('displayshipmentAmount').value=formatAmountNumber(shipmentAmount);
} }
@ -815,7 +816,9 @@ ${
addProduct3(ele) addProduct3(ele)
}) : ''; }) : '';
window.localStorage.removeItem('getDetail') window.localStorage.removeItem('getDetail')
if (!$('#shipmentAmount').val()) {
setOrderPriceData()
}
}) })
} }

View File

@ -228,9 +228,9 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
projectInfo.setCompetitor(projectInfo.getCompetitorList().stream().filter(StringUtils::isNotEmpty).collect(Collectors.joining(","))); projectInfo.setCompetitor(projectInfo.getCompetitorList().stream().filter(StringUtils::isNotEmpty).collect(Collectors.joining(",")));
} }
//变更属地校验 //变更属地校验
List<ProjectOrderInfo> projectOrderInfos = orderInfoService.selectProjectOrderInfoByProjectId(Collections.singletonList(projectInfo.getId()));
if (!projectInfo.getAgentCode().equals(oldProjectInfo.getAgentCode())) { if (!projectInfo.getAgentCode().equals(oldProjectInfo.getAgentCode())) {
//查询订单信息 如果有抛出异常 //查询订单信息 如果有抛出异常
List<ProjectOrderInfo> projectOrderInfos = orderInfoService.selectProjectOrderInfoByProjectId(Collections.singletonList(projectInfo.getId()));
if (CollUtil.isNotEmpty(projectOrderInfos)) { if (CollUtil.isNotEmpty(projectOrderInfos)) {
throw new ServiceException("该项目存在订单流转,无法更改代表处"); throw new ServiceException("该项目存在订单流转,无法更改代表处");
} }
@ -245,6 +245,13 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
saveOtherInfo(projectInfo); saveOtherInfo(projectInfo);
// 记录操作日志 // 记录操作日志
recordOperationLogs(projectInfo, oldProjectInfo); recordOperationLogs(projectInfo, oldProjectInfo);
if (CollUtil.isNotEmpty(projectOrderInfos)){
ProjectOrderInfo projectOrderInfo = projectOrderInfos.get(0);
ProjectOrderInfo update = new ProjectOrderInfo();
update.setId(projectOrderInfo.getId());
update.setProjectId(projectOrderInfo.getProjectId());
orderInfoService.updateProjectOrderInfo(update);
}
return result; return result;
} }

View File

@ -127,6 +127,9 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService {
projectOrderInfo.setCreateTime(DateUtils.getNowDate()); projectOrderInfo.setCreateTime(DateUtils.getNowDate());
projectOrderInfo.setCreateBy(ShiroUtils.getUserId().toString()); projectOrderInfo.setCreateBy(ShiroUtils.getUserId().toString());
saveProductInfo(projectOrderInfo, projectOrderInfo.getProjectId()); saveProductInfo(projectOrderInfo, projectOrderInfo.getProjectId());
List<ProjectProductInfo> projectProductInfos = productInfoService.selectProjectProductInfoListByProjectId(Collections.singletonList(projectOrderInfo.getProjectId()));
BigDecimal bigDecimal = projectProductInfos.stream().map(ProjectProductInfo::getAllPrice).filter(Objects::nonNull).reduce(BigDecimal::add).get();
projectOrderInfo.setShipmentAmount(bigDecimal);
List<ProjectOrderFileLog> contractFileList = projectOrderInfo.getContractFileList(); List<ProjectOrderFileLog> contractFileList = projectOrderInfo.getContractFileList();
int i = projectOrderInfoMapper.insertProjectOrderInfo(projectOrderInfo); int i = projectOrderInfoMapper.insertProjectOrderInfo(projectOrderInfo);
if (CollUtil.isNotEmpty(contractFileList)) { if (CollUtil.isNotEmpty(contractFileList)) {
@ -135,6 +138,15 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService {
return i; return i;
} }
/**
*
* @param projectOrderInfo
* @param projectId
* @author ch
* @date 2025/06/26 11:10
*/
private void saveProductInfo(ProjectOrderInfo projectOrderInfo, Long projectId) { private void saveProductInfo(ProjectOrderInfo projectOrderInfo, Long projectId) {
//插入产品信息 //插入产品信息
List<ProjectProductInfo> projectProductInfoList = projectOrderInfo.getHardwareProjectProductInfoList(); List<ProjectProductInfo> projectProductInfoList = projectOrderInfo.getHardwareProjectProductInfoList();
@ -193,7 +205,7 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService {
*/ */
@Override @Override
public int updateProjectOrderInfo(ProjectOrderInfo projectOrderInfo) { public int updateProjectOrderInfo(ProjectOrderInfo projectOrderInfo) {
ProjectOrderInfo existProjectOrderInfo = projectOrderInfoMapper.selectProjectOrderInfoById(projectOrderInfo.getId()); // ProjectOrderInfo existProjectOrderInfo = projectOrderInfoMapper.selectProjectOrderInfoById(projectOrderInfo.getId());
// if (!existProjectOrderInfo.getAgentName().equals(projectOrderInfo.getAgentName())) { // if (!existProjectOrderInfo.getAgentName().equals(projectOrderInfo.getAgentName())) {
// String orderNumber = generateOrderNumber(projectOrderInfo.getProjectId()); // String orderNumber = generateOrderNumber(projectOrderInfo.getProjectId());
// projectOrderInfo.setOrderCode(orderNumber); // projectOrderInfo.setOrderCode(orderNumber);
@ -203,6 +215,9 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService {
projectOrderInfo.setUpdateBy(ShiroUtils.getUserId().toString()); projectOrderInfo.setUpdateBy(ShiroUtils.getUserId().toString());
projectOrderInfo.setUpdateTime(DateUtils.getNowDate()); projectOrderInfo.setUpdateTime(DateUtils.getNowDate());
saveProductInfo(projectOrderInfo, projectOrderInfo.getProjectId()); saveProductInfo(projectOrderInfo, projectOrderInfo.getProjectId());
List<ProjectProductInfo> projectProductInfos = productInfoService.selectProjectProductInfoListByProjectId(Collections.singletonList(projectOrderInfo.getProjectId()));
BigDecimal bigDecimal = projectProductInfos.stream().map(ProjectProductInfo::getAllPrice).filter(Objects::nonNull).reduce(BigDecimal::add).get();
projectOrderInfo.setShipmentAmount(bigDecimal);
return projectOrderInfoMapper.updateProjectOrderInfo(projectOrderInfo); return projectOrderInfoMapper.updateProjectOrderInfo(projectOrderInfo);
} }