【需求开发】发货单基础框架提交

pull/2/head
zengchenxi 9 months ago
parent e4c579de67
commit 6cf7f19779

@ -11,7 +11,9 @@ import lombok.Getter;
public enum BusinesTypeEnum { public enum BusinesTypeEnum {
PROJECT_ORDER("销售订单"), PROJECT_ORDER("销售订单"),
PROJECT_ORDER_SNAPSHOT("销售订单快照"); PROJECT_ORDER_SNAPSHOT("销售订单快照"),
DELIVER_ORDER("发货订单"),
;
private String description; private String description;

@ -0,0 +1,23 @@
package com.chanko.yunxi.mes.module.heli.enums;
import lombok.Getter;
/**
*
* @author chenxi
* @date 2024-01-26 12:38
*/
@Getter
public enum DeliverOrderStatusEnum {
DEFAULT(1, "已保存"),
FINISHED(2, "已发货");
private int code;
private String description;
DeliverOrderStatusEnum(int code, String description) {
this.code = code;
this.description = description;
}
}

@ -15,6 +15,7 @@ import com.chanko.yunxi.mes.framework.common.exception.ErrorCode;
* 002 * 002
* 003 * 003
* 004 * 004
* 005
* 3 * 3
*/ */
public interface ErrorCodeConstants { public interface ErrorCodeConstants {
@ -47,4 +48,7 @@ public interface ErrorCodeConstants {
/************订单管理***********/ /************订单管理***********/
ErrorCode PROJECT_ORDER_NOT_EXISTS = new ErrorCode(1_004_001, "项目订单不存在"); ErrorCode PROJECT_ORDER_NOT_EXISTS = new ErrorCode(1_004_001, "项目订单不存在");
/************发货管理***********/
ErrorCode DELIVER_ORDER_NOT_EXISTS = new ErrorCode(1_005_001, "发货订单不存在");
} }

@ -0,0 +1,106 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
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.CommonResult;
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success;
import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils;
import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog;
import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverordersub.DeliverOrderSubDO;
import com.chanko.yunxi.mes.module.heli.service.deliverorder.DeliverOrderService;
@Tag(name = "管理后台 - 发货订单")
@RestController
@RequestMapping("/heli/deliver-order")
@Validated
public class DeliverOrderController {
@Resource
private DeliverOrderService deliverOrderService;
@PostMapping("/create")
@Operation(summary = "创建发货订单")
@PreAuthorize("@ss.hasPermission('heli:deliver-order:create')")
public CommonResult<Long> createDeliverOrder(@Valid @RequestBody DeliverOrderSaveReqVO createReqVO) {
return success(deliverOrderService.createDeliverOrder(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新发货订单")
@PreAuthorize("@ss.hasPermission('heli:deliver-order:update')")
public CommonResult<Boolean> updateDeliverOrder(@Valid @RequestBody DeliverOrderSaveReqVO updateReqVO) {
deliverOrderService.updateDeliverOrder(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除发货订单")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('heli:deliver-order:delete')")
public CommonResult<Boolean> deleteDeliverOrder(@RequestParam("id") Long id) {
deliverOrderService.deleteDeliverOrder(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得发货订单")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('heli:deliver-order:query')")
public CommonResult<DeliverOrderRespVO> getDeliverOrder(@RequestParam("id") Long id) {
DeliverOrderDO deliverOrder = deliverOrderService.getDeliverOrder(id);
return success(BeanUtils.toBean(deliverOrder, DeliverOrderRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得发货订单分页")
@PreAuthorize("@ss.hasPermission('heli:deliver-order:query')")
public CommonResult<PageResult<DeliverOrderRespVO>> getDeliverOrderPage(@Valid DeliverOrderPageReqVO pageReqVO) {
PageResult<DeliverOrderDO> pageResult = deliverOrderService.getDeliverOrderPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, DeliverOrderRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出发货订单 Excel")
@PreAuthorize("@ss.hasPermission('heli:deliver-order:export')")
@OperateLog(type = EXPORT)
public void exportDeliverOrderExcel(@Valid DeliverOrderPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<DeliverOrderDO> list = deliverOrderService.getDeliverOrderPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "发货订单.xls", "数据", DeliverOrderRespVO.class,
BeanUtils.toBean(list, DeliverOrderRespVO.class));
}
// ==================== 子表(发货订单子项) ====================
@GetMapping("/deliver-order-sub/list-by-delivery-order-id")
@Operation(summary = "获得发货订单子项列表")
@Parameter(name = "deliveryOrderId", description = "订单id")
@PreAuthorize("@ss.hasPermission('heli:deliver-order:query')")
public CommonResult<List<DeliverOrderSubDO>> getDeliverOrderSubListByDeliveryOrderId(@RequestParam("deliveryOrderId") Long deliveryOrderId) {
return success(deliverOrderService.getDeliverOrderSubListByDeliveryOrderId(deliveryOrderId));
}
}

@ -0,0 +1,86 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.chanko.yunxi.mes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 发货订单分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DeliverOrderPageReqVO extends PageParam {
@Schema(description = "编号,唯一")
private String code;
@Schema(description = "销售订单id列表 多个用英文逗号分割")
private String saleOrderIds;
@Schema(description = "项目销售订单编号")
private String saleOrderCode;
@Schema(description = "客户id", example = "22885")
private Long customerId;
@Schema(description = "客户名称")
private String customerName;
@Schema(description = "发货日期")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] deliverDate;
@Schema(description = "发货单状态 已保存/已发货", example = "1")
private Integer deliverStatus;
@Schema(description = "发货人")
private Long deliverPerson;
@Schema(description = "发货人电话")
private String deliverPersonMobile;
@Schema(description = "发货方式")
private String deliverMode;
@Schema(description = "收货人电话")
private String receivePersonMobile;
@Schema(description = "司机姓名", example = "王五")
private String transportDriverName;
@Schema(description = "司机电话")
private String transportDriverMobile;
@Schema(description = "车牌号")
private String transportBusNumber;
@Schema(description = "重量(T)")
private String transportWeight;
@Schema(description = "位置(米)")
private String transportSize;
@Schema(description = "备注", example = "随便")
private String remark;
@Schema(description = "状态,1表示正常2表示禁用", example = "1")
private Integer status;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "收货人姓名", example = "张三")
private String receivePersonName;
@Schema(description = "收货详细地址")
private String receiveAddress;
@Schema(description = "模具名称")
private String mouldName;
}

@ -0,0 +1,121 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
import com.chanko.yunxi.mes.framework.excel.core.annotations.DictFormat;
import com.chanko.yunxi.mes.framework.excel.core.convert.DictConvert;
@Schema(description = "管理后台 - 发货订单 Response VO")
@Data
@ExcelIgnoreUnannotated
public class DeliverOrderRespVO {
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "21429")
@ExcelProperty("自增字段,唯一")
private Long id;
@Schema(description = "编号,唯一", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("编号,唯一")
private String code;
@Schema(description = "销售订单id列表 多个用英文逗号分割", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("销售订单id列表 多个用英文逗号分割")
private String saleOrderIds;
@Schema(description = "客户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "22885")
@ExcelProperty("客户id")
private Long customerId;
@Schema(description = "发货日期", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("发货日期")
private LocalDateTime deliverDate;
@Schema(description = "发货单状态 已保存/已发货", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty(value = "发货单状态 已保存/已发货", converter = DictConvert.class)
@DictFormat("heli_deliver_order_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private Integer deliverStatus;
@Schema(description = "发货人", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("发货人")
private Long deliverPerson;
@Schema(description = "发货人电话", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("发货人电话")
private String deliverPersonMobile;
@Schema(description = "发货方式", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty(value = "发货方式", converter = DictConvert.class)
@DictFormat("heli_deliver_mode") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private String deliverMode;
@Schema(description = "收货人电话", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("收货人电话")
private String receivePersonMobile;
@Schema(description = "司机姓名", example = "王五")
@ExcelProperty("司机姓名")
private String transportDriverName;
@Schema(description = "司机电话")
@ExcelProperty("司机电话")
private String transportDriverMobile;
@Schema(description = "车牌号")
@ExcelProperty("车牌号")
private String transportBusNumber;
@Schema(description = "重量(T)")
@ExcelProperty("重量(T)")
private String transportWeight;
@Schema(description = "位置(米)")
@ExcelProperty("位置(米)")
private String transportSize;
@Schema(description = "备注", example = "随便")
@ExcelProperty("备注")
private String remark;
@Schema(description = "状态,1表示正常2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty("状态,1表示正常2表示禁用")
private Integer status;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "收货人姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
@ExcelProperty("收货人姓名")
private String receivePersonName;
@Schema(description = "收货详细地址")
@ExcelProperty("收货详细地址")
private String receiveAddress;
@Schema(description = "项目销售单号")
@ExcelProperty("项目销售单号")
private String saleOrderCode;
@Schema(description = "合同号")
@ExcelProperty("合同号")
private String contractNo;
@Schema(description = "模具名称")
@ExcelProperty("模具名称")
private String mouldName;
@Schema(description = "性质")
@ExcelProperty("性质")
private String property;
@Schema(description = "客户名称")
@ExcelProperty("客户名称")
private String customerName;
}

@ -0,0 +1,88 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverordersub.DeliverOrderSubDO;
@Schema(description = "管理后台 - 发货订单新增/修改 Request VO")
@Data
public class DeliverOrderSaveReqVO {
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "21429")
private Long id;
@Schema(description = "编号,唯一", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "编号,唯一不能为空")
private String code;
@Schema(description = "销售订单id列表 多个用英文逗号分割", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "销售订单id列表 多个用英文逗号分割不能为空")
private String saleOrderIds;
@Schema(description = "客户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "22885")
@NotNull(message = "客户id不能为空")
private Long customerId;
@Schema(description = "发货日期", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "发货日期不能为空")
private LocalDateTime deliverDate;
@Schema(description = "发货单状态 已保存/已发货", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "发货单状态 已保存/已发货不能为空")
private Integer deliverStatus;
@Schema(description = "发货人", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "发货人不能为空")
private Long deliverPerson;
@Schema(description = "发货人电话", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "发货人电话不能为空")
private String deliverPersonMobile;
@Schema(description = "发货方式", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "发货方式不能为空")
private String deliverMode;
@Schema(description = "收货人电话", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "收货人电话不能为空")
private String receivePersonMobile;
@Schema(description = "司机姓名", example = "王五")
private String transportDriverName;
@Schema(description = "司机电话")
private String transportDriverMobile;
@Schema(description = "车牌号")
private String transportBusNumber;
@Schema(description = "重量(T)")
private String transportWeight;
@Schema(description = "位置(米)")
private String transportSize;
@Schema(description = "备注", example = "随便")
private String remark;
@Schema(description = "状态,1表示正常2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "状态,1表示正常2表示禁用不能为空")
private Integer status;
@Schema(description = "收货人姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
@NotEmpty(message = "收货人姓名不能为空")
private String receivePersonName;
@Schema(description = "收货详细地址", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "收货详细地址不能为空")
private String receiveAddress;
@Schema(description = "发货订单子项列表")
private List<DeliverOrderSubDO> deliverOrderSubs;
}

@ -0,0 +1,122 @@
package com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
/**
* DO
*
* @author
*/
@TableName("project_deliver_order")
@KeySequence("project_deliver_order_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DeliverOrderDO extends BaseDO {
/**
*
*/
@TableId
private Long id;
/**
*
*/
private String code;
/**
* id
*/
private String saleOrderIds;
/**
* id
*/
private Long customerId;
/**
*
*/
private LocalDateTime deliverDate;
/**
* /
*
* {@link TODO heli_deliver_order_status }
*/
private Integer deliverStatus;
/**
*
*/
private Long deliverPerson;
/**
*
*/
private String deliverPersonMobile;
/**
*
*
* {@link TODO heli_deliver_mode }
*/
private String deliverMode;
/**
*
*/
private String receivePersonMobile;
/**
*
*/
private String transportDriverName;
/**
*
*/
private String transportDriverMobile;
/**
*
*/
private String transportBusNumber;
/**
* (T)
*/
private String transportWeight;
/**
* ()
*/
private String transportSize;
/**
*
*/
private String remark;
/**
* ,12
*/
private Integer status;
/**
*
*/
private String receivePersonName;
/**
*
*/
private String receiveAddress;
@TableField(exist = false)
private String saleOrderCode;
@TableField(exist = false)
private String contractNo;
@TableField(exist = false)
private String mouldName;
@TableField(exist = false)
private String property;
@TableField(exist = false)
private String customerName;
}

@ -0,0 +1,85 @@
package com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverordersub;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
/**
* DO
*
* @author
*/
@TableName("project_deliver_order_sub")
@KeySequence("project_deliver_order_sub_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DeliverOrderSubDO extends BaseDO {
/**
*
*/
@TableId
private Long id;
/**
* id
*/
private Long deliveryOrderId;
/**
* | DELIVER_LIST|OTHER_LIST
*
* {@link TODO heli_deliver_list_type }
*/
private String category;
/**
*
*/
private String name;
/**
*
*/
private String blueprintNo;
/**
*
*/
private Integer amount;
/**
*
*
* {@link TODO heli_material_unit }
*/
private String unit;
/**
* (T)
*/
private String weight;
/**
* ()
*/
private String size;
/**
*
*
* {@link TODO heli_deliver_material_type }
*/
private String subType;
/**
*
*/
private String remark;
/**
* ,12
*/
private Integer status;
/**
*
*/
private Boolean deleted;
}

@ -0,0 +1,45 @@
package com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorder;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.util.collection.ArrayUtils;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo.DeliverOrderPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.util.StringUtils;
/**
* Mapper
*
* @author
*/
@Mapper
public interface DeliverOrderMapper extends BaseMapperX<DeliverOrderDO> {
default PageResult<DeliverOrderDO> selectPage(DeliverOrderPageReqVO reqVO) {
MPJLambdaWrapper<DeliverOrderDO> query = new MPJLambdaWrapper<>();
query.selectAll(DeliverOrderDO.class)
.select("u.nickname as deliverPersonName", "e.name as customerName")
.select("GROUP_CONCAT(distinct p.code) as saleOrderCode", "GROUP_CONCAT(distinct p.mould_name) as mouldName"
, "GROUP_CONCAT(distinct p.contract_no) as contractNo", "GROUP_CONCAT(distinct p.property) as property")
.leftJoin("project_sale_order p on FIND_IN_SET(p.id, t.sale_order_ids)")
.leftJoin(AdminUserDO.class, "u", AdminUserDO::getId, DeliverOrderDO::getDeliverPerson)
.leftJoin(CustomerDO.class, "e", CustomerDO::getId, DeliverOrderDO::getCustomerId)
.groupBy(DeliverOrderDO::getId)
.orderByDesc(DeliverOrderDO::getId)
.disableSubLogicDel();
query.like(!StringUtils.isEmpty(reqVO.getCode()), DeliverOrderDO::getCode, reqVO.getCode())
.like(!StringUtils.isEmpty(reqVO.getSaleOrderCode()), ProjectOrderDO::getCode, reqVO.getSaleOrderCode())
.like(!StringUtils.isEmpty(reqVO.getCustomerName()), CustomerDO::getName, reqVO.getCustomerName())
.like(!StringUtils.isEmpty(reqVO.getMouldName()), ProjectOrderDO::getMouldName, reqVO.getMouldName())
.between(reqVO.getDeliverDate() != null && reqVO.getDeliverDate().length == 2,
DeliverOrderDO::getDeliverDate, ArrayUtils.get(reqVO.getDeliverDate(), 0), ArrayUtils.get(reqVO.getDeliverDate(), 1))
.eq(reqVO.getDeliverStatus() != null, DeliverOrderDO::getDeliverStatus, reqVO.getDeliverStatus());
return selectPage(reqVO, query);
}
}

@ -0,0 +1,28 @@
package com.chanko.yunxi.mes.module.heli.dal.mysql.deliverordersub;
import java.util.*;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverordersub.DeliverOrderSubDO;
import org.apache.ibatis.annotations.Mapper;
/**
* Mapper
*
* @author
*/
@Mapper
public interface DeliverOrderSubMapper extends BaseMapperX<DeliverOrderSubDO> {
default List<DeliverOrderSubDO> selectListByDeliveryOrderId(Long deliveryOrderId) {
return selectList(DeliverOrderSubDO::getDeliveryOrderId, deliveryOrderId);
}
default int deleteByDeliveryOrderId(Long deliveryOrderId) {
return delete(DeliverOrderSubDO::getDeliveryOrderId, deliveryOrderId);
}
}

@ -0,0 +1,66 @@
package com.chanko.yunxi.mes.module.heli.service.deliverorder;
import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverordersub.DeliverOrderSubDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
/**
* Service
*
* @author
*/
public interface DeliverOrderService {
/**
*
*
* @param createReqVO
* @return
*/
Long createDeliverOrder(@Valid DeliverOrderSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateDeliverOrder(@Valid DeliverOrderSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteDeliverOrder(Long id);
/**
*
*
* @param id
* @return
*/
DeliverOrderDO getDeliverOrder(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<DeliverOrderDO> getDeliverOrderPage(DeliverOrderPageReqVO pageReqVO);
// ==================== 子表(发货订单子项) ====================
/**
*
*
* @param deliveryOrderId id
* @return
*/
List<DeliverOrderSubDO> getDeliverOrderSubListByDeliveryOrderId(Long deliveryOrderId);
}

@ -0,0 +1,112 @@
package com.chanko.yunxi.mes.module.heli.service.deliverorder;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverordersub.DeliverOrderSubDO;
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.util.object.BeanUtils;
import com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorder.DeliverOrderMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.deliverordersub.DeliverOrderSubMapper;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
/**
* Service
*
* @author
*/
@Service
@Validated
public class DeliverOrderServiceImpl implements DeliverOrderService {
@Resource
private DeliverOrderMapper deliverOrderMapper;
@Resource
private DeliverOrderSubMapper deliverOrderSubMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createDeliverOrder(DeliverOrderSaveReqVO createReqVO) {
// 插入
DeliverOrderDO deliverOrder = BeanUtils.toBean(createReqVO, DeliverOrderDO.class);
deliverOrderMapper.insert(deliverOrder);
// 插入子表
createDeliverOrderSubList(deliverOrder.getId(), createReqVO.getDeliverOrderSubs());
// 返回
return deliverOrder.getId();
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateDeliverOrder(DeliverOrderSaveReqVO updateReqVO) {
// 校验存在
validateDeliverOrderExists(updateReqVO.getId());
// 更新
DeliverOrderDO updateObj = BeanUtils.toBean(updateReqVO, DeliverOrderDO.class);
deliverOrderMapper.updateById(updateObj);
// 更新子表
updateDeliverOrderSubList(updateReqVO.getId(), updateReqVO.getDeliverOrderSubs());
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteDeliverOrder(Long id) {
// 校验存在
validateDeliverOrderExists(id);
// 删除
deliverOrderMapper.deleteById(id);
// 删除子表
deleteDeliverOrderSubByDeliveryOrderId(id);
}
private void validateDeliverOrderExists(Long id) {
if (deliverOrderMapper.selectById(id) == null) {
throw exception(DELIVER_ORDER_NOT_EXISTS);
}
}
@Override
public DeliverOrderDO getDeliverOrder(Long id) {
return deliverOrderMapper.selectById(id);
}
@Override
public PageResult<DeliverOrderDO> getDeliverOrderPage(DeliverOrderPageReqVO pageReqVO) {
return deliverOrderMapper.selectPage(pageReqVO);
}
// ==================== 子表(发货订单子项) ====================
@Override
public List<DeliverOrderSubDO> getDeliverOrderSubListByDeliveryOrderId(Long deliveryOrderId) {
return deliverOrderSubMapper.selectListByDeliveryOrderId(deliveryOrderId);
}
private void createDeliverOrderSubList(Long deliveryOrderId, List<DeliverOrderSubDO> list) {
list.forEach(o -> o.setDeliveryOrderId(deliveryOrderId));
deliverOrderSubMapper.insertBatch(list);
}
private void updateDeliverOrderSubList(Long deliveryOrderId, List<DeliverOrderSubDO> list) {
deleteDeliverOrderSubByDeliveryOrderId(deliveryOrderId);
list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下1id 冲突2updateTime 不更新
createDeliverOrderSubList(deliveryOrderId, list);
}
private void deleteDeliverOrderSubByDeliveryOrderId(Long deliveryOrderId) {
deliverOrderSubMapper.deleteByDeliveryOrderId(deliveryOrderId);
}
}

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorder.DeliverOrderMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorder.DeliverOrderMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -0,0 +1,60 @@
import request from '@/config/axios'
export interface DeliverOrderVO {
id: number
code: string
saleOrderIds: string
customerId: number
deliverDate: Date
deliverStatus: number
deliverPerson: number
deliverPersonMobile: string
deliverMode: string
receivePersonMobile: string
transportDriverName: string
transportDriverMobile: string
transportBusNumber: string
transportWeight: string
transportSize: string
remark: string
status: number
receivePersonName: string
receiveAddress: string
}
// 查询发货订单分页
export const getDeliverOrderPage = async (params) => {
return await request.get({ url: `/heli/deliver-order/page`, params })
}
// 查询发货订单详情
export const getDeliverOrder = async (id: number) => {
return await request.get({ url: `/heli/deliver-order/get?id=` + id })
}
// 新增发货订单
export const createDeliverOrder = async (data: DeliverOrderVO) => {
return await request.post({ url: `/heli/deliver-order/create`, data })
}
// 修改发货订单
export const updateDeliverOrder = async (data: DeliverOrderVO) => {
return await request.put({ url: `/heli/deliver-order/update`, data })
}
// 删除发货订单
export const deleteDeliverOrder = async (id: number) => {
return await request.delete({ url: `/heli/deliver-order/delete?id=` + id })
}
// 导出发货订单 Excel
export const exportDeliverOrder = async (params) => {
return await request.download({ url: `/heli/deliver-order/export-excel`, params })
}
// ==================== 子表(发货订单子项) ====================
// 获得发货订单子项列表
export const getDeliverOrderSubListByDeliveryOrderId = async (deliveryOrderId) => {
return await request.get({ url: `/heli/deliver-order/deliver-order-sub/list-by-delivery-order-id?deliveryOrderId=` + deliveryOrderId })
}

@ -206,6 +206,7 @@ export enum DICT_TYPE {
CRM_PRODUCT_STATUS = 'crm_product_status', CRM_PRODUCT_STATUS = 'crm_product_status',
CRM_PERMISSION_LEVEL = 'crm_permission_level', // CRM 数据权限的级别 CRM_PERMISSION_LEVEL = 'crm_permission_level', // CRM 数据权限的级别
// ========== HELI 模块 ==========
HELI_COMMON_STATUS = 'heli_common_status',// 业务实体启用禁用状态 HELI_COMMON_STATUS = 'heli_common_status',// 业务实体启用禁用状态
HELI_CUSTOMER_LEVEL = 'heli_customer_level', //合立客户级别 HELI_CUSTOMER_LEVEL = 'heli_customer_level', //合立客户级别
HELI_SYSTEM_COMMON_STATUS = 'heli_system_common_status', // 系统适配业务状态展示 HELI_SYSTEM_COMMON_STATUS = 'heli_system_common_status', // 系统适配业务状态展示
@ -233,4 +234,5 @@ export enum DICT_TYPE {
HELI_PROJECT_ORDER_AUDIT_STATUS = 'heli_project_order_audit_status', // 项目单据审核页状态 HELI_PROJECT_ORDER_AUDIT_STATUS = 'heli_project_order_audit_status', // 项目单据审核页状态
HELI_PROJECT_ORDER_APPROVE_STATUS = 'heli_project_order_approve_status', // 项目单据批准页状态 HELI_PROJECT_ORDER_APPROVE_STATUS = 'heli_project_order_approve_status', // 项目单据批准页状态
HELI_PROJECT_ORDER_ALTER_STATUS = 'heli_project_order_alter_status', // 项目单据变更页状态 HELI_PROJECT_ORDER_ALTER_STATUS = 'heli_project_order_alter_status', // 项目单据变更页状态
HELI_DELIVER_ORDER_STATUS = 'heli_deliver_order_status', // 发货单状态
} }

@ -0,0 +1,227 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="编号,唯一" prop="code">
<el-input v-model="formData.code" placeholder="请输入编号,唯一" />
</el-form-item>
<el-form-item label="销售订单id列表 多个用英文逗号分割" prop="saleOrderIds">
<el-input v-model="formData.saleOrderIds" placeholder="请输入销售订单id列表 多个用英文逗号分割" />
</el-form-item>
<el-form-item label="客户id" prop="customerId">
<el-input v-model="formData.customerId" placeholder="请输入客户id" />
</el-form-item>
<el-form-item label="发货日期" prop="deliverDate">
<el-date-picker
v-model="formData.deliverDate"
type="date"
value-format="x"
placeholder="选择发货日期"
/>
</el-form-item>
<el-form-item label="发货单状态 已保存/已发货" prop="deliverStatus">
<el-select v-model="formData.deliverStatus" placeholder="请选择发货单状态 已保存/已发货">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_DELIVER_ORDER_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="发货人" prop="deliverPerson">
<el-input v-model="formData.deliverPerson" placeholder="请输入发货人" />
</el-form-item>
<el-form-item label="发货人电话" prop="deliverPersonMobile">
<el-input v-model="formData.deliverPersonMobile" placeholder="请输入发货人电话" />
</el-form-item>
<el-form-item label="发货方式" prop="deliverMode">
<el-select v-model="formData.deliverMode" placeholder="请选择发货方式">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HELI_DELIVER_MODE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="收货人电话" prop="receivePersonMobile">
<el-input v-model="formData.receivePersonMobile" placeholder="请输入收货人电话" />
</el-form-item>
<el-form-item label="司机姓名" prop="transportDriverName">
<el-input v-model="formData.transportDriverName" placeholder="请输入司机姓名" />
</el-form-item>
<el-form-item label="司机电话" prop="transportDriverMobile">
<el-input v-model="formData.transportDriverMobile" placeholder="请输入司机电话" />
</el-form-item>
<el-form-item label="车牌号" prop="transportBusNumber">
<el-input v-model="formData.transportBusNumber" placeholder="请输入车牌号" />
</el-form-item>
<el-form-item label="重量(T)" prop="transportWeight">
<el-input v-model="formData.transportWeight" placeholder="请输入重量(T)" />
</el-form-item>
<el-form-item label="位置(米)" prop="transportSize">
<el-input v-model="formData.transportSize" placeholder="请输入位置(米)" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item label="状态,1表示正常2表示禁用" prop="status">
<el-radio-group v-model="formData.status">
<el-radio label="1">请选择字典生成</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="收货人姓名" prop="receivePersonName">
<el-input v-model="formData.receivePersonName" placeholder="请输入收货人姓名" />
</el-form-item>
<el-form-item label="收货详细地址" prop="receiveAddress">
<el-input v-model="formData.receiveAddress" placeholder="请输入收货详细地址" />
</el-form-item>
</el-form>
<!-- 子表的表单 -->
<el-tabs v-model="subTabsName">
<el-tab-pane label="发货订单子项" name="deliverOrderSub">
<DeliverOrderSubForm ref="deliverOrderSubFormRef" :delivery-order-id="formData.id" />
</el-tab-pane>
</el-tabs>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import {getStrDictOptions, DICT_TYPE, getIntDictOptions} from '@/utils/dict'
import * as DeliverOrderApi from '@/api/heli/deliverorder'
import DeliverOrderSubForm from './components/DeliverOrderSubForm.vue'
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
code: undefined,
saleOrderIds: undefined,
customerId: undefined,
deliverDate: undefined,
deliverStatus: undefined,
deliverPerson: undefined,
deliverPersonMobile: undefined,
deliverMode: undefined,
receivePersonMobile: undefined,
transportDriverName: undefined,
transportDriverMobile: undefined,
transportBusNumber: undefined,
transportWeight: undefined,
transportSize: undefined,
remark: undefined,
status: undefined,
receivePersonName: undefined,
receiveAddress: undefined,
})
const formRules = reactive({
code: [{ required: true, message: '编号,唯一不能为空', trigger: 'blur' }],
saleOrderIds: [{ required: true, message: '销售订单id列表 多个用英文逗号分割不能为空', trigger: 'blur' }],
customerId: [{ required: true, message: '客户id不能为空', trigger: 'blur' }],
deliverDate: [{ required: true, message: '发货日期不能为空', trigger: 'blur' }],
deliverStatus: [{ required: true, message: '发货单状态 已保存/已发货不能为空', trigger: 'change' }],
deliverPerson: [{ required: true, message: '发货人不能为空', trigger: 'blur' }],
deliverPersonMobile: [{ required: true, message: '发货人电话不能为空', trigger: 'blur' }],
deliverMode: [{ required: true, message: '发货方式不能为空', trigger: 'change' }],
receivePersonMobile: [{ required: true, message: '收货人电话不能为空', trigger: 'blur' }],
status: [{ required: true, message: '状态,1表示正常2表示禁用不能为空', trigger: 'blur' }],
receivePersonName: [{ required: true, message: '收货人姓名不能为空', trigger: 'blur' }],
receiveAddress: [{ required: true, message: '收货详细地址不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
/** 子表的表单 */
const subTabsName = ref('deliverOrderSub')
const deliverOrderSubFormRef = ref()
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
formData.value = await DeliverOrderApi.getDeliverOrder(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
try {
await deliverOrderSubFormRef.value.validate()
} catch (e) {
subTabsName.value = 'deliverOrderSub'
return
}
//
formLoading.value = true
try {
const data = formData.value as unknown as DeliverOrderApi.DeliverOrderVO
//
data.deliverOrderSubs = deliverOrderSubFormRef.value.getData()
if (formType.value === 'create') {
await DeliverOrderApi.createDeliverOrder(data)
message.success(t('common.createSuccess'))
} else {
await DeliverOrderApi.updateDeliverOrder(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
code: undefined,
saleOrderIds: undefined,
customerId: undefined,
deliverDate: undefined,
deliverStatus: undefined,
deliverPerson: undefined,
deliverPersonMobile: undefined,
deliverMode: undefined,
receivePersonMobile: undefined,
transportDriverName: undefined,
transportDriverMobile: undefined,
transportBusNumber: undefined,
transportWeight: undefined,
transportSize: undefined,
remark: undefined,
status: undefined,
receivePersonName: undefined,
receiveAddress: undefined,
}
formRef.value?.resetFields()
}
</script>

@ -0,0 +1,191 @@
<template>
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
v-loading="formLoading"
label-width="0px"
:inline-message="true"
>
<el-table :data="formData" class="-mt-10px">
<el-table-column label="序号" type="index" width="100" />
<el-table-column label="业务类 发货清单|其他清单 DELIVER_LIST|OTHER_LIST" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.category`" :rules="formRules.category" class="mb-0px!">
<el-select v-model="row.category" placeholder="请选择业务类 发货清单|其他清单 DELIVER_LIST|OTHER_LIST">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HELI_DELIVER_LIST_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="名称,唯一" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.name`" :rules="formRules.name" class="mb-0px!">
<el-input v-model="row.name" placeholder="请输入名称,唯一" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="图号" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.blueprintNo`" :rules="formRules.blueprintNo" class="mb-0px!">
<el-input v-model="row.blueprintNo" placeholder="请输入图号" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="数量" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.amount`" :rules="formRules.amount" class="mb-0px!">
<el-input v-model="row.amount" placeholder="请输入数量" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="单位" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.unit`" :rules="formRules.unit" class="mb-0px!">
<el-select v-model="row.unit" placeholder="请选择单位">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HELI_MATERIAL_UNIT)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="重量(T)" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.weight`" :rules="formRules.weight" class="mb-0px!">
<el-input v-model="row.weight" placeholder="请输入重量(T)" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="尺寸(米)" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.size`" :rules="formRules.size" class="mb-0px!">
<el-input v-model="row.size" placeholder="请输入尺寸(米)" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="子项类型" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.subType`" :rules="formRules.subType" class="mb-0px!">
<el-select v-model="row.subType" placeholder="请选择子项类型">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HELI_DELIVER_MATERIAL_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="备注" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.remark`" :rules="formRules.remark" class="mb-0px!">
<el-input v-model="row.remark" placeholder="请输入备注" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="状态,1表示正常2表示禁用" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.status`" :rules="formRules.status" class="mb-0px!">
<el-radio-group v-model="row.status">
<el-radio label="1">请选择字典生成</el-radio>
</el-radio-group>
</el-form-item>
</template>
</el-table-column>
<el-table-column align="center" fixed="right" label="操作" width="60">
<template #default="{ $index }">
<el-button @click="handleDelete($index)" link></el-button>
</template>
</el-table-column>
</el-table>
</el-form>
<el-row justify="center" class="mt-3">
<el-button @click="handleAdd" round>+ 添加发货订单子项</el-button>
</el-row>
</template>
<script setup lang="ts">
import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
import * as DeliverOrderApi from '@/api/heli/deliverorder'
const props = defineProps<{
deliveryOrderId: undefined // id
}>()
const formLoading = ref(false) //
const formData = ref([])
const formRules = reactive({
deliveryOrderId: [{ required: true, message: '订单id不能为空', trigger: 'blur' }],
category: [{ required: true, message: '业务类 发货清单|其他清单 DELIVER_LIST|OTHER_LIST不能为空', trigger: 'change' }],
name: [{ required: true, message: '名称,唯一不能为空', trigger: 'blur' }],
amount: [{ required: true, message: '数量不能为空', trigger: 'blur' }],
unit: [{ required: true, message: '单位不能为空', trigger: 'change' }],
status: [{ required: true, message: '状态,1表示正常2表示禁用不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
/** 监听主表的关联字段的变化,加载对应的子表数据 */
watch(
() => props.deliveryOrderId,
async (val) => {
// 1.
formData.value = []
// 2. val
if (!val) {
return;
}
try {
formLoading.value = true
formData.value = await DeliverOrderApi.getDeliverOrderSubListByDeliveryOrderId(val)
} finally {
formLoading.value = false
}
},
{ immediate: true }
)
/** 新增按钮操作 */
const handleAdd = () => {
const row = {
id: undefined,
deliveryOrderId: undefined,
category: undefined,
name: undefined,
blueprintNo: undefined,
amount: undefined,
unit: undefined,
weight: undefined,
size: undefined,
subType: undefined,
remark: undefined,
status: undefined,
}
row.deliveryOrderId = props.deliveryOrderId
formData.value.push(row)
}
/** 删除按钮操作 */
const handleDelete = (index) => {
formData.value.splice(index, 1)
}
/** 表单校验 */
const validate = () => {
return formRef.value.validate()
}
/** 表单值 */
const getData = () => {
return formData.value
}
defineExpose({ validate, getData })
</script>

@ -0,0 +1,265 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<el-form-item label="发货单号" prop="code">
<el-input
v-model="queryParams.code"
placeholder="请输入发货单号"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="项目编号" prop="saleOrderCode">
<el-input
v-model="queryParams.saleOrderCode"
placeholder="请输入项目编号"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="客户名称" prop="customerName">
<el-input
v-model="queryParams.customerName"
placeholder="请输入客户名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="模具名称" prop="mouldName">
<el-input
v-model="queryParams.mouldName"
placeholder="请输入模具名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="发货日期" prop="deliverDate">
<el-date-picker
v-model="queryParams.deliverDate"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="发货单状态" prop="deliverStatus">
<el-select
v-model="queryParams.deliverStatus"
placeholder="请选择发货单状态"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_DELIVER_ORDER_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['heli:deliver-order:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<!-- <el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['heli:deliver-order:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>-->
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column fixed label="序号" type="index" width="100" />
<el-table-column fixed label="发货单号" align="center" prop="code" width="180" />
<el-table-column fixed label="项目编号" align="center" prop="saleOrderCode" width="180" />
<el-table-column
fixed
label="发货日期"
align="center"
prop="deliverDate"
:formatter="dateFormatter"
width="180"
/>
<el-table-column label="客户名称" align="center" prop="customerName" width="180" />
<el-table-column label="合同号" align="center" prop="contractNo" width="180" />
<el-table-column label="模具名称" align="center" prop="mouldName" width="120" />
<el-table-column label="性质" align="center" prop="property" width="100" />
<el-table-column label="发货人姓名" align="center" prop="deliverPersonName" width="120" />
<el-table-column label="发货人电话" align="center" prop="deliverPersonMobile" width="120" />
<el-table-column label="收货人姓名" align="center" prop="receivePersonName" width="120" />
<el-table-column label="收货人电话" align="center" prop="receivePersonMobile" width="120" />
<el-table-column label="收货详细地址" align="center" prop="receiveAddress" width="180" />
<el-table-column label="司机姓名" align="center" prop="transportDriverName" width="120" />
<el-table-column label="司机电话" align="center" prop="transportDriverMobile" width="120" />
<el-table-column label="发货备注" align="center" prop="remark" width="180" />
<el-table-column fixed="right" label="发货单状态" align="center" prop="deliverStatus" width="120">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_DELIVER_ORDER_STATUS" :value="scope.row.deliverStatus" />
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="160">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['heli:deliver-order:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['heli:deliver-order:delete']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<DeliverOrderForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import {getStrDictOptions, DICT_TYPE, getIntDictOptions} from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import * as DeliverOrderApi from '@/api/heli/deliverorder'
import DeliverOrderForm from './DeliverOrderForm.vue'
defineOptions({ name: 'DeliverOrder' })
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(true) //
const list = ref([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
code: undefined,
saleOrderCode: undefined,
customerName: undefined,
deliverDate: [],
deliverStatus: undefined,
deliverPerson: undefined,
deliverPersonMobile: undefined,
deliverMode: undefined,
receivePersonMobile: undefined,
transportDriverName: undefined,
transportDriverMobile: undefined,
transportBusNumber: undefined,
transportWeight: undefined,
transportSize: undefined,
remark: undefined,
status: undefined,
createTime: [],
receivePersonName: undefined,
receiveAddress: undefined,
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await DeliverOrderApi.getDeliverOrderPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await DeliverOrderApi.deleteDeliverOrder(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await DeliverOrderApi.exportDeliverOrder(queryParams)
download.excel(data, '发货订单.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted(() => {
getList()
})
</script>

@ -17,12 +17,13 @@ CREATE TABLE `project_deliver_order` (
`sale_order_ids` varchar(255) not null comment '销售订单id列表 多个用英文逗号分割', `sale_order_ids` varchar(255) not null comment '销售订单id列表 多个用英文逗号分割',
`customer_id` BIGINT(20) not null comment '客户id', `customer_id` BIGINT(20) not null comment '客户id',
`deliver_date` DATETIME not null comment '发货日期', `deliver_date` DATETIME not null comment '发货日期',
`deliver_status` char(1) not null COMMENT '发货单状态 已保存/已发货', `deliver_status` int(11) not null COMMENT '发货单状态 已保存/已发货',
`deliver_person` BIGINT(20) not null comment '发货人', `deliver_person` BIGINT(20) not null comment '发货人',
`deliver_person_mobile` varchar(32) not null comment '发货人电话', `deliver_person_mobile` varchar(32) not null comment '发货人电话',
`deliver_mode` char(1) not null comment '发货方式', `deliver_mode` char(1) not null comment '发货方式',
`receive_person_name` BIGINT(20) not null comment '收货人姓名', `receive_person_name` varchar(16) not null comment '收货人姓名',
`receive_person_mobile` varchar(32) not null comment '收货人电话', `receive_person_mobile` varchar(32) not null comment '收货人电话',
`receive_address` varchar(255) not null comment '收货详细地址',
`transport_driver_name` varchar(16) comment '司机姓名', `transport_driver_name` varchar(16) comment '司机姓名',
`transport_driver_mobile` varchar(32) comment '司机电话', `transport_driver_mobile` varchar(32) comment '司机电话',
`transport_bus_number` varchar(32) comment '车牌号', `transport_bus_number` varchar(32) comment '车牌号',

Loading…
Cancel
Save