Explorar el Código

2023年8月9日18:51:56

纪新园 hace 2 años
padre
commit
3eee7dd9c0
Se han modificado 39 ficheros con 2462 adiciones y 54 borrados
  1. 34 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/dto/CorpEquipmentArchivesDTO.java
  2. 34 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/dto/CorpEquipmentArchivesItemDTO.java
  3. 34 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/dto/ProjectGoodsDTO.java
  4. 34 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/dto/ProjectGoodsFilesDTO.java
  5. 124 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/CorpEquipmentArchives.java
  6. 137 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/CorpEquipmentArchivesItem.java
  7. 214 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/ProjectGoods.java
  8. 114 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/ProjectGoodsFiles.java
  9. 2 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/goods/enums/GoodsTypeEnum.java
  10. 36 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/vo/CorpEquipmentArchivesItemVO.java
  11. 36 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/vo/CorpEquipmentArchivesVO.java
  12. 36 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/vo/ProjectGoodsFilesVO.java
  13. 36 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/vo/ProjectGoodsVO.java
  14. 134 0
      blade-service/blade-client/src/main/java/org/springblade/client/equipment/controller/CorpEquipmentArchivesController.java
  15. 126 0
      blade-service/blade-client/src/main/java/org/springblade/client/equipment/controller/CorpEquipmentArchivesItemController.java
  16. 42 0
      blade-service/blade-client/src/main/java/org/springblade/client/equipment/mapper/CorpEquipmentArchivesItemMapper.java
  17. 34 0
      blade-service/blade-client/src/main/java/org/springblade/client/equipment/mapper/CorpEquipmentArchivesItemMapper.xml
  18. 42 0
      blade-service/blade-client/src/main/java/org/springblade/client/equipment/mapper/CorpEquipmentArchivesMapper.java
  19. 29 0
      blade-service/blade-client/src/main/java/org/springblade/client/equipment/mapper/CorpEquipmentArchivesMapper.xml
  20. 41 0
      blade-service/blade-client/src/main/java/org/springblade/client/equipment/service/ICorpEquipmentArchivesItemService.java
  21. 45 0
      blade-service/blade-client/src/main/java/org/springblade/client/equipment/service/ICorpEquipmentArchivesService.java
  22. 41 0
      blade-service/blade-client/src/main/java/org/springblade/client/equipment/service/impl/CorpEquipmentArchivesItemServiceImpl.java
  23. 103 0
      blade-service/blade-client/src/main/java/org/springblade/client/equipment/service/impl/CorpEquipmentArchivesServiceImpl.java
  24. 250 0
      blade-service/blade-client/src/main/java/org/springblade/client/goods/controller/GoodsTypeProjectController.java
  25. 3 48
      blade-service/blade-client/src/main/java/org/springblade/client/goods/service/impl/GoodsDescServiceImpl.java
  26. 170 0
      blade-service/blade-client/src/main/java/org/springblade/client/project/controller/ProjectGoodsController.java
  27. 126 0
      blade-service/blade-client/src/main/java/org/springblade/client/project/controller/ProjectGoodsFilesController.java
  28. 42 0
      blade-service/blade-client/src/main/java/org/springblade/client/project/mapper/ProjectGoodsFilesMapper.java
  29. 28 0
      blade-service/blade-client/src/main/java/org/springblade/client/project/mapper/ProjectGoodsFilesMapper.xml
  30. 42 0
      blade-service/blade-client/src/main/java/org/springblade/client/project/mapper/ProjectGoodsMapper.java
  31. 46 0
      blade-service/blade-client/src/main/java/org/springblade/client/project/mapper/ProjectGoodsMapper.xml
  32. 41 0
      blade-service/blade-client/src/main/java/org/springblade/client/project/service/IProjectGoodsFilesService.java
  33. 43 0
      blade-service/blade-client/src/main/java/org/springblade/client/project/service/IProjectGoodsService.java
  34. 41 0
      blade-service/blade-client/src/main/java/org/springblade/client/project/service/impl/ProjectGoodsFilesServiceImpl.java
  35. 100 0
      blade-service/blade-client/src/main/java/org/springblade/client/project/service/impl/ProjectGoodsServiceImpl.java
  36. 2 2
      blade-service/blade-client/src/main/java/org/springblade/client/scheduled/CorpsProfitTimer.java
  37. 13 0
      blade-service/blade-land/src/main/java/org/springblade/land/handler/LocateJobHandler.java
  38. 5 2
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/IntegralDetailController.java
  39. 2 2
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

+ 34 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/dto/CorpEquipmentArchivesDTO.java

@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.dto;
+
+import org.springblade.client.entity.CorpEquipmentArchives;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 客户设备档案数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class CorpEquipmentArchivesDTO extends CorpEquipmentArchives {
+	private static final long serialVersionUID = 1L;
+
+}

+ 34 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/dto/CorpEquipmentArchivesItemDTO.java

@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.dto;
+
+import org.springblade.client.entity.CorpEquipmentArchivesItem;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 客户档案明细数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class CorpEquipmentArchivesItemDTO extends CorpEquipmentArchivesItem {
+	private static final long serialVersionUID = 1L;
+
+}

+ 34 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/dto/ProjectGoodsDTO.java

@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.dto;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.client.entity.ProjectGoods;
+
+/**
+ * 配件项目商品数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ProjectGoodsDTO extends ProjectGoods {
+	private static final long serialVersionUID = 1L;
+
+}

+ 34 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/dto/ProjectGoodsFilesDTO.java

@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.dto;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.client.entity.ProjectGoodsFiles;
+
+/**
+ * 配件项目商品附件表数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ProjectGoodsFilesDTO extends ProjectGoodsFiles {
+	private static final long serialVersionUID = 1L;
+
+}

+ 124 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/CorpEquipmentArchives.java

@@ -0,0 +1,124 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 客户设备档案实体类
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+@Data
+@TableName("basic_corp_equipment_archives")
+@ApiModel(value = "CorpEquipmentArchives对象", description = "客户设备档案")
+public class CorpEquipmentArchives implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+	/**
+	 * 客户id
+	 */
+	@ApiModelProperty(value = "客户id")
+	private Long corpId;
+	/**
+	 * 客户名称
+	 */
+	@ApiModelProperty(value = "客户名称")
+	private String corpName;
+	/**
+	 * 编号
+	 */
+	@ApiModelProperty(value = "编号")
+	private String sysNo;
+	/**
+	 * 设备数量
+	 */
+	@ApiModelProperty(value = "设备数量")
+	private Integer equipmentNumber;
+	/**
+	 * 维修次数
+	 */
+	@ApiModelProperty(value = "维修次数")
+	private Integer maintenanceSecond;
+	/**
+	 * 签约开始时间
+	 */
+	@ApiModelProperty(value = "签约开始时间")
+	private Date signingDateStart;
+	/**
+	 * 签约结束时间
+	 */
+	@ApiModelProperty(value = "签约结束时间")
+	private Date signingDateEnd;
+	/**
+	 * 备注(收费指示)
+	 */
+	@ApiModelProperty(value = "备注(收费指示)")
+	private String remarks;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private Long updateUser;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 状态(0 正常 1停用)
+	 */
+	@ApiModelProperty(value = "状态(0 正常 1停用)")
+	private Integer status;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+
+	/**
+	 * 租户id
+	 */
+	@ApiModelProperty(value = "租户id")
+	private String tenantId;
+
+	@TableField(exist = false)
+	private List<CorpEquipmentArchivesItem> corpEquipmentArchivesItemList;
+
+
+}

+ 137 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/CorpEquipmentArchivesItem.java

