Browse Source

2025年2月10日17:10:58

纪新园 1 year ago
parent
commit
0049c69409
25 changed files with 1214 additions and 14 deletions
  1. 2 2
      blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java
  2. 4 5
      blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/OssEndpoint.java
  3. 34 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/produce/dto/ProductWorkmanshipDTO.java
  4. 34 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/produce/dto/ProductWorkmanshipItemsDTO.java
  5. 128 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/produce/entity/ProductWorkmanship.java
  6. 129 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/produce/entity/ProductWorkmanshipItems.java
  7. 36 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/produce/vo/ProductWorkmanshipItemsVO.java
  8. 36 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/produce/vo/ProductWorkmanshipVO.java
  9. 1 1
      blade-service/blade-client/src/main/java/org/springblade/client/equipment/service/impl/CorpEquipmentArchivesServiceImpl.java
  10. 1 1
      blade-service/blade-client/src/main/java/org/springblade/client/serial/service/impl/TableMessageServiceImpl.java
  11. 1 1
      blade-service/blade-client/src/main/resources/application-dev.yml
  12. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/edi/api/EDISender.java
  13. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/edi/service/impl/EDISenderServiceImpl.java
  14. 154 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/controller/ProductWorkmanshipController.java
  15. 126 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/controller/ProductWorkmanshipItemsController.java
  16. 121 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/controller/ProductionOrderController.java
  17. 42 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/mapper/ProductWorkmanshipItemsMapper.java
  18. 31 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/mapper/ProductWorkmanshipItemsMapper.xml
  19. 42 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/mapper/ProductWorkmanshipMapper.java
  20. 27 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/mapper/ProductWorkmanshipMapper.xml
  21. 41 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/service/IProductWorkmanshipItemsService.java
  22. 45 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/service/IProductWorkmanshipService.java
  23. 41 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/service/impl/ProductWorkmanshipItemsServiceImpl.java
  24. 134 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/service/impl/ProductWorkmanshipServiceImpl.java
  25. 2 2
      blade-service/blade-weChat/src/main/java/org/springblade/weChat/QRCode/WechatQRCodeController.java

+ 2 - 2
blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java

