应收管理界面调整

This commit is contained in:
z 2025-01-14 15:27:15 +08:00
parent 14a2416c28
commit 708dcd1acd
7 changed files with 148 additions and 109 deletions

View File

@ -1,5 +1,6 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.projectorder; package com.chanko.yunxi.mes.module.heli.controller.admin.projectorder;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam; import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
@ -9,10 +10,13 @@ import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog;
import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum; import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum;
import com.chanko.yunxi.mes.framework.operatelog.core.service.OperateLogFrameworkService; import com.chanko.yunxi.mes.framework.operatelog.core.service.OperateLogFrameworkService;
import com.chanko.yunxi.mes.module.heli.controller.admin.projectorder.vo.*; import com.chanko.yunxi.mes.module.heli.controller.admin.projectorder.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.orderys.OrderYsDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.orderys.OrderYsMapper;
import com.chanko.yunxi.mes.module.heli.enums.BusinesTypeEnum; import com.chanko.yunxi.mes.module.heli.enums.BusinesTypeEnum;
import com.chanko.yunxi.mes.module.heli.manager.CrossOrderManager; import com.chanko.yunxi.mes.module.heli.manager.CrossOrderManager;
import com.chanko.yunxi.mes.module.heli.service.orderys.OrderYsService;
import com.chanko.yunxi.mes.module.heli.service.projectorder.ProjectOrderService; import com.chanko.yunxi.mes.module.heli.service.projectorder.ProjectOrderService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
@ -50,7 +54,8 @@ public class ProjectOrderController {
@Resource @Resource
private CrossOrderManager crossOrderManager; private CrossOrderManager crossOrderManager;
@Resource
private OrderYsService orderYsService;
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建项目订单") @Operation(summary = "创建项目订单")
@PreAuthorize("@ss.hasPermission('heli:project-order:create')") @PreAuthorize("@ss.hasPermission('heli:project-order:create')")
@ -86,11 +91,14 @@ public class ProjectOrderController {
// 批准终止记录快照 // 批准终止记录快照
switch (OperateTypeEnum.valueOf(operateReqVO.getActive())){ switch (OperateTypeEnum.valueOf(operateReqVO.getActive())){
case APPROVE: case APPROVE:
//订单批准时创建或者更新应收记录数据
orderYsService.createOrUpdate(operateReqVO);
// 订单批准时创建或者更新生产计划数据 // 订单批准时创建或者更新生产计划数据
crossOrderManager.generatePlan(operateReqVO.getId()); crossOrderManager.generatePlan(operateReqVO.getId());
projectOrderService.createProjectOrderSnapshot(operateReqVO); projectOrderService.createProjectOrderSnapshot(operateReqVO);
break; break;
case TERMINATE: case TERMINATE:
orderYsService.delete(operateReqVO);
// 订单终止时更新生产计划状态 // 订单终止时更新生产计划状态
crossOrderManager.updatePlanStatusToTerminate(operateReqVO.getId()); crossOrderManager.updatePlanStatusToTerminate(operateReqVO.getId());
projectOrderService.createProjectOrderSnapshot(operateReqVO); projectOrderService.createProjectOrderSnapshot(operateReqVO);

View File

@ -3,6 +3,7 @@ package com.chanko.yunxi.mes.module.heli.service.orderys;
import java.util.*; import java.util.*;
import javax.validation.*; import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.orderys.vo.*; import com.chanko.yunxi.mes.module.heli.controller.admin.orderys.vo.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.projectorder.vo.ProjectOrderSaveReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.orderys.OrderYsDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.orderys.OrderYsDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam; import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
@ -52,4 +53,7 @@ public interface OrderYsService {
*/ */
PageResult<OrderYsDO> getOrderYsPage(OrderYsPageReqVO pageReqVO); PageResult<OrderYsDO> getOrderYsPage(OrderYsPageReqVO pageReqVO);
void createOrUpdate(ProjectOrderSaveReqVO operateReqVO);
void delete(ProjectOrderSaveReqVO operateReqVO);
} }

View File

@ -1,10 +1,16 @@
package com.chanko.yunxi.mes.module.heli.service.orderys; package com.chanko.yunxi.mes.module.heli.service.orderys;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.chanko.yunxi.mes.module.heli.controller.admin.projectorder.vo.ProjectOrderSaveReqVO;
import com.chanko.yunxi.mes.module.heli.service.customer.CustomerService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.orderys.vo.*; import com.chanko.yunxi.mes.module.heli.controller.admin.orderys.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.orderys.OrderYsDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.orderys.OrderYsDO;
@ -28,6 +34,8 @@ public class OrderYsServiceImpl implements OrderYsService {
@Resource @Resource
private OrderYsMapper orderYsMapper; private OrderYsMapper orderYsMapper;
@Resource
private CustomerService customerService;
@Override @Override
public Integer createOrderYs(OrderYsSaveReqVO createReqVO) { public Integer createOrderYs(OrderYsSaveReqVO createReqVO) {
@ -74,4 +82,42 @@ public class OrderYsServiceImpl implements OrderYsService {
return orderYsMapper.selectPage(pageReqVO); return orderYsMapper.selectPage(pageReqVO);
} }
@Override
public void createOrUpdate(ProjectOrderSaveReqVO operateReqVO) {
if (operateReqVO.getHasPrice().equals(1)){
OrderYsDO orderYsDO = new OrderYsDO();
orderYsDO.setCode(operateReqVO.getCode());
orderYsDO.setProjectName(operateReqVO.getProjectName());
orderYsDO.setCgTime(LocalDateTime.now());
orderYsDO.setCgKhname(customerService.getCustomer(operateReqVO.getCustomerId()).getName());
if(operateReqVO.getPrice()==null){
orderYsDO.setCgYs(new BigDecimal(0));
}else {
orderYsDO.setCgYs(operateReqVO.getPrice());
LocalDateTime[] paymentTimes = {
operateReqVO.getSixFuKuanTime(),
operateReqVO.getFiveFuKuanTime(),
operateReqVO.getFourFuKuanTime(),
operateReqVO.getThreeFuKuanTime(),
operateReqVO.getTwoFuKuanTime(),
operateReqVO.getShouFuKuanTime()
};
for (LocalDateTime paymentTime : paymentTimes) {
if (!ObjectUtil.isEmpty(paymentTime)) {
orderYsDO.setPaymentDate(paymentTime);
break;
}
}
}
orderYsMapper.insert(orderYsDO);
}
}
@Override
public void delete(ProjectOrderSaveReqVO operateReqVO) {
LambdaQueryWrapper<OrderYsDO> eq = new LambdaQueryWrapper<OrderYsDO>().eq(OrderYsDO::getCode, operateReqVO.getCode());
orderYsMapper.delete(eq);
}
} }

View File

@ -191,6 +191,48 @@ public class ProjectOrderServiceImpl implements ProjectOrderService {
// throw exception(INVALID_OPERATE); // throw exception(INVALID_OPERATE);
// } // }
// 更新 // 更新
LambdaQueryWrapper<OrderYsDO> eq = new LambdaQueryWrapper<OrderYsDO>().eq(OrderYsDO::getCode, updateReqVO.getCode());
OrderYsDO orderYsDO = orderYsMapper.selectOne(eq);
if (ObjectUtil.isEmpty(orderYsDO)){
orderYsDO = new OrderYsDO();
orderYsDO.setCode(updateReqVO.getCode());
orderYsDO.setProjectName(updateReqVO.getProjectName());
orderYsDO.setCgTime(LocalDateTime.now());
orderYsDO.setCgYs(updateReqVO.getPrice());
LocalDateTime[] paymentTimes = {
updateReqVO.getSixFuKuanTime(),
updateReqVO.getFiveFuKuanTime(),
updateReqVO.getFourFuKuanTime(),
updateReqVO.getThreeFuKuanTime(),
updateReqVO.getTwoFuKuanTime(),
updateReqVO.getShouFuKuanTime()
};
for (LocalDateTime paymentTime : paymentTimes) {
if (!ObjectUtil.isEmpty(paymentTime)) {
orderYsDO.setPaymentDate(paymentTime);
break;
}
}
orderYsMapper.insert(orderYsDO);
}else {
orderYsDO.setCgYs(updateReqVO.getPrice());
LocalDateTime[] paymentTimes = {
updateReqVO.getSixFuKuanTime(),
updateReqVO.getFiveFuKuanTime(),
updateReqVO.getFourFuKuanTime(),
updateReqVO.getThreeFuKuanTime(),
updateReqVO.getTwoFuKuanTime(),
updateReqVO.getShouFuKuanTime()
};
for (LocalDateTime paymentTime : paymentTimes) {
if (!ObjectUtil.isEmpty(paymentTime)) {
orderYsDO.setPaymentDate(paymentTime);
break;
}
}
orderYsMapper.updateById(orderYsDO);
}
ProjectOrderDO updateObj = BeanUtils.toBean(updateReqVO, ProjectOrderDO.class); ProjectOrderDO updateObj = BeanUtils.toBean(updateReqVO, ProjectOrderDO.class);
projectOrderMapper.updateById(updateObj); projectOrderMapper.updateById(updateObj);
} }
@ -388,16 +430,10 @@ public class ProjectOrderServiceImpl implements ProjectOrderService {
public void operateProjectOrder(ProjectOrderSaveReqVO operateReqVO) { public void operateProjectOrder(ProjectOrderSaveReqVO operateReqVO) {
if(operateReqVO.getId() == null){ if(operateReqVO.getId() == null){
createProjectOrder(operateReqVO); createProjectOrder(operateReqVO);
OrderYsDO orderYsDO = new OrderYsDO();
orderYsDO.setCode(operateReqVO.getCode());
orderYsDO.setProjectName(operateReqVO.getProjectName());
orderYsDO.setCgTime(LocalDateTime.now());
orderYsDO.setCgKhname(customerService.getCustomer(operateReqVO.getCustomerId()).getName());
if(operateReqVO.getHasPrice().equals(1)&&(operateReqVO.getPrice()==null)){ if(operateReqVO.getHasPrice().equals(1)&&(operateReqVO.getPrice()==null)){
//订单有价格但是没录价格 //订单有价格但是没录价格
String nickname = userApi.getUser( SecurityFrameworkUtils.getLoginUser().getId()).getNickname(); String nickname = userApi.getUser( SecurityFrameworkUtils.getLoginUser().getId()).getNickname();
orderYsDO.setCgYs(new BigDecimal(0));
List<AttentiontodoDO> attentiontodook = attentiontodoService.getAttentiontodolist(1);//查找该类型的待办和关注人 List<AttentiontodoDO> attentiontodook = attentiontodoService.getAttentiontodolist(1);//查找该类型的待办和关注人
AttentiontodoDO attentiontodoDO = attentiontodook.get(0); AttentiontodoDO attentiontodoDO = attentiontodook.get(0);
@ -464,33 +500,12 @@ public class ProjectOrderServiceImpl implements ProjectOrderService {
BdgzsomthingDO.setAttr3(operateReqVO.getId().toString());//获取数据当前表的id BdgzsomthingDO.setAttr3(operateReqVO.getId().toString());//获取数据当前表的id
// BdgzsomthingDO.setShowname(operateReqVO.getCreateTime());//获取数据当前表的创建事件 // BdgzsomthingDO.setShowname(operateReqVO.getCreateTime());//获取数据当前表的创建事件
bdgzsomthingMapper.insert(BdgzsomthingDO); bdgzsomthingMapper.insert(BdgzsomthingDO);
// } // }
} }
} }
}else {
orderYsDO.setCgYs(operateReqVO.getPrice());
LocalDateTime[] paymentTimes = {
operateReqVO.getSixFuKuanTime(),
operateReqVO.getFiveFuKuanTime(),
operateReqVO.getFourFuKuanTime(),
operateReqVO.getThreeFuKuanTime(),
operateReqVO.getTwoFuKuanTime(),
operateReqVO.getShouFuKuanTime()
};
for (LocalDateTime paymentTime : paymentTimes) {
if (!ObjectUtil.isEmpty(paymentTime)) {
orderYsDO.setPaymentDate(paymentTime);
break;
}
}
} }
orderYsMapper.insert(orderYsDO);
}else{ }else{
if ("PRICE".equals(operateReqVO.getActive())){ if ("PRICE".equals(operateReqVO.getActive())){
updateProjectOrderPrice(operateReqVO); updateProjectOrderPrice(operateReqVO);
@ -498,79 +513,15 @@ public class ProjectOrderServiceImpl implements ProjectOrderService {
updateProjectOrder(operateReqVO); updateProjectOrder(operateReqVO);
} }
if(operateReqVO.getHasPrice().equals(1)&&(operateReqVO.getPrice()==null)){ if(operateReqVO.getHasPrice().equals(1)&&(operateReqVO.getPrice()==null)){
LambdaQueryWrapper<OrderYsDO> eq = new LambdaQueryWrapper<OrderYsDO>().eq(OrderYsDO::getCode, operateReqVO.getCode());
OrderYsDO orderYsDO = orderYsMapper.selectOne(eq);
if (ObjectUtil.isEmpty(orderYsDO)) {
orderYsDO = new OrderYsDO();
orderYsDO.setCode(operateReqVO.getCode());
orderYsDO.setProjectName(operateReqVO.getProjectName());
orderYsDO.setCgTime(LocalDateTime.now());
orderYsDO.setCgYs(new BigDecimal(0));
LocalDateTime[] paymentTimes = {
operateReqVO.getSixFuKuanTime(),
operateReqVO.getFiveFuKuanTime(),
operateReqVO.getFourFuKuanTime(),
operateReqVO.getThreeFuKuanTime(),
operateReqVO.getTwoFuKuanTime(),
operateReqVO.getShouFuKuanTime()
};
for (LocalDateTime paymentTime : paymentTimes) {
if (!ObjectUtil.isEmpty(paymentTime)) {
orderYsDO.setPaymentDate(paymentTime);
break;
}
}
orderYsMapper.insert(orderYsDO);
}
}else{ }else{
bdgzsomthingDO abc= new bdgzsomthingDO(); bdgzsomthingDO abc= new bdgzsomthingDO();
abc.setThingname("订单有价格"); abc.setThingname("订单有价格");
abc.setAttr12("0"); abc.setAttr12("0");
abc.setAttr3(operateReqVO.getId().toString()); abc.setAttr3(operateReqVO.getId().toString());
bdgzsomthingMapper.updateok(abc); bdgzsomthingMapper.updateok(abc);
LambdaQueryWrapper<OrderYsDO> eq = new LambdaQueryWrapper<OrderYsDO>().eq(OrderYsDO::getCode, operateReqVO.getCode());
OrderYsDO orderYsDO = orderYsMapper.selectOne(eq);
if (ObjectUtil.isEmpty(orderYsDO)){
orderYsDO = new OrderYsDO();
orderYsDO.setCode(operateReqVO.getCode());
orderYsDO.setProjectName(operateReqVO.getProjectName());
orderYsDO.setCgTime(LocalDateTime.now());
orderYsDO.setCgYs(operateReqVO.getPrice());
LocalDateTime[] paymentTimes = {
operateReqVO.getSixFuKuanTime(),
operateReqVO.getFiveFuKuanTime(),
operateReqVO.getFourFuKuanTime(),
operateReqVO.getThreeFuKuanTime(),
operateReqVO.getTwoFuKuanTime(),
operateReqVO.getShouFuKuanTime()
};
for (LocalDateTime paymentTime : paymentTimes) {
if (!ObjectUtil.isEmpty(paymentTime)) {
orderYsDO.setPaymentDate(paymentTime);
break;
}
}
orderYsMapper.insert(orderYsDO);
}else {
orderYsDO.setCgYs(operateReqVO.getPrice());
LocalDateTime[] paymentTimes = {
operateReqVO.getSixFuKuanTime(),
operateReqVO.getFiveFuKuanTime(),
operateReqVO.getFourFuKuanTime(),
operateReqVO.getThreeFuKuanTime(),
operateReqVO.getTwoFuKuanTime(),
operateReqVO.getShouFuKuanTime()
};
for (LocalDateTime paymentTime : paymentTimes) {
if (!ObjectUtil.isEmpty(paymentTime)) {
orderYsDO.setPaymentDate(paymentTime);
break;
}
}
orderYsMapper.updateById(orderYsDO);
}
} }
} }

View File

@ -73,6 +73,17 @@ export function formatDate(date: Date, format?: string): string {
} }
return dayjs(date).format(format) return dayjs(date).format(format)
} }
export function formatDate1(date: Date, format?: string): string {
// 日期不存在,则返回空
if (!date) {
return ''
}
// 日期存在,则进行格式化
if (format === undefined) {
format = 'YYYY-MM-DD'
}
return dayjs(date).format(format)
}
/** /**
* + * +
@ -206,7 +217,12 @@ export const dateFormatter = (row, column, cellValue): string => {
} }
return formatDate(cellValue) return formatDate(cellValue)
} }
export const dateFormatter1 = (row, column, cellValue): string => {
if (!cellValue) {
return ''
}
return formatDate1(cellValue)
}
/** /**
* element plus Formatter 使 YYYY-MM-DD * element plus Formatter 使 YYYY-MM-DD
* *

View File

@ -4,7 +4,7 @@
ref="formRef" ref="formRef"
:model="formData" :model="formData"
:rules="formRules" :rules="formRules"
label-width="100px" label-width="160px"
v-loading="formLoading" v-loading="formLoading"
> >
<el-form-item label="项目编号" prop="code"> <el-form-item label="项目编号" prop="code">
@ -31,7 +31,20 @@
<el-input v-model="formData.cgYishou" placeholder="请输入已收金额" /> <el-input v-model="formData.cgYishou" placeholder="请输入已收金额" />
</el-form-item> </el-form-item>
<el-form-item label="是否回款完成" prop="cgTypee" > <el-form-item label="是否回款完成" prop="cgTypee" >
<el-input v-model="formData.cgTypee" placeholder="请输入是否回款完成" disabled/> <el-select
v-model="formData.cgTypee"
placeholder="请选择"
clearable
class="!w-240px"
disabled
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_YINGFU_MONEY)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="rem"> <el-form-item label="备注" prop="rem">
<el-input v-model="formData.rem" placeholder="请输入备注" /> <el-input v-model="formData.rem" placeholder="请输入备注" />
@ -45,6 +58,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import * as OrderYsApi from '@/api/heli/orderys' import * as OrderYsApi from '@/api/heli/orderys'
import {DICT_TYPE, getIntDictOptions} from "@/utils/dict";
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //

View File

@ -86,32 +86,32 @@
<!-- 列表 --> <!-- 列表 -->
<ContentWrap> <ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="项目编号" align="center" prop="code" /> <el-table-column label="项目名称" align="center" prop="projectName" width="150"/>
<el-table-column label="项目名称" align="center" prop="projectName" />
<el-table-column <el-table-column
label="生成日期" label="生成日期"
align="center" align="center"
prop="cgTime" prop="cgTime"
:formatter="dateFormatter" :formatter="dateFormatter"
width="180px" width="250px"
/> />
<el-table-column label="客户名称" align="center" prop="cgKhname" /> <el-table-column label="客户名称" align="center" prop="cgKhname" width="200px"/>
<el-table-column <el-table-column
label="预计回款日期" label="预计回款日期"
align="center" align="center"
prop="cgTime" prop="paymentDate"
:formatter="dateFormatter" :formatter="dateFormatter1"
width="180px" width="200px"
/> />
<el-table-column label="应收金额" align="center" prop="cgYs" /> <el-table-column label="应收金额(元)" align="center" prop="cgYs" width="150"/>
<el-table-column label="已收金额" align="center" prop="cgYishou" /> <el-table-column label="已收金额(元)" align="center" prop="cgYishou" width="150"/>
<el-table-column label="是否回款完成" align="center" prop="cgTypee" width="150" > <el-table-column label="是否回款完成" align="center" prop="cgTypee" width="150" >
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_YINGFU_MONEY" :value="scope.row.cgTypee" /> <dict-tag :type="DICT_TYPE.HELI_YINGFU_MONEY" :value="scope.row.cgTypee" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="备注" align="center" prop="rem" /> <el-table-column label="项目编号" align="center" prop="code" width="180"/>
<el-table-column label="操作" align="center"> <el-table-column label="备注" align="center" prop="rem" width="120"/>
<el-table-column label="操作" align="center" width="180">
<template #default="scope"> <template #default="scope">
<el-button <el-button
link link
@ -146,7 +146,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime' import {dateFormatter, dateFormatter1} from '@/utils/formatTime'
import download from '@/utils/download' import download from '@/utils/download'
import * as OrderYsApi from '@/api/heli/orderys' import * as OrderYsApi from '@/api/heli/orderys'
import OrderYsForm from './OrderYsForm.vue' import OrderYsForm from './OrderYsForm.vue'