@@ -0,0 +1,137 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 客户档案明细实体类
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+@Data
+@TableName("basic_corp_equipment_archives_item")
+@ApiModel(value = "CorpEquipmentArchivesItem对象", description = "客户档案明细")
+public class CorpEquipmentArchivesItem implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+	private Long pid;
+	/**
+	 * 设备名称
+	 */
+	@ApiModelProperty(value = "设备名称")
+	private String cname;
+	/**
+	 * 设备编码
+	 */
+	@ApiModelProperty(value = "设备编码")
+	private String code;
+	/**
+	 * 品牌
+	 */
+	@ApiModelProperty(value = "品牌")
+	private String brand;
+	/**
+	 * 规格尺寸
+	 */
+	@ApiModelProperty(value = "规格尺寸")
+	private String specs;
+	/**
+	 * 产品类别
+	 */
+	@ApiModelProperty(value = "产品类别")
+	private String category;
+	/**
+	 * 产品分类
+	 */
+	@ApiModelProperty(value = "产品分类")
+	private String categoryitem;
+	/**
+	 * 图片
+	 */
+	@ApiModelProperty(value = "图片")
+	@TableField("URL")
+	private String url;
+	/**
+	 * 商品类型id
+	 */
+	@ApiModelProperty(value = "商品类型id")
+	private String goodsTypeId;
+	/**
+	 * 出场日期
+	 */
+	@ApiModelProperty(value = "出场日期")
+	private Date exitDate;
+	/**
+	 * 报修日期
+	 */
+	@ApiModelProperty(value = "报修日期")
+	private Date repairReportDate;
+	/**
+	 * 备注(收费指示)
+	 */
+	@ApiModelProperty(value = "备注(收费指示)")
+	private String remarks;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private Long updateUser;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 状态(0 正常 1停用)
+	 */
+	@ApiModelProperty(value = "状态(0 正常 1停用)")
+	private Integer status;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+
+	/**
+	 * 租户id
+	 */
+	@ApiModelProperty(value = "租户id")
+	private String tenantId;
+
+
+}

+ 214 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/ProjectGoods.java

@@ -0,0 +1,214 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 配件项目商品实体类
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+@Data
+@TableName("basic_project_goods")
+@ApiModel(value = "ProjectGoods对象", description = "配件项目商品")
+public class ProjectGoods implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+
+	@ApiModelProperty(value = "来源商品id")
+	private Long srcId;
+	/**
+	 * 商品名称
+	 */
+	@ApiModelProperty(value = "商品名称")
+	private String cname;
+	/**
+	 * 产品名称提取数字
+	 */
+	@ApiModelProperty(value = "产品名称提取数字")
+	private String cnameInt;
+	/**
+	 * 英文名称
+	 */
+	@ApiModelProperty(value = "英文名称")
+	private String ename;
+	/**
+	 * 中文描述
+	 */
+	@ApiModelProperty(value = "中文描述")
+	private String nameDescription;
+	/**
+	 * 英文描述
+	 */
+	@ApiModelProperty(value = "英文描述")
+	private String cnameDescription;
+	/**
+	 * 计量单位
+	 */
+	@ApiModelProperty(value = "计量单位")
+	private String unit;
+	/**
+	 * 品牌
+	 */
+	@ApiModelProperty(value = "品牌")
+	private String brand;
+	/**
+	 * 规格尺寸
+	 */
+	@ApiModelProperty(value = "规格尺寸")
+	private String specs;
+	/**
+	 * 产品类别
+	 */
+	@ApiModelProperty(value = "产品类别")
+	private String category;
+	/**
+	 * 产品分类
+	 */
+	@ApiModelProperty(value = "产品分类")
+	private String categoryitem;
+	/**
+	 * 长度单位
+	 */
+	@ApiModelProperty(value = "长度单位")
+	private String lengthUnit;
+	/**
+	 * 重量单位
+	 */
+	@ApiModelProperty(value = "重量单位")
+	private String weightUnit;
+	/**
+	 * 包装单位
+	 */
+	@ApiModelProperty(value = "包装单位")
+	private String packgeunit;
+	/**
+	 * 每个体积
+	 */
+	@ApiModelProperty(value = "每个体积")
+	private BigDecimal singleVolumn;
+	/**
+	 * 每个毛重
+	 */
+	@ApiModelProperty(value = "每个毛重")
+	private BigDecimal singleGrossWeight;
+	/**
+	 * 每个净重
+	 */
+	@ApiModelProperty(value = "每个净重")
+	private BigDecimal singleWeight;
+	/**
+	 * 图片
+	 */
+	@ApiModelProperty(value = "图片")
+	@TableField("URL")
+	private String url;
+	/**
+	 * 质保期
+	 */
+	@ApiModelProperty(value = "质保期")
+	private Date warrantyPeriod;
+	/**
+	 * 单价
+	 */
+	@ApiModelProperty(value = "单价")
+	private BigDecimal price;
+	/**
+	 * 备注(收费指示)
+	 */
+	@ApiModelProperty(value = "备注(收费指示)")
+	private String remarks;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private Long updateUser;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 状态(0 正常 1停用)
+	 */
+	@ApiModelProperty(value = "状态(0 正常 1停用)")
+	private Integer status;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+	/**
+	 * 供应商
+	 */
+	@ApiModelProperty(value = "供应商")
+	private Long corpId;
+	/**
+	 * 供应商名称
+	 */
+	@ApiModelProperty(value = "供应商名称")
+	private String corpName;
+	/**
+	 * 出场日期
+	 */
+	@ApiModelProperty(value = "出场日期")
+	private Date exitDate;
+	/**
+	 * 维修日期
+	 */
+	@ApiModelProperty(value = "维修日期")
+	private Date maintenanceDate;
+
+	/**
+	 * 租户id
+	 */
+	@ApiModelProperty(value = "租户id")
+	private String tenantId;
+	/**
+	 * 商品类型
+	 */
+	@ApiModelProperty(value = "商品类型")
+	private String goodsTypeId;
+
+	@TableField(exist = false)
+	private List<ProjectGoodsFiles> projectGoodsFilesList;
+
+
+}

+ 114 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/ProjectGoodsFiles.java

@@ -0,0 +1,114 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 配件项目商品附件表实体类
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+@Data
+@TableName("basic_project_goods_files")
+@ApiModel(value = "ProjectGoodsFiles对象", description = "配件项目商品附件表")
+public class ProjectGoodsFiles implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+	/**
+	 * 主表id
+	 */
+	@ApiModelProperty(value = "主表id")
+	private Long pid;
+	/**
+	 * 排序
+	 */
+	@ApiModelProperty(value = "排序")
+	private Integer sort;
+	/**
+	 * 文件名
+	 */
+	@ApiModelProperty(value = "文件名")
+	private String fileName;
+	/**
+	 * 文件地址
+	 */
+	@ApiModelProperty(value = "文件地址")
+	private String url;
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
+	/**
+	 * 版本
+	 */
+	@ApiModelProperty(value = "版本")
+	private String version;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
+	/**
+	 * 创建部门
+	 */
+	@ApiModelProperty(value = "创建部门")
+	private Long createDept;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private Long updateUser;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 状态(0 正常 1停用)
+	 */
+	@ApiModelProperty(value = "状态(0 正常 1停用)")
+	private Integer status;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+
+	/**
+	 * 租户id
+	 */
+	@ApiModelProperty(value = "租户id")
+	private String tenantId;
+
+
+}

+ 2 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/goods/enums/GoodsTypeEnum.java

@@ -19,6 +19,8 @@ public enum GoodsTypeEnum {
 
 	AFFAIRS(1L),//事务
 
+	PROJECT(2L),//事务
+
 	;
 
 	private final Long type;

+ 36 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/vo/CorpEquipmentArchivesItemVO.java

@@ -0,0 +1,36 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.vo;
+
+import org.springblade.client.entity.CorpEquipmentArchivesItem;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * 客户档案明细视图实体类
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "CorpEquipmentArchivesItemVO对象", description = "客户档案明细")
+public class CorpEquipmentArchivesItemVO extends CorpEquipmentArchivesItem {
+	private static final long serialVersionUID = 1L;
+
+}

+ 36 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/vo/CorpEquipmentArchivesVO.java

@@ -0,0 +1,36 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.vo;
+
+import org.springblade.client.entity.CorpEquipmentArchives;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * 客户设备档案视图实体类
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "CorpEquipmentArchivesVO对象", description = "客户设备档案")
+public class CorpEquipmentArchivesVO extends CorpEquipmentArchives {
+	private static final long serialVersionUID = 1L;
+
+}

+ 36 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/vo/ProjectGoodsFilesVO.java