@@ -74,12 +74,12 @@ public interface LauncherConstant {
 	/**
 	 * nacos prod 地址
 	 */
-	String NACOS_PROD_ADDR = "121.37.83.47:8848";
+	String NACOS_PROD_ADDR = "139.9.191.155:8848";
 
 	/**
 	 * nacos test 地址
 	 */
-	String NACOS_TEST_ADDR = "121.37.83.47:8848";
+	String NACOS_TEST_ADDR = "139.9.191.155:8848";
 
 	/**
 	 * nacos dev 用戶名

+ 4 - 5
blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/OssEndpoint.java

@@ -180,7 +180,7 @@ public class OssEndpoint {
 		}
 		String link = bladeFile.getLink();
 		System.err.println("link:" + link);
-		//String replace = link.replace("http://121.37.83.47:9000/", "https://trade.tubaosoft.com/file/");
+		//String replace = link.replace("http://139.9.191.155:9000/", "https://trade.tubaosoft.com/file/");
 		String replace = "";
 		if (ObjectUtils.isNotNull(status) && "获取数据失败".equals(status)) {
 			if (ObjectUtils.isNotNull(replaceUrl)&& "获取数据失败".equals(replaceUrl)){
@@ -189,7 +189,7 @@ public class OssEndpoint {
 				replace = link.replace(status + ":9000/", status + "/file/");
 			}
 		} else {
-			replace = link.replace("http://121.37.83.47:9000/", "http://121.37.83.47/file/");
+			replace = link.replace("http://139.9.191.155:9000/", "http://139.9.191.155/file/");
 		}
 		System.err.println("replace:" + replace);
 		bladeFile.setLink(replace);
@@ -213,7 +213,7 @@ public class OssEndpoint {
 		if (ObjectUtils.isNotNull(status)) {
 			replace = link.replace(status + ":9000/", status + "/file/");
 		} else {
-			replace = link.replace("http://121.37.83.47:9000/", "https://trade.re-king.cn/file/");
+			replace = link.replace("http://139.9.191.155:9000/", "https://trade.re-king.cn/file/");
 		}
 		System.out.println("replace======>" + replace);
 		bladeFile.setLink(replace);
@@ -231,13 +231,12 @@ public class OssEndpoint {
 	public R<BladeFile> putFileNoLogin(@RequestParam("file") MultipartFile file, @RequestParam("tenantId") String tenantId) {
 		BladeFile bladeFile = ossBuilder.initTemplate(tenantId).putFile(file.getOriginalFilename(), file.getInputStream());
 		String link = bladeFile.getLink();
-		//String replace = link.replace("http://121.37.83.47:9000/", "https://trade.tubaosoft.com/file/");
 		String status = sysClient.getParamService("upload.url");
 		String replace = "";
 		if (ObjectUtils.isNotNull(status)) {
 			replace = link.replace(status + ":9000/", status + "/file/");
 		} else {
-			replace = link.replace("http://121.37.83.47:9000/", "http://121.37.83.47/file/");
+			replace = link.replace("http://139.9.191.155:9000/", "http://139.9.191.155/file/");
 		}
 		bladeFile.setLink(replace);
 		return R.data(bladeFile);

+ 34 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/produce/dto/ProductWorkmanshipDTO.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.salesPart.produce.dto;
+
+import org.springblade.salesPart.produce.entity.ProductWorkmanship;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 产品工艺数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2025-02-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ProductWorkmanshipDTO extends ProductWorkmanship {
+	private static final long serialVersionUID = 1L;
+
+}

+ 34 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/produce/dto/ProductWorkmanshipItemsDTO.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.salesPart.produce.dto;
+
+import org.springblade.salesPart.produce.entity.ProductWorkmanshipItems;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 产品工艺明细数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2025-02-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ProductWorkmanshipItemsDTO extends ProductWorkmanshipItems {
+	private static final long serialVersionUID = 1L;
+
+}

+ 128 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/produce/entity/ProductWorkmanship.java

@@ -0,0 +1,128 @@
+/*
+ *      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.salesPart.produce.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 org.springblade.core.secure.utils.AuthUtil;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 产品工艺实体类
+ *
+ * @author BladeX
+ * @since 2025-02-10
+ */
+@Data
+@TableName("pjpf_product_workmanship")
+@ApiModel(value = "ProductWorkmanship对象", description = "产品工艺")
+public class ProductWorkmanship implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+	/**
+	 * 创建人
+	 */
+	@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 isDeleted;
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
+	/**
+	 * 订单状态
+	 */
+	@ApiModelProperty(value = "订单状态")
+	private String status;
+	/**
+	 * 产品id
+	 */
+	@ApiModelProperty(value = "产品id")
+	private Long goodsId;
+	/**
+	 * 产品名称
+	 */
+	@ApiModelProperty(value = "产品名称")
+	private String goodsName;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private String createUserName;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private String updateUserName;
+	/**
+	 * 租户id
+	 */
+	@ApiModelProperty(value = "租户id")
+	private String tenantId;
+
+	/**
+	 * 属性明细
+	 */
+	@TableField(exist = false)
+	private List<ProductWorkmanshipItems> attributeItemsList;
+
+	/**
+	 * 工艺明细
+	 */
+	@TableField(exist = false)
+	private List<ProductWorkmanshipItems> craftItemsList;
+
+	/**
+	 * 明细数量
+	 */
+	@TableField(exist = false)
+	private long count;
+
+}

+ 129 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/produce/entity/ProductWorkmanshipItems.java

@@ -0,0 +1,129 @@
+/*
+ *      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.salesPart.produce.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.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * 产品工艺明细实体类
+ *
+ * @author BladeX
+ * @since 2025-02-10
+ */
+@Data
+@TableName("pjpf_product_workmanship_items")
+@ApiModel(value = "ProductWorkmanshipItems对象", description = "产品工艺明细")
+public class ProductWorkmanshipItems implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+	/**
+	 * 主表id
+	 */
+	@ApiModelProperty(value = "主表id")
+	private Long pid;
+	/**
+	 * 创建人
+	 */
+	@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 isDeleted;
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
+	/**
+	 * 订单状态
+	 */
+	@ApiModelProperty(value = "订单状态")
+	private String status;
+	/**
+	 * 属性编号
+	 */
+	@ApiModelProperty(value = "属性编号")
+	private String attributeNo;
+	/**
+	 * 属性名称
+	 */
+	@ApiModelProperty(value = "属性名称")
+	private String attributeName;
+	/**
+	 * 属性值
+	 */
+	@ApiModelProperty(value = "属性值")
+	private String attributeValue;
+	/**
+	 * 是否开启
+	 */
+	@ApiModelProperty(value = "是否开启")
+	private String whetherOpen;
+	/**
+	 * 明细类型  1=产品属性 2工艺流程
+	 */
+	@ApiModelProperty(value = "明细类型  1=产品属性 2工艺流程")
+	private String type;
+	/**
+	 * 工序
+	 */
+	@ApiModelProperty(value = "工序")
+	private String productionProcesses;
+	/**
+	 * 组装里程进度
+	 */
+	@ApiModelProperty(value = "组装里程进度")
+	private String assemblyMileageProgress;
+	/**
+	 * 租户id
+	 */
+	@ApiModelProperty(value = "租户id")
+	private String tenantId;
+
+
+}

