pull/3/head
siontion 9 months ago
commit 1eee2a8568

@ -46,7 +46,6 @@ public class DeliverOrderSaveReqVO {
private String deliverPersonMobile;
@Schema(description = "发货方式", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "发货方式不能为空")
private String deliverMode;
@Schema(description = "收货人电话", requiredMode = Schema.RequiredMode.REQUIRED)

@ -62,6 +62,10 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
@Override
@Transactional(rollbackFor = Exception.class)
public Long createDeliverOrder(DeliverOrderSaveReqVO createReqVO) {
// 超额校验
overageDeliverValidate(createReqVO.getSaleOrderIds(), createReqVO.getDeliverOrderSubs());
// 插入
DeliverOrderDO deliverOrder = BeanUtils.toBean(createReqVO, DeliverOrderDO.class);
// 月度流水号
@ -100,15 +104,31 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
if(!oldDO.canOperate(operateTypeEnum)){
throw exception(INVALID_OPERATE);
}
// 校验数据 不容许超额发货
if(operateTypeEnum == OperateTypeEnum.DELIVER){
List<DeliverOrderSubDO> thisTimeSubs = updateReqVO.getDeliverOrderSubs();
// 超额校验
overageDeliverValidate(updateReqVO.getSaleOrderIds(), updateReqVO.getDeliverOrderSubs());
// 更新
DeliverOrderDO updateObj = BeanUtils.toBean(updateReqVO, DeliverOrderDO.class);
updateObj.setDeliverStatus(DeliverOrderStatusEnum.valueOf(updateReqVO.getActive()).getCode());
deliverOrderMapper.updateById(updateObj);
updateReqVO.setDeliverStatus(updateObj.getDeliverStatus());
// 更新子表
updateDeliverOrderSubList(updateReqVO.getId(), updateReqVO.getDeliverOrderSubs(), updateReqVO.getDeliverOrderOtherSubs());
if(updateObj.getDeliverStatus().intValue() == DeliverOrderStatusEnum.DELIVER.getCode()) {
crossOrderManager.refreshProjectOrderDeliverStatus(updateReqVO.getSaleOrderIds().split(","));
crossOrderManager.generateStockOutOrder(updateReqVO);
}
}
private void overageDeliverValidate(String saleOrderIds, List<DeliverOrderSubDO> thisTimeSubs) {
List<DeliverOrderSubDO> thisTimeRelaSubList = thisTimeSubs.stream().filter(deliverOrderSubDO -> deliverOrderSubDO.getSaleOrderSubId() != null).collect(Collectors.toList());
if(!thisTimeRelaSubList.isEmpty()){
// 锁定订单
LambdaQueryWrapper<ProjectOrderDO> projectQuery = new LambdaQueryWrapper<>();
projectQuery.in(ProjectOrderDO::getId, updateReqVO.getSaleOrderIds().split(",")).last("FOR UPDATE");
projectQuery.in(ProjectOrderDO::getId, saleOrderIds.split(",")).last("FOR UPDATE");
List<ProjectOrderDO> projectOrderDOList = projectOrderMapper.selectList(projectQuery);
// 状态判断 已发货不容许操作
@ -146,22 +166,6 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
}
}
// 更新
DeliverOrderDO updateObj = BeanUtils.toBean(updateReqVO, DeliverOrderDO.class);
updateObj.setDeliverStatus(DeliverOrderStatusEnum.valueOf(updateReqVO.getActive()).getCode());
deliverOrderMapper.updateById(updateObj);
updateReqVO.setDeliverStatus(updateObj.getDeliverStatus());
// 更新子表
updateDeliverOrderSubList(updateReqVO.getId(), updateReqVO.getDeliverOrderSubs(), updateReqVO.getDeliverOrderOtherSubs());
if(updateObj.getDeliverStatus().intValue() == DeliverOrderStatusEnum.DELIVER.getCode()) {
crossOrderManager.refreshProjectOrderDeliverStatus(updateReqVO.getSaleOrderIds().split(","));
crossOrderManager.generateStockOutOrder(updateReqVO);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteDeliverOrder(Long id) {

@ -86,7 +86,7 @@
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="发货方式" >
<el-form-item label="发货方式" prop="deliverMode">
<el-select :disabled="detailDisabled" v-model="formData.deliverMode" placeholder="请选择发货方式" class="!w-250px">
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.HELI_DELIVER_MODE)" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
@ -456,7 +456,6 @@ const formRules = reactive({
deliverStatus: [{ required: true, message: '发货单状态不能为空', trigger: 'blur' }],
deliverPerson: [{ required: true, message: '发货人不能为空', trigger: 'blur' }],
deliverPersonMobile: [{ required: true, message: '发货人电话不能为空', trigger: 'blur' }],
deliverMode: [{ required: true, message: '发货方式不能为空', trigger: 'change' }],
receivePersonMobile: [{ required: true, message: '收货人电话不能为空', trigger: 'blur' }],
receivePersonName: [{ required: true, message: '收货人姓名不能为空', trigger: 'blur' }],
receiveAddress: [{ required: true, message: '收货详细地址不能为空', trigger: 'blur' }]

@ -7,7 +7,7 @@
<tr>
<td colspan="2">
<div style="width: 100px; text-align: center">
<img src="/src/assets/imgs/exlogo.png" style="width: 100%" alt="" />
<img :src="logoDataUrl" style="width: 100%" alt="" />
</div>
</td>
<td colspan="6">
@ -72,10 +72,7 @@
<div style="display: flex; justify-content: space-between">
<div style="width: 100%; font-size: 12px; display: flex; flex-direction: column">
<div style="text-align: left; width: 100; margin-left: 10px">自客户提供资料</div>
<div
id="fruitForm"
style="display: flex; justify-content: flex-start; align-items: center"
>
<div id="fruitForm" style="display: flex; justify-content: flex-start; align-items: center">
<span class="checkbox" v-if="isSelected.includes(1) == false"></span>
<span class="checkbox" v-else-if="isSelected.includes(1) == true"></span>
<label for="checkbox1">修理内容</label>
@ -104,9 +101,11 @@
</tr>
<tbody>
<tr
><td colspan="10"> <div style="text-align: left; width: 100%">子项目信息:</div></td></tr
>
<tr>
<td colspan="10">
<div style="text-align: left; width: 100%">子项目信息:</div>
</td>
</tr>
<tr>
<td class="xh"> 序号 </td>
<td colspan="3"> 名称/编号 </td>
@ -163,22 +162,16 @@
<tbody>
<tr>
<td colspan="10">
<div
style="
<div style="
text-align: left;
width: 100%;
display: flex;
flex-direction: column;
padding-left: 15px;
"
>
">
<span>说明:</span>
<span
>1.每个项目的零部件制作工艺材料材质硬度要求必须统一出现任何问题各工程师负责!</span
>
<span
>2.模具调试试模需要根据客户要求自己安排调试我司根据需要安排人员参与配合</span
>
<span>1.每个项目的零部件制作工艺材料材质硬度要求必须统一出现任何问题各工程师负责!</span>
<span>2.模具调试试模需要根据客户要求自己安排调试我司根据需要安排人员参与配合</span>
</div>
</td>
</tr>
@ -211,7 +204,7 @@
<tr>
<td colspan="2">
<div style="width: 100px; text-align: center">
<img src="/src/assets/imgs/exlogo.png" style="width: 100%" alt="" />
<img :src="logoDataUrl" style="width: 100%" alt="" />
</div>
</td>
<td colspan="6">
@ -264,9 +257,11 @@
</tr>
<tbody>
<tr
><td colspan="10"> <div style="text-align: left; width: 100%">子项目信息:</div></td></tr
>
<tr>
<td colspan="10">
<div style="text-align: left; width: 100%">子项目信息:</div>
</td>
</tr>
<tr>
<td class="xh"> 序号 </td>
<td colspan="3"> 名称/编号 </td>
@ -306,22 +301,16 @@
<tbody>
<tr>
<td colspan="10">
<div
style="
<div style="
text-align: left;
width: 100%;
display: flex;
flex-direction: column;
padding-left: 15px;
"
>
">
<span>说明:</span>
<span
>1.每个项目的零部件制作工艺材料材质硬度要求必须统一出现任何问题各工程师负责!</span
>
<span
>2.模具调试试模需要根据客户要求自己安排调试我司根据需要安排人员参与配合</span
>
<span>1.每个项目的零部件制作工艺材料材质硬度要求必须统一出现任何问题各工程师负责!</span>
<span>2.模具调试试模需要根据客户要求自己安排调试我司根据需要安排人员参与配合</span>
</div>
</td>
</tr>
@ -358,6 +347,8 @@
<script setup lang="ts">
// import { ref, reactive } from 'vue'
import { Check } from '@element-plus/icons-vue'
import urlimg from '@/assets/imgs/exlogo.png'
const logoDataUrl = ref('') // LogoBase64URL
const dialogVisible = ref(false) //
const formData = ref({
@ -495,6 +486,19 @@ const isSelected = ref([1, 3])
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
//
// LogoBase64URL
const logoImage = new Image()
logoImage.src = urlimg // Logo
logoImage.onload = () => {
const canvas = document.createElement('canvas')
canvas.width = logoImage.width
canvas.height = logoImage.height
const context = canvas.getContext('2d')
context.drawImage(logoImage, 0, 0)
const base64String = canvas.toDataURL('image/png')
logoDataUrl.value = base64String
}
}
defineExpose({ open }) // open
</script>

@ -170,6 +170,9 @@ import { betweenDay, dateFormatter, formatDate } from '@/utils/formatTime'
import { Check } from '@element-plus/icons-vue'
import { getCustomer } from '@/api/heli/customer'
import { getOperateLogPage } from '@/api/system/operatelog'
import urlimg from '@/assets/imgs/exlogo.png'
const logoDataUrl = ref('') // LogoBase64URL
const dialogVisible = ref(false) //
const onPrint = () => {
@ -314,6 +317,20 @@ const formData = ref({
})
/** 打开弹窗 */
const open = async (id: number) => {
//
// LogoBase64URL
const logoImage = new Image()
logoImage.src = urlimg // Logo
logoImage.onload = () => {
const canvas = document.createElement('canvas')
canvas.width = logoImage.width
canvas.height = logoImage.height
const context = canvas.getContext('2d')
context.drawImage(logoImage, 0, 0)
const base64String = canvas.toDataURL('image/png')
logoDataUrl.value = base64String
}
dialogVisible.value = true
resetForm()
formData.value = await ProjectOrderApi.getProjectOrder(id)
@ -390,22 +407,7 @@ const resetForm = () => {
}
}
const logoDataUrl = ref('') // LogoBase64URL
onMounted(() => {
// LogoBase64URL
const logoImage = new Image()
logoImage.onload = () => {
const canvas = document.createElement('canvas')
canvas.width = logoImage.width
canvas.height = logoImage.height
const context = canvas.getContext('2d')
context.drawImage(logoImage, 0, 0)
const base64String = canvas.toDataURL('image/png')
logoDataUrl.value = base64String
}
logoImage.src = '/src/assets/imgs/exlogo.png' // Logo
})
onMounted(() => {})
</script>
<style scoped lang="scss">

@ -66,3 +66,5 @@ CREATE TABLE `pro_process_design_progress` (
`tenant_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '租户编号',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB COMMENT='工艺设计进度表';
ALTER TABLE project_deliver_order MODIFY COLUMN `deliver_mode` CHAR ( 1 ) COMMENT '发货方式';

Loading…
Cancel
Save