@@ -0,0 +1,36 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.client.entity.ProjectGoodsFiles;
+
+/**
+ * 配件项目商品附件表视图实体类
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "ProjectGoodsFilesVO对象", description = "配件项目商品附件表")
+public class ProjectGoodsFilesVO extends ProjectGoodsFiles {
+	private static final long serialVersionUID = 1L;
+
+}

+ 36 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/vo/ProjectGoodsVO.java

@@ -0,0 +1,36 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.client.entity.ProjectGoods;
+
+/**
+ * 配件项目商品视图实体类
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "ProjectGoodsVO对象", description = "配件项目商品")
+public class ProjectGoodsVO extends ProjectGoods {
+	private static final long serialVersionUID = 1L;
+
+}

+ 134 - 0
blade-service/blade-client/src/main/java/org/springblade/client/equipment/controller/CorpEquipmentArchivesController.java

@@ -0,0 +1,134 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.equipment.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.client.entity.CorpEquipmentArchives;
+import org.springblade.client.equipment.service.ICorpEquipmentArchivesService;
+import org.springblade.client.vo.CorpEquipmentArchivesVO;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ * 客户设备档案 控制器
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/corpequipmentarchives")
+@Api(value = "客户设备档案", tags = "客户设备档案接口")
+public class CorpEquipmentArchivesController extends BladeController {
+
+	private final ICorpEquipmentArchivesService corpEquipmentArchivesService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入corpEquipmentArchives")
+	public R<CorpEquipmentArchives> detail(CorpEquipmentArchives corpEquipmentArchives) {
+		CorpEquipmentArchives detail = corpEquipmentArchivesService.detail(corpEquipmentArchives);
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 客户设备档案
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入corpEquipmentArchives")
+	public R<IPage<CorpEquipmentArchives>> list(CorpEquipmentArchives corpEquipmentArchives, Query query) {
+		LambdaQueryWrapper<CorpEquipmentArchives> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(CorpEquipmentArchives::getTenantId, AuthUtil.getTenantId())
+			.eq(CorpEquipmentArchives::getIsDeleted, 0)
+			.eq(ObjectUtils.isNotNull(corpEquipmentArchives.getCorpId()), CorpEquipmentArchives::getCorpId, corpEquipmentArchives.getCorpId())
+			.orderByDesc(CorpEquipmentArchives::getCreateTime);
+		IPage<CorpEquipmentArchives> pages = corpEquipmentArchivesService.page(Condition.getPage(query), lambdaQueryWrapper);
+		return R.data(pages);
+	}
+
+	/**
+	 * 自定义分页 客户设备档案
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入corpEquipmentArchives")
+	public R<IPage<CorpEquipmentArchivesVO>> page(CorpEquipmentArchivesVO corpEquipmentArchives, Query query) {
+		IPage<CorpEquipmentArchivesVO> pages = corpEquipmentArchivesService.selectCorpEquipmentArchivesPage(Condition.getPage(query), corpEquipmentArchives);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增 客户设备档案
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入corpEquipmentArchives")
+	public R save(@Valid @RequestBody CorpEquipmentArchives corpEquipmentArchives) {
+		return R.status(corpEquipmentArchivesService.save(corpEquipmentArchives));
+	}
+
+	/**
+	 * 修改 客户设备档案
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入corpEquipmentArchives")
+	public R update(@Valid @RequestBody CorpEquipmentArchives corpEquipmentArchives) {
+		return R.status(corpEquipmentArchivesService.updateById(corpEquipmentArchives));
+	}
+
+	/**
+	 * 新增或修改 客户设备档案
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入corpEquipmentArchives")
+	public R submit(@Valid @RequestBody CorpEquipmentArchives corpEquipmentArchives) {
+		return corpEquipmentArchivesService.submit(corpEquipmentArchives);
+	}
+
+
+	/**
+	 * 删除 客户设备档案
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(corpEquipmentArchivesService.removeByIds(Func.toLongList(ids)));
+	}
+
+
+}

+ 126 - 0
blade-service/blade-client/src/main/java/org/springblade/client/equipment/controller/CorpEquipmentArchivesItemController.java

@@ -0,0 +1,126 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.equipment.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import lombok.AllArgsConstructor;
+import javax.validation.Valid;
+
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.client.entity.CorpEquipmentArchivesItem;
+import org.springblade.client.vo.CorpEquipmentArchivesItemVO;
+import org.springblade.client.equipment.service.ICorpEquipmentArchivesItemService;
+import org.springblade.core.boot.ctrl.BladeController;
+
+/**
+ * 客户档案明细 控制器
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/corpequipmentarchivesitem")
+@Api(value = "客户档案明细", tags = "客户档案明细接口")
+public class CorpEquipmentArchivesItemController extends BladeController {
+
+	private final ICorpEquipmentArchivesItemService corpEquipmentArchivesItemService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入corpEquipmentArchivesItem")
+	public R<CorpEquipmentArchivesItem> detail(CorpEquipmentArchivesItem corpEquipmentArchivesItem) {
+		CorpEquipmentArchivesItem detail = corpEquipmentArchivesItemService.getOne(Condition.getQueryWrapper(corpEquipmentArchivesItem));
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 客户档案明细
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入corpEquipmentArchivesItem")
+	public R<IPage<CorpEquipmentArchivesItem>> list(CorpEquipmentArchivesItem corpEquipmentArchivesItem, Query query) {
+		IPage<CorpEquipmentArchivesItem> pages = corpEquipmentArchivesItemService.page(Condition.getPage(query), Condition.getQueryWrapper(corpEquipmentArchivesItem));
+		return R.data(pages);
+	}
+
+	/**
+	 * 自定义分页 客户档案明细
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入corpEquipmentArchivesItem")
+	public R<IPage<CorpEquipmentArchivesItemVO>> page(CorpEquipmentArchivesItemVO corpEquipmentArchivesItem, Query query) {
+		IPage<CorpEquipmentArchivesItemVO> pages = corpEquipmentArchivesItemService.selectCorpEquipmentArchivesItemPage(Condition.getPage(query), corpEquipmentArchivesItem);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增 客户档案明细
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入corpEquipmentArchivesItem")
+	public R save(@Valid @RequestBody CorpEquipmentArchivesItem corpEquipmentArchivesItem) {
+		return R.status(corpEquipmentArchivesItemService.save(corpEquipmentArchivesItem));
+	}
+
+	/**
+	 * 修改 客户档案明细
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入corpEquipmentArchivesItem")
+	public R update(@Valid @RequestBody CorpEquipmentArchivesItem corpEquipmentArchivesItem) {
+		return R.status(corpEquipmentArchivesItemService.updateById(corpEquipmentArchivesItem));
+	}
+
+	/**
+	 * 新增或修改 客户档案明细
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入corpEquipmentArchivesItem")
+	public R submit(@Valid @RequestBody CorpEquipmentArchivesItem corpEquipmentArchivesItem) {
+		return R.status(corpEquipmentArchivesItemService.saveOrUpdate(corpEquipmentArchivesItem));
+	}
+
+
+	/**
+	 * 删除 客户档案明细
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(corpEquipmentArchivesItemService.removeByIds(Func.toLongList(ids)));
+	}
+
+
+}

+ 42 - 0
blade-service/blade-client/src/main/java/org/springblade/client/equipment/mapper/CorpEquipmentArchivesItemMapper.java

@@ -0,0 +1,42 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.equipment.mapper;
+
+import org.springblade.client.entity.CorpEquipmentArchivesItem;
+import org.springblade.client.vo.CorpEquipmentArchivesItemVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 客户档案明细 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+public interface CorpEquipmentArchivesItemMapper extends BaseMapper<CorpEquipmentArchivesItem> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param corpEquipmentArchivesItem
+	 * @return
+	 */
+	List<CorpEquipmentArchivesItemVO> selectCorpEquipmentArchivesItemPage(IPage page, CorpEquipmentArchivesItemVO corpEquipmentArchivesItem);
+
+}

+ 34 - 0
blade-service/blade-client/src/main/java/org/springblade/client/equipment/mapper/CorpEquipmentArchivesItemMapper.xml

@@ -0,0 +1,34 @@
+<?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="org.springblade.client.equipment.mapper.CorpEquipmentArchivesItemMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="corpEquipmentArchivesItemResultMap" type="org.springblade.client.entity.CorpEquipmentArchivesItem">
+        <id column="id" property="id"/>
+        <result column="pid" property="pid"/>
+        <result column="cname" property="cname"/>
+        <result column="code" property="code"/>
+        <result column="brand" property="brand"/>
+        <result column="brand_item" property="brandItem"/>
+        <result column="specs" property="specs"/>
+        <result column="category" property="category"/>
+        <result column="categoryitem" property="categoryitem"/>
+        <result column="URL" property="url"/>
+        <result column="goods_type_id" property="goodsTypeId"/>
+        <result column="exit_date" property="exitDate"/>
+        <result column="repair_report_date" property="repairReportDate"/>
+        <result column="remarks" property="remarks"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+    </resultMap>
+
+
+    <select id="selectCorpEquipmentArchivesItemPage" resultMap="corpEquipmentArchivesItemResultMap">
+        select * from basic_corp_equipment_archives_item where is_deleted = 0
+    </select>
+
+</mapper>