+ 36 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/produce/vo/ProductWorkmanshipItemsVO.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.salesPart.produce.vo;
+
+import org.springblade.salesPart.produce.entity.ProductWorkmanshipItems;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * 产品工艺明细视图实体类
+ *
+ * @author BladeX
+ * @since 2025-02-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "ProductWorkmanshipItemsVO对象", description = "产品工艺明细")
+public class ProductWorkmanshipItemsVO extends ProductWorkmanshipItems {
+	private static final long serialVersionUID = 1L;
+
+}

+ 36 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/produce/vo/ProductWorkmanshipVO.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.salesPart.produce.vo;
+
+import org.springblade.salesPart.produce.entity.ProductWorkmanship;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * 产品工艺视图实体类
+ *
+ * @author BladeX
+ * @since 2025-02-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "ProductWorkmanshipVO对象", description = "产品工艺")
+public class ProductWorkmanshipVO extends ProductWorkmanship {
+	private static final long serialVersionUID = 1L;
+
+}

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

@@ -187,7 +187,7 @@ public class CorpEquipmentArchivesServiceImpl extends ServiceImpl<CorpEquipmentA
 						//生成二维码
 						String qRCode = QRCodeTest.generateQRCode(qRCodeFile, item.getId() + "");
 						//替换地址