+ 42 - 0
blade-service/blade-client/src/main/java/org/springblade/client/equipment/mapper/CorpEquipmentArchivesMapper.java

@@ -0,0 +1,42 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.equipment.mapper;
+
+import org.springblade.client.entity.CorpEquipmentArchives;
+import org.springblade.client.vo.CorpEquipmentArchivesVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 客户设备档案 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+public interface CorpEquipmentArchivesMapper extends BaseMapper<CorpEquipmentArchives> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param corpEquipmentArchives
+	 * @return
+	 */
+	List<CorpEquipmentArchivesVO> selectCorpEquipmentArchivesPage(IPage page, CorpEquipmentArchivesVO corpEquipmentArchives);
+
+}

+ 29 - 0
blade-service/blade-client/src/main/java/org/springblade/client/equipment/mapper/CorpEquipmentArchivesMapper.xml

@@ -0,0 +1,29 @@
+<?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="org.springblade.client.equipment.mapper.CorpEquipmentArchivesMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="corpEquipmentArchivesResultMap" type="org.springblade.client.entity.CorpEquipmentArchives">
+        <id column="id" property="id"/>
+        <result column="corp_id" property="corpId"/>
+        <result column="corp_name" property="corpName"/>
+        <result column="sys_no" property="sysNo"/>
+        <result column="equipment_number" property="equipmentNumber"/>
+        <result column="maintenance_second" property="maintenanceSecond"/>
+        <result column="signing_date_start" property="signingDateStart"/>
+        <result column="signing_date_end" property="signingDateEnd"/>
+        <result column="remarks" property="remarks"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+    </resultMap>
+
+
+    <select id="selectCorpEquipmentArchivesPage" resultMap="corpEquipmentArchivesResultMap">
+        select * from basic_corp_equipment_archives where is_deleted = 0
+    </select>
+
+</mapper>

+ 41 - 0
blade-service/blade-client/src/main/java/org/springblade/client/equipment/service/ICorpEquipmentArchivesItemService.java

@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.equipment.service;
+
+import org.springblade.client.entity.CorpEquipmentArchivesItem;
+import org.springblade.client.vo.CorpEquipmentArchivesItemVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 客户档案明细 服务类
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+public interface ICorpEquipmentArchivesItemService extends IService<CorpEquipmentArchivesItem> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param corpEquipmentArchivesItem
+	 * @return
+	 */
+	IPage<CorpEquipmentArchivesItemVO> selectCorpEquipmentArchivesItemPage(IPage<CorpEquipmentArchivesItemVO> page, CorpEquipmentArchivesItemVO corpEquipmentArchivesItem);
+
+}

+ 45 - 0
blade-service/blade-client/src/main/java/org/springblade/client/equipment/service/ICorpEquipmentArchivesService.java

@@ -0,0 +1,45 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.equipment.service;
+
+import org.springblade.client.entity.CorpEquipmentArchives;
+import org.springblade.client.vo.CorpEquipmentArchivesVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.tool.api.R;
+
+/**
+ * 客户设备档案 服务类
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+public interface ICorpEquipmentArchivesService extends IService<CorpEquipmentArchives> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param corpEquipmentArchives
+	 * @return
+	 */
+	IPage<CorpEquipmentArchivesVO> selectCorpEquipmentArchivesPage(IPage<CorpEquipmentArchivesVO> page, CorpEquipmentArchivesVO corpEquipmentArchives);
+
+	CorpEquipmentArchives detail(CorpEquipmentArchives corpEquipmentArchives);
+
+	R submit(CorpEquipmentArchives corpEquipmentArchives);
+}

+ 41 - 0
blade-service/blade-client/src/main/java/org/springblade/client/equipment/service/impl/CorpEquipmentArchivesItemServiceImpl.java

@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.equipment.service.impl;
+
+import org.springblade.client.entity.CorpEquipmentArchivesItem;
+import org.springblade.client.vo.CorpEquipmentArchivesItemVO;
+import org.springblade.client.equipment.mapper.CorpEquipmentArchivesItemMapper;
+import org.springblade.client.equipment.service.ICorpEquipmentArchivesItemService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 客户档案明细 服务实现类
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+@Service
+public class CorpEquipmentArchivesItemServiceImpl extends ServiceImpl<CorpEquipmentArchivesItemMapper, CorpEquipmentArchivesItem> implements ICorpEquipmentArchivesItemService {
+
+	@Override
+	public IPage<CorpEquipmentArchivesItemVO> selectCorpEquipmentArchivesItemPage(IPage<CorpEquipmentArchivesItemVO> page, CorpEquipmentArchivesItemVO corpEquipmentArchivesItem) {
+		return page.setRecords(baseMapper.selectCorpEquipmentArchivesItemPage(page, corpEquipmentArchivesItem));
+	}
+
+}

+ 103 - 0
blade-service/blade-client/src/main/java/org/springblade/client/equipment/service/impl/CorpEquipmentArchivesServiceImpl.java

@@ -0,0 +1,103 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.equipment.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.seata.spring.annotation.GlobalTransactional;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.client.entity.CorpEquipmentArchives;
+import org.springblade.client.entity.CorpEquipmentArchivesItem;
+import org.springblade.client.equipment.mapper.CorpEquipmentArchivesMapper;
+import org.springblade.client.equipment.service.ICorpEquipmentArchivesItemService;
+import org.springblade.client.equipment.service.ICorpEquipmentArchivesService;
+import org.springblade.client.vo.CorpEquipmentArchivesVO;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 客户设备档案 服务实现类
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+@Service
+@AllArgsConstructor
+@Slf4j
+public class CorpEquipmentArchivesServiceImpl extends ServiceImpl<CorpEquipmentArchivesMapper, CorpEquipmentArchives> implements ICorpEquipmentArchivesService {
+
+
+	private final ICorpEquipmentArchivesItemService corpEquipmentArchivesItemService;
+
+	@Override
+	public IPage<CorpEquipmentArchivesVO> selectCorpEquipmentArchivesPage(IPage<CorpEquipmentArchivesVO> page, CorpEquipmentArchivesVO corpEquipmentArchives) {
+		return page.setRecords(baseMapper.selectCorpEquipmentArchivesPage(page, corpEquipmentArchives));
+	}
+
+	@Override
+	public CorpEquipmentArchives detail(CorpEquipmentArchives corpEquipmentArchives) {
+		CorpEquipmentArchives detail = baseMapper.selectById(corpEquipmentArchives.getCorpId());
+		if (ObjectUtils.isNotNull(detail)) {
+			List<CorpEquipmentArchivesItem> itemList = corpEquipmentArchivesItemService.list(new LambdaQueryWrapper<CorpEquipmentArchivesItem>()
+				.eq(CorpEquipmentArchivesItem::getTenantId, AuthUtil.getTenantId())
+				.eq(CorpEquipmentArchivesItem::getIsDeleted, 0)
+				.eq(CorpEquipmentArchivesItem::getPid, detail.getId()));
+			detail.setCorpEquipmentArchivesItemList(itemList);
+		}
+		return detail;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R submit(CorpEquipmentArchives corpEquipmentArchives) {
+		if (corpEquipmentArchives.getId() == null) {
+			corpEquipmentArchives.setCreateTime(new Date());
+			corpEquipmentArchives.setCreateUser(AuthUtil.getUserId());
+			corpEquipmentArchives.setTenantId(AuthUtil.getTenantId());
+			baseMapper.insert(corpEquipmentArchives);
+		} else {
+			corpEquipmentArchives.setUpdateTime(new Date());
+			corpEquipmentArchives.setUpdateUser(AuthUtil.getUserId());
+			baseMapper.updateById(corpEquipmentArchives);
+		}
+		if (ObjectUtils.isNotNull(corpEquipmentArchives.getCorpEquipmentArchivesItemList())) {
+			for (CorpEquipmentArchivesItem item : corpEquipmentArchives.getCorpEquipmentArchivesItemList()) {
+				if (item.getId() == null) {
+					item.setCreateTime(new Date());
+					item.setCreateUser(AuthUtil.getUserId());
+					item.setTenantId(AuthUtil.getTenantId());
+					item.setPid(corpEquipmentArchives.getId());
+				} else {
+					item.setUpdateTime(new Date());
+					item.setUpdateUser(AuthUtil.getUserId());
+				}
+			}
+			corpEquipmentArchivesItemService.saveOrUpdateBatch(corpEquipmentArchives.getCorpEquipmentArchivesItemList());
+		}
+		return R.data(corpEquipmentArchives);
+	}
+
+}

+ 250 - 0
blade-service/blade-client/src/main/java/org/springblade/client/goods/controller/GoodsTypeProjectController.java

@@ -0,0 +1,250 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.goods.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.client.entity.GoodsDesc;
+import org.springblade.client.entity.GoodsType;
+import org.springblade.client.goods.enums.GoodsTypeEnum;
+import org.springblade.client.goods.service.IGoodsDescService;
+import org.springblade.client.goods.service.IGoodsTypeDescService;
+import org.springblade.client.goods.service.IGoodsTypeService;
+import org.springblade.client.vo.GoodsTypeVO;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 商品类别表 控制器
+ *
+ * @author BladeX
+ * @since 2021-09-18
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/goodsTypeProject")
+@Api(value = "商品类别表", tags = "商品类别表接口")
+public class GoodsTypeProjectController extends BladeController {
+
+	private final IGoodsTypeService goodsTypeService;
+
+	private final IGoodsDescService goodsDescService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入goodsType")
+	public R<GoodsType> detail(GoodsType goodsType) {
+		goodsType.setTenantId(AuthUtil.getTenantId());
+		goodsType.setType(GoodsTypeEnum.PROJECT.getType());
+		GoodsType detail = goodsTypeService.getMessageId(goodsType);
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 商品类别表
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入goodsType")
+	public R<IPage<GoodsType>> list(GoodsType goodsType, Query query) {
+		goodsType.setTenantId(AuthUtil.getTenantId());
+		goodsType.setType(GoodsTypeEnum.PROJECT.getType());
+		IPage<GoodsType> pages = goodsTypeService.page(Condition.getPage(query), Condition.getQueryWrapper(goodsType));
+		return R.data(pages);
+	}
+
+	/**
+	 * 自定义分页 商品类别表
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入goodsType")
+	public R<IPage<GoodsTypeVO>> page(GoodsTypeVO goodsType, Query query) {
+		goodsType.setTenantId(AuthUtil.getTenantId());
+		goodsType.setType(GoodsTypeEnum.PROJECT.getType());
+		IPage<GoodsTypeVO> pages = goodsTypeService.selectGoodsTypePage(Condition.getPage(query), goodsType);
+		return R.data(pages);
+	}
+
+	/**
+	 *商品类别表
+	 */
+	@GetMapping("/listAll")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入goodsType")
+	public R<List<GoodsType>> listAll(GoodsTypeVO goodsType) {
+		goodsType.setTenantId(AuthUtil.getTenantId());
+		goodsType.setType(GoodsTypeEnum.PROJECT.getType());
+		goodsType.setIsDeleted(0);
+		List<GoodsType> list = goodsTypeService.list(Condition.getQueryWrapper(goodsType));
+		return R.data(list);
+	}
+
+	/**
+	 * 新增 商品类别表
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入goodsType")
+	public R save(@Valid @RequestBody GoodsType goodsType) {
+		goodsType.setTenantId(AuthUtil.getTenantId());
+		goodsType.setType(GoodsTypeEnum.PROJECT.getType());
+		return R.status(goodsTypeService.save(goodsType));
+	}
+
+	/**
+	 * 修改 商品类别表
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入goodsType")
+	public R update(@Valid @RequestBody GoodsType goodsType) {
+		if (goodsType.getId() == null) {
+			return R.fail(500, "请选择要删除的数据");
+		}
+		Integer count = goodsTypeService.count(new QueryWrapper<GoodsType>().eq("parent_id", goodsType.getId()).eq("is_deleted", 0));
+		if (count != null && count > 0) {
+			return R.fail(500, "存在下级类别不能删除");
+		}
+		LambdaQueryWrapper<GoodsDesc> lambdaQueryWrapper=new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.apply("find_in_set('"+goodsType.getId()+"',goods_type_id)")
+		    .eq(GoodsDesc::getTenantId,AuthUtil.getTenantId())
+			.eq(GoodsDesc::getIsDeleted,0);
+		if(goodsDescService.count(lambdaQueryWrapper)>0)
+		{
+			return R.fail(500, "存在绑定商品无法删除");
+		}
+		goodsType.setIsDeleted(1);
+		return R.status(goodsTypeService.updateById(goodsType));
+	}
+
+	/**
+	 * 新增或修改 商品类别表
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入goodsType")
+	public R submit(@Valid @RequestBody GoodsType goodsType) {
+		if (StringUtils.isBlank(goodsType.getTenantId())) {
+			goodsType.setTenantId(AuthUtil.getTenantId());
+		}
+		if (StringUtils.isBlank(goodsType.getCname())) {
+			throw new ServiceException("名称不能为空!");
+//			return R.fail(500, "名称不能为空");
+		}
+
+		//goodsTypeService.selectGoodsTypeCname(goodsType);
+		goodsType.setType(GoodsTypeEnum.PROJECT.getType());
+		return R.data(goodsTypeService.saveMessage(goodsType));
+	}
+
+
+	/**
+	 * 删除 商品类别表
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(goodsTypeService.removeByIds(Func.toLongList(ids)));
+	}
+
+	/**
+	 * 获取商品类别树形结构
+	 *
+	 * @return
+	 */
+	@GetMapping("/tree")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "树形结构", notes = "树形结构")
+	public R<List<GoodsTypeVO>> tree(String tenantId, BladeUser bladeUser) {
+		List<GoodsTypeVO> tree = goodsTypeService.tree(Func.toStrWithEmpty(tenantId, bladeUser.getTenantId()), GoodsTypeEnum.PROJECT.getType());
+		return R.data(tree);
+	}
+
+	/**
+	 * 懒加载获取部门树形结构
+	 */
+	@GetMapping("/lazy-tree")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "懒加载树形结构", notes = "树形结构")
+	public R<List<GoodsTypeVO>> lazyTree(String tenantId, Long parentId, BladeUser bladeUser) {
+		List<GoodsTypeVO> tree = goodsTypeService.lazyTree(Func.toStrWithEmpty(tenantId, bladeUser.getTenantId()), parentId, GoodsTypeEnum.PROJECT.getType());
+		return R.data(tree);
+	}
+
+	/**
+	 *商品类别表(app配件-一级)
+	 */
+	@GetMapping("/firstGoodsType")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "商品类别表", notes = "")
+	public R<List<GoodsType>> firstGoodsType() {
+		GoodsType goodsType = new GoodsType();
+		goodsType.setTenantId(AuthUtil.getTenantId());
+		goodsType.setType(GoodsTypeEnum.PROJECT.getType());
+		goodsType.setParentId(0l);
+		goodsType.setIsDeleted(0);
+		goodsType.setStatus(0);
+		List<GoodsType> list = goodsTypeService.list(Condition.getQueryWrapper(goodsType));
+		return R.data(list);
+	}
+
+	/**
+	 *商品类别表(app配件-二级)
+	 */
+	@GetMapping("/secondGoodsType")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "商品类别表", notes = "")
+	public R<List<GoodsType>> secondGoodsType(@RequestParam("id") Long id) {
+		LambdaQueryWrapper<GoodsType> goodsTypeLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		goodsTypeLambdaQueryWrapper.eq(GoodsType::getTenantId,AuthUtil.getTenantId());
+		goodsTypeLambdaQueryWrapper.eq(GoodsType::getIsDeleted,0);
+		goodsTypeLambdaQueryWrapper.eq(GoodsType::getType,GoodsTypeEnum.PROJECT.getType());
+		goodsTypeLambdaQueryWrapper.eq(GoodsType::getStatus,0);
+		if (ObjectUtils.isNotNull(id)){
+			goodsTypeLambdaQueryWrapper.eq(GoodsType::getParentId,id);
+		}else{
+			goodsTypeLambdaQueryWrapper.gt(GoodsType::getParentId,0);
+		}
+		List<GoodsType> list = goodsTypeService.list(goodsTypeLambdaQueryWrapper);
+		return R.data(list);
+	}
+
+
+}

+ 3 - 48
blade-service/blade-client/src/main/java/org/springblade/client/goods/service/impl/GoodsDescServiceImpl.java

@@ -23,6 +23,7 @@ import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import org.springblade.client.corps.mapper.CorpsDescMapper;
 import org.springblade.client.dto.GoodsDescDto;