-						qRCode = qRCode.replace("/home/minio", "http://121.37.83.47");
+						qRCode = qRCode.replace("/home/minio", "http://139.9.191.155");
 						item.setUrl(qRCode);
 					} catch (IOException e) {
 						throw new SecurityException("生成二维码失败");

+ 1 - 1
blade-service/blade-client/src/main/java/org/springblade/client/serial/service/impl/TableMessageServiceImpl.java

@@ -76,7 +76,7 @@ public class TableMessageServiceImpl extends ServiceImpl<TableMessageMapper, Tab
 				BladeFile bladeFile = minioTemplate.putFile(bucketName, fileName, multipartFile.getInputStream());
 				if (StringUtils.isNotBlank(bladeFile.getLink())) {
 					String link = bladeFile.getLink();
-					String replace = link.replace("http://121.37.83.47:9000/", "http://trade.tubaosoft.com/file/");
+					String replace = link.replace("http://139.9.191.155:9000/", "http://trade.tubaosoft.com/file/");
 					bladeFile.setLink(replace);
 					tableMessage.setFileUrl(bladeFile.getLink());
 				} else {

+ 1 - 1
blade-service/blade-client/src/main/resources/application-dev.yml

@@ -14,7 +14,7 @@ oss:
   enabled: true
   name: minio
   tenant-mode: true
-  endpoint: http://121.37.83.47:9000
+  endpoint: http://139.9.191.155:9000
   access-key: admin
   secret-key: admin8866
   bucket-name: bladex

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/edi/api/EDISender.java

@@ -33,7 +33,7 @@ public class EDISender {
 			//文件地址
 			String url = file.getAbsolutePath();
 			//替换地址
-			url = url.replace("/home/minio", "http://121.37.83.47");
+			url = url.replace("/home/minio", "http://139.9.191.155");
 
 			FilesCenter filesCenter = new FilesCenter();
 			filesCenter.setUrl(url);

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/edi/service/impl/EDISenderServiceImpl.java

@@ -326,7 +326,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				url = url.replace("/home/minio", status);
 			}
 		} else {
-			url = url.replace("/home/minio", "http://121.37.83.47");
+			url = url.replace("/home/minio", "http://139.9.191.155");
 		}
 
 		FilesCenter filesCenter = new FilesCenter();

+ 154 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/controller/ProductWorkmanshipController.java

@@ -0,0 +1,154 @@
+/*
+ *      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.salesPart.produce.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.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.salesPart.produce.entity.ProductWorkmanship;
+import org.springblade.salesPart.produce.entity.ProductWorkmanshipItems;
+import org.springblade.salesPart.produce.service.IProductWorkmanshipItemsService;
+import org.springblade.salesPart.produce.service.IProductWorkmanshipService;
+import org.springblade.salesPart.produce.vo.ProductWorkmanshipVO;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 产品工艺 控制器
+ *
+ * @author BladeX
+ * @since 2025-02-10
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/productworkmanship")
+@Api(value = "产品工艺", tags = "产品工艺接口")
+public class ProductWorkmanshipController extends BladeController {
+
+	private final IProductWorkmanshipService productWorkmanshipService;
+
+	private final IProductWorkmanshipItemsService productWorkmanshipItemsService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入productWorkmanship")
+	public R<ProductWorkmanship> detail(ProductWorkmanship productWorkmanship) {
+		ProductWorkmanship detail = productWorkmanshipService.detail(productWorkmanship);
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 产品工艺
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入productWorkmanship")
+	public R<IPage<ProductWorkmanship>> list(ProductWorkmanship productWorkmanship, Query query) {
+		LambdaQueryWrapper<ProductWorkmanship> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(ProductWorkmanship::getTenantId, AuthUtil.getTenantId())
+			.eq(ProductWorkmanship::getIsDeleted, 0)
+			.like(ObjectUtils.isNotNull(productWorkmanship.getGoodsName()), ProductWorkmanship::getGoodsName, productWorkmanship.getGoodsName())
+			.orderByDesc(ProductWorkmanship::getCreateTime);
+		IPage<ProductWorkmanship> pages = productWorkmanshipService.page(Condition.getPage(query), lambdaQueryWrapper);
+		if (!pages.getRecords().isEmpty()) {
+			List<Long> ids = pages.getRecords().stream().map(ProductWorkmanship::getId).collect(Collectors.toList());
+			List<ProductWorkmanshipItems> attributeItemsList = productWorkmanshipItemsService.list(new LambdaQueryWrapper<ProductWorkmanshipItems>()
+				.eq(ProductWorkmanshipItems::getTenantId, AuthUtil.getTenantId())
+				.eq(ProductWorkmanshipItems::getIsDeleted, 0)
+				.in(ProductWorkmanshipItems::getPid, ids));
+			for (ProductWorkmanship item : pages.getRecords()) {
+				if (!attributeItemsList.isEmpty()) {
+					item.setCount(attributeItemsList.stream().filter(e -> e.getPid().equals(item.getId())).count());
+				} else {
+					item.setCount(0L);
+				}
+			}
+		}
+		return R.data(pages);
+	}
+
+	/**
+	 * 自定义分页 产品工艺
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入productWorkmanship")
+	public R<IPage<ProductWorkmanshipVO>> page(ProductWorkmanshipVO productWorkmanship, Query query) {
+		IPage<ProductWorkmanshipVO> pages = productWorkmanshipService.selectProductWorkmanshipPage(Condition.getPage(query), productWorkmanship);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增 产品工艺
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入productWorkmanship")
+	public R save(@Valid @RequestBody ProductWorkmanship productWorkmanship) {
+		return R.status(productWorkmanshipService.save(productWorkmanship));
+	}
+
+	/**
+	 * 修改 产品工艺
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入productWorkmanship")
+	public R update(@Valid @RequestBody ProductWorkmanship productWorkmanship) {
+		return R.status(productWorkmanshipService.updateById(productWorkmanship));
+	}
+
+	/**
+	 * 新增或修改 产品工艺
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入productWorkmanship")
+	public R submit(@Valid @RequestBody ProductWorkmanship productWorkmanship) {
+		return productWorkmanshipService.submit(productWorkmanship);
+	}
+
+
+	/**
+	 * 删除 产品工艺
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(productWorkmanshipService.removeByIds(Func.toLongList(ids)));
+	}
+
+
+}

+ 126 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/controller/ProductWorkmanshipItemsController.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.salesPart.produce.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.salesPart.produce.entity.ProductWorkmanshipItems;
+import org.springblade.salesPart.produce.vo.ProductWorkmanshipItemsVO;
+import org.springblade.salesPart.produce.service.IProductWorkmanshipItemsService;
+import org.springblade.core.boot.ctrl.BladeController;
+
+/**
+ * 产品工艺明细 控制器
+ *
+ * @author BladeX
+ * @since 2025-02-10
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/productworkmanshipitems")
+@Api(value = "产品工艺明细", tags = "产品工艺明细接口")
+public class ProductWorkmanshipItemsController extends BladeController {
+
+	private final IProductWorkmanshipItemsService productWorkmanshipItemsService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入productWorkmanshipItems")
+	public R<ProductWorkmanshipItems> detail(ProductWorkmanshipItems productWorkmanshipItems) {
+		ProductWorkmanshipItems detail = productWorkmanshipItemsService.getOne(Condition.getQueryWrapper(productWorkmanshipItems));
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 产品工艺明细
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入productWorkmanshipItems")
+	public R<IPage<ProductWorkmanshipItems>> list(ProductWorkmanshipItems productWorkmanshipItems, Query query) {
+		IPage<ProductWorkmanshipItems> pages = productWorkmanshipItemsService.page(Condition.getPage(query), Condition.getQueryWrapper(productWorkmanshipItems));
+		return R.data(pages);
+	}
+
+	/**
+	 * 自定义分页 产品工艺明细
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入productWorkmanshipItems")
+	public R<IPage<ProductWorkmanshipItemsVO>> page(ProductWorkmanshipItemsVO productWorkmanshipItems, Query query) {
+		IPage<ProductWorkmanshipItemsVO> pages = productWorkmanshipItemsService.selectProductWorkmanshipItemsPage(Condition.getPage(query), productWorkmanshipItems);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增 产品工艺明细
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入productWorkmanshipItems")
+	public R save(@Valid @RequestBody ProductWorkmanshipItems productWorkmanshipItems) {
+		return R.status(productWorkmanshipItemsService.save(productWorkmanshipItems));
+	}
+
+	/**
+	 * 修改 产品工艺明细
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入productWorkmanshipItems")
+	public R update(@Valid @RequestBody ProductWorkmanshipItems productWorkmanshipItems) {
+		return R.status(productWorkmanshipItemsService.updateById(productWorkmanshipItems));
+	}
+
+	/**
+	 * 新增或修改 产品工艺明细
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入productWorkmanshipItems")
+	public R submit(@Valid @RequestBody ProductWorkmanshipItems productWorkmanshipItems) {
+		return R.status(productWorkmanshipItemsService.saveOrUpdate(productWorkmanshipItems));
+	}
+
+	
+	/**
+	 * 删除 产品工艺明细
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(productWorkmanshipItemsService.removeByIds(Func.toLongList(ids)));
+	}
+
+	
+}

+ 121 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/controller/ProductionOrderController.java

@@ -0,0 +1,121 @@
+/*
+ *      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.salesPart.produce.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.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.salesPart.produce.entity.ProductWorkmanship;
+import org.springblade.salesPart.produce.entity.ProductWorkmanshipItems;
+import org.springblade.salesPart.produce.service.IProductWorkmanshipItemsService;
+import org.springblade.salesPart.produce.service.IProductWorkmanshipService;
+import org.springblade.salesPart.produce.vo.ProductWorkmanshipVO;
+import org.springblade.salesPart.ship.service.IShipItemsService;
+import org.springblade.salesPart.ship.service.IShipService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 生成订单 控制器
+ *
+ * @author BladeX
+ * @since 2025-02-10
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/productionOrder")
+@Api(value = "生成订单", tags = "生成订单接口")
+public class ProductionOrderController extends BladeController {
+
+	private final IProductWorkmanshipService productWorkmanshipService;
+
+	private final IProductWorkmanshipItemsService productWorkmanshipItemsService;
+
+	private final IShipService shipService;
+
+	private final IShipItemsService shipItemsService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	public R<ProductWorkmanship> detail(ProductWorkmanship productWorkmanship) {
+		ProductWorkmanship detail = productWorkmanshipService.detail(productWorkmanship);
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 生成订单
+	 */
+	@GetMapping("/list")
+	public R<IPage<ProductWorkmanship>> list(ProductWorkmanship productWorkmanship, Query query) {
+		LambdaQueryWrapper<ProductWorkmanship> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(ProductWorkmanship::getTenantId, AuthUtil.getTenantId())
+			.eq(ProductWorkmanship::getIsDeleted, 0)
+			.like(ObjectUtils.isNotNull(productWorkmanship.getGoodsName()), ProductWorkmanship::getGoodsName, productWorkmanship.getGoodsName())
+			.orderByDesc(ProductWorkmanship::getCreateTime);
+		IPage<ProductWorkmanship> pages = productWorkmanshipService.page(Condition.getPage(query), lambdaQueryWrapper);
+		if (!pages.getRecords().isEmpty()) {
+			List<Long> ids = pages.getRecords().stream().map(ProductWorkmanship::getId).collect(Collectors.toList());
+			List<ProductWorkmanshipItems> attributeItemsList = productWorkmanshipItemsService.list(new LambdaQueryWrapper<ProductWorkmanshipItems>()
+				.eq(ProductWorkmanshipItems::getTenantId, AuthUtil.getTenantId())
+				.eq(ProductWorkmanshipItems::getIsDeleted, 0)
+				.in(ProductWorkmanshipItems::getPid, ids));
+			for (ProductWorkmanship item : pages.getRecords()) {
+				if (!attributeItemsList.isEmpty()) {
+					item.setCount(attributeItemsList.stream().filter(e -> e.getPid().equals(item.getId())).count());
+				} else {
+					item.setCount(0L);
+				}
+			}
+		}
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增或修改 生成订单
+	 */
+	@PostMapping("/submit")
+	public R submit(@Valid @RequestBody ProductWorkmanship productWorkmanship) {
+		return productWorkmanshipService.submit(productWorkmanship);
+	}
+
+
+	/**
+	 * 删除 生成订单
+	 */
+	@PostMapping("/remove")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(productWorkmanshipService.removeByIds(Func.toLongList(ids)));
+	}
+
+
+}