@@ -690,7 +691,8 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, GoodsDesc
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public void modifyParts(GoodsDescDto goodsDescDto) {
 		LambdaQueryWrapper<GoodsDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(GoodsDesc::getType, 0);
@@ -707,9 +709,6 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, GoodsDesc
 		}
 
 		List<GoodsFiles> filesList = goodsDescDto.getFilesList();
-
-		List<StockGoods> stockGoodsList = goodsDescDto.getStockGoodsList();
-
 		GoodsDesc goodsDesc = BeanUtil.copy(goodsDescDto, GoodsDesc.class);
 
 		Long id = goodsDesc.getId();
@@ -723,8 +722,6 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, GoodsDesc
 			goodsDesc.setCreateUser(SecureUtil.getUserId());
 
 			goodsDescMapper.insert(goodsDesc);
-			// ExcelProperty
-
 			if (!CollectionUtils.isEmpty(filesList)) {
 				int count = 0;
 				for (GoodsFiles goodsFiles : filesList) {
@@ -739,27 +736,6 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, GoodsDesc
 					count++;
 				}
 			}
-			/*if (!CollectionUtils.isEmpty(stockGoodsList)) {
-				stockGoodsList.forEach(k -> {
-					k.setSurplusRouteQuantity(k.getBalanceQuantity());
-					k.setPurchasePrice(goodsDesc.getPurchasePrice());
-					k.setStockPrice(goodsDesc.getPurchasePrice());
-					k.setBalanceAmount(k.getBalanceQuantity().multiply(goodsDesc.getPurchasePrice()));
-					if (k.getId() == null) {
-						k.setTenantId(AuthUtil.getTenantId());
-						k.setGoodsId(goodsDesc.getId());
-						R<StockGoodsVO> r = stockGoodsClient.selectStockParts(null, k.getStorageId(), goodsDesc.getId(), null, null, null, null, null, null);
-						if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
-							throw new RuntimeException("库存存在重复,请修改原库存");
-						}
-						stockGoodsClient.saveStock(k);
-					} else {
-						k.setUpdateTime(new Date());
-						k.setUpdateUser(SecureUtil.getUserId());
-						stockGoodsClient.updateStock(k);
-					}
-				});
-			}*/
 		}
 		// 主表修改,子表看情况
 		else {
@@ -798,27 +774,6 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, GoodsDesc
 					count++;
 				}
 			}
-			/*if (!CollectionUtils.isEmpty(stockGoodsList)) {
-				stockGoodsList.forEach(k -> {
-					k.setSurplusRouteQuantity(k.getBalanceQuantity());
-					k.setPurchasePrice(goodsDesc.getPurchasePrice());
-					k.setStockPrice(goodsDesc.getPurchasePrice());
-					k.setBalanceAmount(k.getBalanceQuantity().multiply(goodsDesc.getPurchasePrice()));
-					if (k.getId() == null) {
-						k.setTenantId(AuthUtil.getTenantId());
-						k.setGoodsId(goodsDesc.getId());
-						R<StockGoodsVO> r = stockGoodsClient.selectStockParts(null, k.getStorageId(), goodsDesc.getId(), null, null, null, null, null, null);
-						if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
-							throw new RuntimeException("库存存在重复,请修改原库存");
-						}
-						stockGoodsClient.saveStock(k);
-					} else {
-						k.setUpdateTime(new Date());
-						k.setUpdateUser(SecureUtil.getUserId());
-						stockGoodsClient.updateStock(k);
-					}
-				});
-			}*/
 		}
 		goodsDescDto.setId(goodsDesc.getId());
 	}

+ 170 - 0
blade-service/blade-client/src/main/java/org/springblade/client/project/controller/ProjectGoodsController.java

@@ -0,0 +1,170 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.project.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.client.entity.GoodsType;
+import org.springblade.client.entity.ProjectGoods;
+import org.springblade.client.goods.service.IGoodsTypeService;
+import org.springblade.client.project.service.IProjectGoodsService;
+import org.springblade.client.vo.ProjectGoodsVO;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 配件项目商品 控制器
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/projectGoods")
+@Api(value = "配件项目商品", tags = "配件项目商品接口")
+public class ProjectGoodsController extends BladeController {
+
+	private final IProjectGoodsService projectGoodsService;
+
+	private final IGoodsTypeService goodsTypeService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入projectGoods")
+	public R<ProjectGoods> detail(ProjectGoods projectGoods) {
+		ProjectGoods detail = projectGoodsService.getOne(Condition.getQueryWrapper(projectGoods));
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 配件项目商品
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入projectGoods")
+	public R<IPage<ProjectGoods>> list(ProjectGoods projectGoods, Query query) {
+		LambdaQueryWrapper<ProjectGoods> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		//指定分类为一级分类,查询此分类所有二级分类的商品
+		if (StringUtils.isNotBlank(projectGoods.getGoodsTypeId())) {
+			Long goodsId = Long.parseLong(projectGoods.getGoodsTypeId());
+			List<Long> goodsIdList = new ArrayList<>();
+			selectChildById(goodsId, goodsIdList);
+			goodsIdList.add(goodsId);
+			lambdaQueryWrapper.in(ProjectGoods::getGoodsTypeId, goodsIdList);
+		}
+		lambdaQueryWrapper.eq(ProjectGoods::getTenantId, AuthUtil.getTenantId())
+			.eq(ProjectGoods::getIsDeleted, 0)
+			.like(StringUtils.isNotBlank(projectGoods.getBrand()), ProjectGoods::getBrand, projectGoods.getBrand())//花纹
+			.eq(ObjectUtils.isNotEmpty(projectGoods.getSpecs()), ProjectGoods::getSpecs, projectGoods.getSpecs())//品牌
+			.like(ObjectUtils.isNotEmpty(projectGoods.getCnameInt()), ProjectGoods::getCnameInt, projectGoods.getCnameInt());//
+		if (ObjectUtil.isNotEmpty(projectGoods.getCname())) {
+			lambdaQueryWrapper.and(i -> i.like(ProjectGoods::getCname, projectGoods.getCname()).or().like(ProjectGoods::getCnameInt, projectGoods.getCname()));
+		}
+		lambdaQueryWrapper.orderByDesc(ProjectGoods::getCreateTime);
+		IPage<ProjectGoods> pages = projectGoodsService.page(Condition.getPage(query), Condition.getQueryWrapper(projectGoods));
+		return R.data(pages);
+	}
+
+	/**
+	 * 自定义分页 配件项目商品
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入projectGoods")
+	public R<IPage<ProjectGoodsVO>> page(ProjectGoodsVO projectGoods, Query query) {
+		IPage<ProjectGoodsVO> pages = projectGoodsService.selectProjectGoodsPage(Condition.getPage(query), projectGoods);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增 配件项目商品
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入projectGoods")
+	public R save(@Valid @RequestBody ProjectGoods projectGoods) {
+		return R.status(projectGoodsService.save(projectGoods));
+	}
+
+	/**
+	 * 修改 配件项目商品
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入projectGoods")
+	public R update(@Valid @RequestBody ProjectGoods projectGoods) {
+		return R.status(projectGoodsService.updateById(projectGoods));
+	}
+
+	/**
+	 * 新增或修改 配件项目商品
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入projectGoods")
+	public R submit(@Valid @RequestBody ProjectGoods projectGoods) {
+		return projectGoodsService.submit(projectGoods);
+	}
+
+
+	/**
+	 * 删除 配件项目商品
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(projectGoodsService.removeByIds(Func.toLongList(ids)));
+	}
+
+
+	/**
+	 * 递归查询ID
+	 */
+	private void selectChildById(Long id, List<Long> idList) {
+		LambdaQueryWrapper<GoodsType> idListWrapper = new LambdaQueryWrapper<>();
+		idListWrapper.select(GoodsType::getId);
+		idListWrapper.eq(GoodsType::getParentId, id);
+		List<GoodsType> childIdList = goodsTypeService.list(idListWrapper);
+		childIdList.forEach(item -> {
+			idList.add(item.getId());
+			this.selectChildById(item.getId(), idList);
+		});
+	}
+
+
+}

+ 126 - 0
blade-service/blade-client/src/main/java/org/springblade/client/project/controller/ProjectGoodsFilesController.java

@@ -0,0 +1,126 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.project.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import lombok.AllArgsConstructor;
+import javax.validation.Valid;
+
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.client.entity.ProjectGoodsFiles;
+import org.springblade.client.vo.ProjectGoodsFilesVO;
+import org.springblade.client.project.service.IProjectGoodsFilesService;
+import org.springblade.core.boot.ctrl.BladeController;
+
+/**
+ * 配件项目商品附件表 控制器
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/projectgoodsfiles")
+@Api(value = "配件项目商品附件表", tags = "配件项目商品附件表接口")
+public class ProjectGoodsFilesController extends BladeController {
+
+	private final IProjectGoodsFilesService projectGoodsFilesService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入projectGoodsFiles")
+	public R<ProjectGoodsFiles> detail(ProjectGoodsFiles projectGoodsFiles) {
+		ProjectGoodsFiles detail = projectGoodsFilesService.getOne(Condition.getQueryWrapper(projectGoodsFiles));
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 配件项目商品附件表
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入projectGoodsFiles")
+	public R<IPage<ProjectGoodsFiles>> list(ProjectGoodsFiles projectGoodsFiles, Query query) {
+		IPage<ProjectGoodsFiles> pages = projectGoodsFilesService.page(Condition.getPage(query), Condition.getQueryWrapper(projectGoodsFiles));
+		return R.data(pages);
+	}
+
+	/**
+	 * 自定义分页 配件项目商品附件表
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入projectGoodsFiles")
+	public R<IPage<ProjectGoodsFilesVO>> page(ProjectGoodsFilesVO projectGoodsFiles, Query query) {
+		IPage<ProjectGoodsFilesVO> pages = projectGoodsFilesService.selectProjectGoodsFilesPage(Condition.getPage(query), projectGoodsFiles);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增 配件项目商品附件表
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入projectGoodsFiles")
+	public R save(@Valid @RequestBody ProjectGoodsFiles projectGoodsFiles) {
+		return R.status(projectGoodsFilesService.save(projectGoodsFiles));
+	}
+
+	/**
+	 * 修改 配件项目商品附件表
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入projectGoodsFiles")
+	public R update(@Valid @RequestBody ProjectGoodsFiles projectGoodsFiles) {
+		return R.status(projectGoodsFilesService.updateById(projectGoodsFiles));
+	}
+
+	/**
+	 * 新增或修改 配件项目商品附件表
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入projectGoodsFiles")
+	public R submit(@Valid @RequestBody ProjectGoodsFiles projectGoodsFiles) {
+		return R.status(projectGoodsFilesService.saveOrUpdate(projectGoodsFiles));
+	}
+
+
+	/**
+	 * 删除 配件项目商品附件表
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(projectGoodsFilesService.removeByIds(Func.toLongList(ids)));
+	}
+
+
+}

+ 42 - 0
blade-service/blade-client/src/main/java/org/springblade/client/project/mapper/ProjectGoodsFilesMapper.java

@@ -0,0 +1,42 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.project.mapper;
+
+import org.springblade.client.entity.ProjectGoodsFiles;
+import org.springblade.client.vo.ProjectGoodsFilesVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 配件项目商品附件表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+public interface ProjectGoodsFilesMapper extends BaseMapper<ProjectGoodsFiles> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param projectGoodsFiles
+	 * @return
+	 */
+	List<ProjectGoodsFilesVO> selectProjectGoodsFilesPage(IPage page, ProjectGoodsFilesVO projectGoodsFiles);
+
+}

+ 28 - 0
blade-service/blade-client/src/main/java/org/springblade/client/project/mapper/ProjectGoodsFilesMapper.xml

@@ -0,0 +1,28 @@
+<?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="org.springblade.client.project.mapper.ProjectGoodsFilesMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="projectGoodsFilesResultMap" type="org.springblade.client.entity.ProjectGoodsFiles">
+        <id column="id" property="id"/>
+        <result column="pid" property="pid"/>
+        <result column="sort" property="sort"/>
+        <result column="file_name" property="fileName"/>
+        <result column="url" property="url"/>
+        <result column="remarks" property="remarks"/>
+        <result column="version" property="version"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_dept" property="createDept"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+    </resultMap>
+
+
+    <select id="selectProjectGoodsFilesPage" resultMap="projectGoodsFilesResultMap">
+        select * from basic_project_goods_files where is_deleted = 0
+    </select>
+
+</mapper>

+ 42 - 0
blade-service/blade-client/src/main/java/org/springblade/client/project/mapper/ProjectGoodsMapper.java

@@ -0,0 +1,42 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.project.mapper;
+
+import org.springblade.client.entity.ProjectGoods;
+import org.springblade.client.vo.ProjectGoodsVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 配件项目商品 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+public interface ProjectGoodsMapper extends BaseMapper<ProjectGoods> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param projectGoods
+	 * @return
+	 */
+	List<ProjectGoodsVO> selectProjectGoodsPage(IPage page, ProjectGoodsVO projectGoods);
+
+}

+ 46 - 0
blade-service/blade-client/src/main/java/org/springblade/client/project/mapper/ProjectGoodsMapper.xml

@@ -0,0 +1,46 @@
+<?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="org.springblade.client.project.mapper.ProjectGoodsMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="projectGoodsResultMap" type="org.springblade.client.entity.ProjectGoods">
+        <id column="id" property="id"/>
+        <result column="cname" property="cname"/>
+        <result column="cname_int" property="cnameInt"/>
+        <result column="ename" property="ename"/>
+        <result column="name_description" property="nameDescription"/>
+        <result column="cname_description" property="cnameDescription"/>
+        <result column="unit" property="unit"/>
+        <result column="brand" property="brand"/>
+        <result column="specs" property="specs"/>
+        <result column="category" property="category"/>
+        <result column="categoryitem" property="categoryitem"/>
+        <result column="length_unit" property="lengthUnit"/>
+        <result column="weight_unit" property="weightUnit"/>
+        <result column="packgeunit" property="packgeunit"/>
+        <result column="single_volumn" property="singleVolumn"/>
+        <result column="single_gross_weight" property="singleGrossWeight"/>
+        <result column="single_weight" property="singleWeight"/>
+        <result column="warranty_period" property="warrantyPeriod"/>
+        <result column="price" property="price"/>
+        <result column="remarks" property="remarks"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="corp_id" property="corpId"/>
+        <result column="corp_name" property="corpName"/>
+        <result column="exit_date" property="exitDate"/>
+        <result column="maintenance_date" property="maintenanceDate"/>
+        <result column="src_id" property="srcId"/>
+        <result column="goods_type_id" property="goodsTypeId"/>
+    </resultMap>
+
+
+    <select id="selectProjectGoodsPage" resultMap="projectGoodsResultMap">
+        select * from basic_project_goods where is_deleted = 0
+    </select>
+
+</mapper>

+ 41 - 0
blade-service/blade-client/src/main/java/org/springblade/client/project/service/IProjectGoodsFilesService.java

@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.project.service;
+
+import org.springblade.client.entity.ProjectGoodsFiles;
+import org.springblade.client.vo.ProjectGoodsFilesVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 配件项目商品附件表 服务类
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+public interface IProjectGoodsFilesService extends IService<ProjectGoodsFiles> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param projectGoodsFiles
+	 * @return
+	 */
+	IPage<ProjectGoodsFilesVO> selectProjectGoodsFilesPage(IPage<ProjectGoodsFilesVO> page, ProjectGoodsFilesVO projectGoodsFiles);
+
+}

+ 43 - 0
blade-service/blade-client/src/main/java/org/springblade/client/project/service/IProjectGoodsService.java

@@ -0,0 +1,43 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.project.service;
+
+import org.springblade.client.entity.ProjectGoods;
+import org.springblade.client.vo.ProjectGoodsVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.tool.api.R;
+
+/**
+ * 配件项目商品 服务类
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+public interface IProjectGoodsService extends IService<ProjectGoods> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param projectGoods
+	 * @return
+	 */
+	IPage<ProjectGoodsVO> selectProjectGoodsPage(IPage<ProjectGoodsVO> page, ProjectGoodsVO projectGoods);
+
+	R submit(ProjectGoods projectGoods);
+}

+ 41 - 0
blade-service/blade-client/src/main/java/org/springblade/client/project/service/impl/ProjectGoodsFilesServiceImpl.java