+ 42 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/mapper/ProductWorkmanshipItemsMapper.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.salesPart.produce.mapper;
+
+import org.springblade.salesPart.produce.entity.ProductWorkmanshipItems;
+import org.springblade.salesPart.produce.vo.ProductWorkmanshipItemsVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 产品工艺明细 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2025-02-10
+ */
+public interface ProductWorkmanshipItemsMapper extends BaseMapper<ProductWorkmanshipItems> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param productWorkmanshipItems
+	 * @return
+	 */
+	List<ProductWorkmanshipItemsVO> selectProductWorkmanshipItemsPage(IPage page, ProductWorkmanshipItemsVO productWorkmanshipItems);
+
+}

+ 31 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/mapper/ProductWorkmanshipItemsMapper.xml

@@ -0,0 +1,31 @@
+<?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.salesPart.produce.mapper.ProductWorkmanshipItemsMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="productWorkmanshipItemsResultMap" type="org.springblade.salesPart.produce.entity.ProductWorkmanshipItems">
+        <id column="id" property="id"/>
+        <result column="pid" property="pid"/>
+        <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="is_deleted" property="isDeleted"/>
+        <result column="remarks" property="remarks"/>
+        <result column="status" property="status"/>
+        <result column="attribute_no" property="attributeNo"/>
+        <result column="attribute_name" property="attributeName"/>
+        <result column="attribute_value" property="attributeValue"/>
+        <result column="whether_open" property="whetherOpen"/>
+        <result column="type" property="type"/>
+        <result column="production_processes" property="productionProcesses"/>
+        <result column="assembly_mileage_progress" property="assemblyMileageProgress"/>
+    </resultMap>
+
+
+    <select id="selectProductWorkmanshipItemsPage" resultMap="productWorkmanshipItemsResultMap">
+        select * from pjpf_product_workmanship_items where is_deleted = 0
+    </select>
+
+</mapper>

+ 42 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/mapper/ProductWorkmanshipMapper.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.salesPart.produce.mapper;
+
+import org.springblade.salesPart.produce.entity.ProductWorkmanship;
+import org.springblade.salesPart.produce.vo.ProductWorkmanshipVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 产品工艺 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2025-02-10
+ */
+public interface ProductWorkmanshipMapper extends BaseMapper<ProductWorkmanship> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param productWorkmanship
+	 * @return
+	 */
+	List<ProductWorkmanshipVO> selectProductWorkmanshipPage(IPage page, ProductWorkmanshipVO productWorkmanship);
+
+}

+ 27 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/mapper/ProductWorkmanshipMapper.xml

@@ -0,0 +1,27 @@
+<?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.salesPart.produce.mapper.ProductWorkmanshipMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="productWorkmanshipResultMap" type="org.springblade.salesPart.produce.entity.ProductWorkmanship">
+        <id column="id" property="id"/>
+        <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="is_deleted" property="isDeleted"/>
+        <result column="remarks" property="remarks"/>
+        <result column="status" property="status"/>
+        <result column="goods_id" property="goodsId"/>
+        <result column="goods_name" property="goodsName"/>
+        <result column="create_user_name" property="createUserName"/>
+        <result column="update_user_name" property="updateUserName"/>
+    </resultMap>
+
+
+    <select id="selectProductWorkmanshipPage" resultMap="productWorkmanshipResultMap">
+        select * from pjpf_product_workmanship where is_deleted = 0
+    </select>
+
+</mapper>

+ 41 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/service/IProductWorkmanshipItemsService.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.salesPart.produce.service;
+
+import org.springblade.salesPart.produce.entity.ProductWorkmanshipItems;
+import org.springblade.salesPart.produce.vo.ProductWorkmanshipItemsVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 产品工艺明细 服务类
+ *
+ * @author BladeX
+ * @since 2025-02-10
+ */
+public interface IProductWorkmanshipItemsService extends IService<ProductWorkmanshipItems> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param productWorkmanshipItems
+	 * @return
+	 */
+	IPage<ProductWorkmanshipItemsVO> selectProductWorkmanshipItemsPage(IPage<ProductWorkmanshipItemsVO> page, ProductWorkmanshipItemsVO productWorkmanshipItems);
+
+}