@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.project.service.impl;
+
+import org.springblade.client.entity.ProjectGoodsFiles;
+import org.springblade.client.vo.ProjectGoodsFilesVO;
+import org.springblade.client.project.mapper.ProjectGoodsFilesMapper;
+import org.springblade.client.project.service.IProjectGoodsFilesService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 配件项目商品附件表 服务实现类
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+@Service
+public class ProjectGoodsFilesServiceImpl extends ServiceImpl<ProjectGoodsFilesMapper, ProjectGoodsFiles> implements IProjectGoodsFilesService {
+
+	@Override
+	public IPage<ProjectGoodsFilesVO> selectProjectGoodsFilesPage(IPage<ProjectGoodsFilesVO> page, ProjectGoodsFilesVO projectGoodsFiles) {
+		return page.setRecords(baseMapper.selectProjectGoodsFilesPage(page, projectGoodsFiles));
+	}
+
+}

+ 100 - 0
blade-service/blade-client/src/main/java/org/springblade/client/project/service/impl/ProjectGoodsServiceImpl.java

@@ -0,0 +1,100 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.client.project.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.seata.spring.annotation.GlobalTransactional;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.client.entity.GoodsFiles;
+import org.springblade.client.entity.ProjectGoods;
+import org.springblade.client.entity.ProjectGoodsFiles;
+import org.springblade.client.goods.service.IGoodsFilesService;
+import org.springblade.client.project.mapper.ProjectGoodsMapper;
+import org.springblade.client.project.service.IProjectGoodsFilesService;
+import org.springblade.client.project.service.IProjectGoodsService;
+import org.springblade.client.vo.ProjectGoodsVO;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 配件项目商品 服务实现类
+ *
+ * @author BladeX
+ * @since 2023-08-09
+ */
+@Service
+@AllArgsConstructor
+@Slf4j
+public class ProjectGoodsServiceImpl extends ServiceImpl<ProjectGoodsMapper, ProjectGoods> implements IProjectGoodsService {
+
+	private final IGoodsFilesService goodsFilesService;
+
+	private final IProjectGoodsFilesService projectGoodsFilesService;
+
+	@Override
+	public IPage<ProjectGoodsVO> selectProjectGoodsPage(IPage<ProjectGoodsVO> page, ProjectGoodsVO projectGoods) {
+		return page.setRecords(baseMapper.selectProjectGoodsPage(page, projectGoods));
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R submit(ProjectGoods projectGoods) {
+		List<ProjectGoodsFiles> projectGoodsFilesList = new ArrayList<>();
+		if (projectGoods.getId() == null) {
+			projectGoods.setCreateTime(new Date());
+			projectGoods.setCreateUser(AuthUtil.getUserId());
+			projectGoods.setTenantId(AuthUtil.getTenantId());
+			baseMapper.insert(projectGoods);
+			List<GoodsFiles> goodsFilesList = goodsFilesService.list(new LambdaQueryWrapper<GoodsFiles>()
+				.eq(GoodsFiles::getIsDeleted, 0)
+				.eq(GoodsFiles::getTenantId, AuthUtil.getTenantId())
+				.eq(GoodsFiles::getPid, projectGoods.getSrcId()));
+			for (GoodsFiles item : goodsFilesList) {
+				ProjectGoodsFiles projectGoodsFiles = new ProjectGoodsFiles();
+				BeanUtil.copyProperties(item, projectGoodsFiles);
+				projectGoodsFiles.setId(null);
+				projectGoodsFiles.setPid(projectGoods.getId());
+				projectGoodsFiles.setCreateTime(new Date());
+				projectGoodsFiles.setCreateUser(AuthUtil.getUserId());
+				projectGoodsFilesList.add(projectGoodsFiles);
+			}
+		} else {
+			projectGoods.setUpdateTime(new Date());
+			projectGoods.setUpdateUser(AuthUtil.getUserId());
+			baseMapper.updateById(projectGoods);
+		}
+		if (ObjectUtils.isNotNull(projectGoods.getProjectGoodsFilesList())) {
+			projectGoodsFilesList.addAll(projectGoods.getProjectGoodsFilesList());
+		}
+		projectGoodsFilesService.saveOrUpdateBatch(projectGoodsFilesList);
+		projectGoods.setProjectGoodsFilesList(projectGoodsFilesList);
+		return R.data(projectGoods);
+	}
+
+}

+ 2 - 2
blade-service/blade-client/src/main/java/org/springblade/client/scheduled/CorpsProfitTimer.java

@@ -89,10 +89,10 @@ public class CorpsProfitTimer {
 	/**
 	 * 达沃特 48 小时内 为付款账单驳回审核 且释放库存
 	 */
-	@XxlJob("releaseStock")
+	/*@XxlJob("releaseStock")
 	public void releaseStock() {
 		//获取 48 小时内提交审核未 付款的销售订单
 		orderDescClient.releaseStock(null);
 		//释放库存撤销审核
-	}
+	}*/
 }

+ 13 - 0
blade-service/blade-land/src/main/java/org/springblade/land/handler/LocateJobHandler.java

@@ -10,6 +10,7 @@ import lombok.AllArgsConstructor;
 import org.springblade.core.cache.utils.CacheUtil;
 import org.springblade.land.constant.LandConst;
 import org.springblade.land.entity.TrackKey;
+import org.springblade.purchase.sales.feign.IOrderDescClient;
 import org.springframework.stereotype.Component;
 
 import java.util.HashMap;
@@ -21,6 +22,8 @@ import java.util.concurrent.*;
 @AllArgsConstructor
 public class LocateJobHandler {
 
+	private final IOrderDescClient orderDescClient;
+
 	@XxlJob("locateJobHandler")
 	public ReturnT<String> locateJobHandler(String param) throws Exception {
 		// 创建线程池
@@ -74,4 +77,14 @@ public class LocateJobHandler {
 		}
 	}
 
+	/**
+	 * 达沃特 48 小时内 为付款账单驳回审核 且释放库存
+	 */
+	@XxlJob("releaseStock")
+	public void releaseStock() {
+		//获取 48 小时内提交审核未 付款的销售订单
+		orderDescClient.releaseStock(null);
+		//释放库存撤销审核
+	}
+
 }

+ 5 - 2
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/IntegralDetailController.java

@@ -25,6 +25,7 @@ import javax.validation.Valid;
 
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.web.bind.annotation.*;
@@ -66,6 +67,8 @@ public class IntegralDetailController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入integralDetail")
 	public R<IPage<IntegralDetail>> list(IntegralDetail integralDetail, Query query) {
+		integralDetail.setTenantId(AuthUtil.getTenantId());
+		integralDetail.setIsDeleted(0);
 		IPage<IntegralDetail> pages = integralDetailService.page(Condition.getPage(query), Condition.getQueryWrapper(integralDetail));
 		return R.data(pages);
 	}
@@ -111,7 +114,7 @@ public class IntegralDetailController extends BladeController {
 		return R.status(integralDetailService.saveOrUpdate(integralDetail));
 	}
 
-	
+
 	/**
 	 * 删除 积分明细表
 	 */
@@ -122,5 +125,5 @@ public class IntegralDetailController extends BladeController {
 		return R.status(integralDetailService.removeByIds(Func.toLongList(ids)));
 	}
 
-	
+
 }

+ 2 - 2
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -6545,11 +6545,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				BigDecimal balanceAmount = new BigDecimal("0.00");
 				GoodsDesc goodsDesc = goodsDescList.stream().filter(e -> e.getId().equals(orderItems.getItemId())).findFirst().orElse(new GoodsDesc());
 				if (ObjectUtils.isNotNull(goodsDesc)) {
-					orderAmount = orderAmount.add(goodsDesc.getIntegral().multiply(orderItems.getStorageInQuantity()));
 					goodsName.append(goodsDesc.getCname()).append(",");
 					goodsIds.append(goodsDesc.getId()).append(",");
 				}
-
+				orderAmount = orderAmount.add(orderItems.getPrice().multiply(orderItems.getStorageInQuantity()));
 				R<StockGoodsVO> r = stockGoodsClient.selectStockParts(null, orderItems.getStorageId(), orderItems.getItemId(), null, null, null, null, null, null);
 				if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
 					if (r.getData().getSurplusRouteQuantity().compareTo(orderItems.getStorageInQuantity()) < 0) {
@@ -6576,6 +6575,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			List<OrderItems> orderItemsList = orderItemsService.saveOrderItemsMessage(order.getOrderItemsList(), date, order.getId());
 			order.setOrderItemsList(orderItemsList);
 			order.setOrderAmount(orderAmount);
+			order.setGoodsList(goodsName.toString());
 			//入库出库数量
 			order.setStorageQuantity(order.getOrderItemsList().stream().map(OrderItems::getStorageInQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 		}