+ 45 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/service/IProductWorkmanshipService.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.salesPart.produce.service;
+
+import org.springblade.core.tool.api.R;
+import org.springblade.salesPart.produce.entity.ProductWorkmanship;
+import org.springblade.salesPart.produce.vo.ProductWorkmanshipVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 产品工艺 服务类
+ *
+ * @author BladeX
+ * @since 2025-02-10
+ */
+public interface IProductWorkmanshipService extends IService<ProductWorkmanship> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param productWorkmanship
+	 * @return
+	 */
+	IPage<ProductWorkmanshipVO> selectProductWorkmanshipPage(IPage<ProductWorkmanshipVO> page, ProductWorkmanshipVO productWorkmanship);
+
+    ProductWorkmanship detail(ProductWorkmanship productWorkmanship);
+
+	R submit(ProductWorkmanship productWorkmanship);
+}

+ 41 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/service/impl/ProductWorkmanshipItemsServiceImpl.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.salesPart.produce.service.impl;
+
+import org.springblade.salesPart.produce.entity.ProductWorkmanshipItems;
+import org.springblade.salesPart.produce.vo.ProductWorkmanshipItemsVO;
+import org.springblade.salesPart.produce.mapper.ProductWorkmanshipItemsMapper;
+import org.springblade.salesPart.produce.service.IProductWorkmanshipItemsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 产品工艺明细 服务实现类
+ *
+ * @author BladeX
+ * @since 2025-02-10
+ */
+@Service
+public class ProductWorkmanshipItemsServiceImpl extends ServiceImpl<ProductWorkmanshipItemsMapper, ProductWorkmanshipItems> implements IProductWorkmanshipItemsService {
+
+	@Override
+	public IPage<ProductWorkmanshipItemsVO> selectProductWorkmanshipItemsPage(IPage<ProductWorkmanshipItemsVO> page, ProductWorkmanshipItemsVO productWorkmanshipItems) {
+		return page.setRecords(baseMapper.selectProductWorkmanshipItemsPage(page, productWorkmanshipItems));
+	}
+
+}

+ 134 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/service/impl/ProductWorkmanshipServiceImpl.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.salesPart.produce.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 lombok.AllArgsConstructor;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.salesPart.produce.entity.ProductWorkmanship;
+import org.springblade.salesPart.produce.entity.ProductWorkmanshipItems;
+import org.springblade.salesPart.produce.mapper.ProductWorkmanshipMapper;
+import org.springblade.salesPart.produce.service.IProductWorkmanshipItemsService;
+import org.springblade.salesPart.produce.service.IProductWorkmanshipService;
+import org.springblade.salesPart.produce.vo.ProductWorkmanshipVO;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 产品工艺 服务实现类
+ *
+ * @author BladeX
+ * @since 2025-02-10
+ */
+@Service
+@AllArgsConstructor
+public class ProductWorkmanshipServiceImpl extends ServiceImpl<ProductWorkmanshipMapper, ProductWorkmanship> implements IProductWorkmanshipService {
+
+	private final IProductWorkmanshipItemsService productWorkmanshipItemsService;
+
+
+	@Override
+	public IPage<ProductWorkmanshipVO> selectProductWorkmanshipPage(IPage<ProductWorkmanshipVO> page, ProductWorkmanshipVO productWorkmanship) {
+		return page.setRecords(baseMapper.selectProductWorkmanshipPage(page, productWorkmanship));
+	}
+
+	@Override
+	public ProductWorkmanship detail(ProductWorkmanship productWorkmanship) {
+		ProductWorkmanship detail = baseMapper.selectById(productWorkmanship.getId());
+		List<ProductWorkmanshipItems> attributeItemsList = productWorkmanshipItemsService.list(new LambdaQueryWrapper<ProductWorkmanshipItems>()
+			.eq(ProductWorkmanshipItems::getTenantId, AuthUtil.getTenantId())
+			.eq(ProductWorkmanshipItems::getIsDeleted, 0)
+			.eq(ProductWorkmanshipItems::getPid, productWorkmanship.getId())
+			.eq(ProductWorkmanshipItems::getType, "1"));
+		detail.setAttributeItemsList(attributeItemsList != null ? attributeItemsList : new ArrayList<>());
+		List<ProductWorkmanshipItems> craftItemsList = productWorkmanshipItemsService.list(new LambdaQueryWrapper<ProductWorkmanshipItems>()
+			.eq(ProductWorkmanshipItems::getTenantId, AuthUtil.getTenantId())
+			.eq(ProductWorkmanshipItems::getIsDeleted, 0)
+			.eq(ProductWorkmanshipItems::getPid, productWorkmanship.getId())
+			.eq(ProductWorkmanshipItems::getType, "2"));
+		detail.setCraftItemsList(craftItemsList != null ? craftItemsList : new ArrayList<>());
+		return detail;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R submit(ProductWorkmanship productWorkmanship) {
+		List<ProductWorkmanship> workmanshipList = baseMapper.selectList(new LambdaQueryWrapper<ProductWorkmanship>()
+			.eq(ProductWorkmanship::getTenantId, AuthUtil.getTenantId())
+			.eq(ProductWorkmanship::getIsDeleted, 0)
+			.eq(ProductWorkmanship::getGoodsId, productWorkmanship.getGoodsId()));
+		if (productWorkmanship.getId() == null) {
+			if (!workmanshipList.isEmpty()) {
+				throw new RuntimeException("产品:" + productWorkmanship.getGoodsName() + "已存在");
+			}
+			productWorkmanship.setCreateTime(new Date());
+			productWorkmanship.setCreateUser(AuthUtil.getUserId());
+			productWorkmanship.setCreateUserName(AuthUtil.getUserName());
+		} else {
+			if (!workmanshipList.isEmpty() && workmanshipList.stream().anyMatch(e -> !e.getId().equals(productWorkmanship.getId()))) {
+				throw new RuntimeException("产品:" + productWorkmanship.getGoodsName() + "已存在");
+			}
+			productWorkmanship.setUpdateTime(new Date());
+			productWorkmanship.setUpdateUser(AuthUtil.getUserId());
+			productWorkmanship.setUpdateUserName(AuthUtil.getUserName());
+		}
+		this.saveOrUpdate(productWorkmanship);
+		if (ObjectUtils.isNotNull(productWorkmanship.getAttributeItemsList())) {
+			for (ProductWorkmanshipItems item : productWorkmanship.getAttributeItemsList()) {
+				item.setPid(productWorkmanship.getId());
+				item.setType("1");
+				if (item.getId() == null) {
+					item.setCreateTime(new Date());
+					item.setCreateUser(AuthUtil.getUserId());
+				} else {
+					item.setUpdateTime(new Date());
+					item.setUpdateUser(AuthUtil.getUserId());
+				}
+			}
+			if (!productWorkmanship.getAttributeItemsList().isEmpty()) {
+				productWorkmanshipItemsService.saveOrUpdateBatch(productWorkmanship.getAttributeItemsList());
+			}
+		}
+		if (ObjectUtils.isNotNull(productWorkmanship.getCraftItemsList())) {
+			for (ProductWorkmanshipItems item : productWorkmanship.getCraftItemsList()) {
+				item.setPid(productWorkmanship.getId());
+				item.setType("2");
+				if (item.getId() == null) {
+					item.setCreateTime(new Date());
+					item.setCreateUser(AuthUtil.getUserId());
+				} else {
+					item.setUpdateTime(new Date());
+					item.setUpdateUser(AuthUtil.getUserId());
+				}
+			}
+			if (!productWorkmanship.getCraftItemsList().isEmpty()) {
+				productWorkmanshipItemsService.saveOrUpdateBatch(productWorkmanship.getCraftItemsList());
+			}
+		}
+		return R.data(productWorkmanship);
+	}
+
+}

+ 2 - 2
blade-service/blade-weChat/src/main/java/org/springblade/weChat/QRCode/WechatQRCodeController.java

@@ -129,7 +129,7 @@ public class WechatQRCodeController extends BladeController {
 		File qRCodeFile = new File(packageFile, corpName + ".jpg");
 		qRCodeFile.createNewFile();
 		//替换地址
-		return qRCodeFile.getAbsolutePath().replace("/home/minio", "http://121.37.83.47");
+		return qRCodeFile.getAbsolutePath().replace("/home/minio", "http://139.9.191.155");
 	}
 
 	/**
@@ -193,7 +193,7 @@ public class WechatQRCodeController extends BladeController {
 			os.close();
 			System.out.println("Path1:" + qRCodeFile.getPath());
 			System.out.println("AbsolutePath1:" + qRCodeFile.getAbsolutePath());
-			filePath = qRCodeFile.getAbsolutePath().replace("/home/minio", "http://121.37.83.47");
+			filePath = qRCodeFile.getAbsolutePath().replace("/home/minio", "http://139.9.191.155");
 		} catch (Exception e) {
 			e.printStackTrace();
 		}