语音播报,动态配置,定时任务,工序代码修改

This commit is contained in:
liuzhaotian
2024-04-20 16:41:51 +08:00
parent ce08ddcaea
commit ff14836e10
39 changed files with 1773 additions and 157 deletions
@@ -173,12 +173,16 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-boot-starter-websocket</artifactId> <artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.0</version>
</dependency> </dependency>
<dependency>
<groupId>com.cf.imes</groupId>
<artifactId>cf-spring-boot-starter-job</artifactId>
</dependency>
</dependencies> </dependencies>
@@ -0,0 +1,26 @@
package com.cf.imes.module.manage.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "voices.parameters")
public class VocieParameters {
// 设置音频的质量( 越大越好,目前最大好像 22,最小为 4 )
private Long quality;
// 朗读声音大小
private Long soundSize;
// 朗读速度
private Long readingSpeed;
// 音频保存的路径
private String path;
}
@@ -0,0 +1,66 @@
package com.cf.imes.module.manage.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Data
@Component
@ConfigurationProperties(prefix = "job.parameters")
public class XxlJobParameter {
/**
* 是否开启,默认为 true 关闭
*/
private Boolean enabled;
/**
* 访问令牌
*/
private String accessToken;
/* *//**
* 控制器配置
*//*
@NotNull(message = "控制器配置不能为空")
private AdminProperties admin;
*//**
* 执行器配置
*//*
@NotNull(message = "执行器配置不能为空")
private ExecutorProperties executor;*/
@NotEmpty(message = "调度器地址不能为空")
private String addresses;
/**
* 应用名
*/
@NotEmpty(message = "应用名不能为空")
private String appName;
/**
* 执行器的 IP
*/
private String ip;
/**
* 执行器的 Port
*/
private Long port;
/**
* 日志地址
*/
@NotEmpty(message = "日志地址不能为空")
private String logPath;
/**
* 日志保留天数
*/
private Long logRetentionDays;
}
@@ -0,0 +1,146 @@
package com.cf.imes.module.manage.controller.admin.patching;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.module.manage.controller.admin.patching.vo.*;
import com.cf.imes.module.manage.service.patching.PatchingPlateService;
import com.cf.imes.module.manage.dal.dataobject.patching.MachineDO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;
import static com.cf.imes.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 补板")
@RestController
@RequestMapping("/manage/patching")
@Validated
public class PatchingPlateController {
@Resource
private PatchingPlateService patchingPlateService;
@GetMapping("/searchPage")
@Operation(summary = "批量加入补板查询")
@PreAuthorize("@ss.hasPermission('manage:patching:query')")
public CommonResult<PageResult<PatchingPlateRespVO>> patchingSearchPlate(@Valid PatchingPlatePageReqVO pageReqVO){
PageResult<PatchingPlateRespVO> patchingPlateRespVOPageResult = patchingPlateService.patchingSearchPlate(pageReqVO);
return success(patchingPlateRespVOPageResult);
}
@GetMapping("/searchPlate")
@Operation(summary = "查询详细的板件")
@PreAuthorize("@ss.hasPermission('manage:patching:query')")
public CommonResult<PageResult<PatchingDetailRespVO>> searchPlateDetail(@Valid PatchingPlatePageReqVO pageReqVO){
PageResult<PatchingDetailRespVO> plateDetailsRespVOPageResult = patchingPlateService.searchPlateDetail(pageReqVO);
return success(plateDetailsRespVOPageResult);
}
@GetMapping("/searchPatchingList")
@Operation(summary = "加入的板件信息")
@Parameter(name = "plateId", description = "板件ID", required = true, example = "1")
@PreAuthorize("@ss.hasPermission('manage:patching:query')")
public CommonResult<PatchingDetailRespVO> searchPatchingList(@Valid @RequestParam("plateId") Long plateId){
return success(patchingPlateService.searchPatchingList(plateId));
}
@GetMapping("/optimizeLayout")
@Operation(summary = "优化排版")
@PreAuthorize("@ss.hasPermission('manage:patching:query')")
public CommonResult<List<PatchingDetailRespVO>> optimizeLayout(@Valid PatchingDetailReqVO reqVO){
List<PatchingDetailRespVO> patchingDetailRespVOS = patchingPlateService.optimizeLayout(reqVO);
return success(patchingDetailRespVOS);
}
@PostMapping("/insertPatching")
@Operation(summary = "新增补板详情表")
@PreAuthorize("@ss.hasPermission('manage:patching:query')")
public CommonResult<Boolean> insertPatching(@Valid @RequestBody PatchingReqVO reqVO){
patchingPlateService.insertPatching(reqVO);
return success(true);
}
@GetMapping("/search")
@Operation(summary = "查询所有的机台")
@PreAuthorize("@ss.hasPermission('manage:patching:query')")
public CommonResult<List<MachineDO>> searchMachine(){
return success(patchingPlateService.searchMachine());
}
@GetMapping("/searchPatchNC")
@Operation(summary = "导出 NC 所需要的数据")
@PreAuthorize("@ss.hasPermission('manage:patching:query')")
public CommonResult<List<PatchingDetailRespVO>> searchPatchNC(@Valid PatchingDetailReqVO reqVO){
List<PatchingDetailRespVO> patchingDetailRespVOS = patchingPlateService.optimizeLayout(reqVO);
return success(patchingDetailRespVOS);
}
}
@@ -0,0 +1,20 @@
package com.cf.imes.module.manage.controller.admin.patching.vo;
import lombok.Data;
import lombok.ToString;
@Data
@ToString(callSuper = true)
public class DataRangeList {
// 最大值
private Long maxaa;
// 最小值
private Long minbb;
}
@@ -0,0 +1,37 @@
package com.cf.imes.module.manage.controller.admin.patching.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - Response VO")
@Data
public class MachineRespVO {
@Schema(description = "机台主键ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long id;
@Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String name;
@Schema(description = "机台类型", requiredMode = Schema.RequiredMode.REQUIRED)
private Boolean machineType;
@Schema(description = "标签id", requiredMode = Schema.RequiredMode.REQUIRED)
private Long labelId;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
@Schema(description = "创建者", requiredMode = Schema.RequiredMode.REQUIRED)
private String creator;
}
@@ -0,0 +1,20 @@
package com.cf.imes.module.manage.controller.admin.patching.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.ToString;
import java.util.List;
@Schema(description = "管理后台 - 优化排版 Request VO")
@Data
@ToString(callSuper = true)
public class PatchingDetailReqVO {
@Schema(description = "板编号", requiredMode = Schema.RequiredMode.REQUIRED)
private List<Long> plateIdList;
}
@@ -0,0 +1,168 @@
package com.cf.imes.module.manage.controller.admin.patching.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - 补板详情 Response VO")
@Data
public class PatchingDetailRespVO {
@Schema(description = "房间名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String roomName;
@Schema(description = "房间ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long roomId;
@Schema(description = "柜体名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String cabinetName;
@Schema(description = "柜体ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long bodyId;
@Schema(description = "材料", requiredMode = Schema.RequiredMode.REQUIRED)
private String material;
@Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED)
private String color;
// 需要添加的额外字段
@Schema(description = "板件组合名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String plateCombinationName;
@Schema(description = "自定义单号", requiredMode = Schema.RequiredMode.REQUIRED)
private Long customOrderId;
@Schema(description = "客户", requiredMode = Schema.RequiredMode.REQUIRED)
private String customer;
@Schema(description = "地址", requiredMode = Schema.RequiredMode.REQUIRED)
private String address;
// 用于进行判断是否为异形等
@Schema(description = "异形数量", requiredMode = Schema.RequiredMode.REQUIRED)
private String specialShaped;
@Schema(description = "造型数量", requiredMode = Schema.RequiredMode.REQUIRED)
private String profiling;
@Schema(description = "排孔数量", requiredMode = Schema.RequiredMode.REQUIRED)
private String rowHole;
@Schema(description = "主键-板件ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long id;
@Schema(description = "生产单号", requiredMode = Schema.RequiredMode.REQUIRED)
private Long orderId;
@Schema(description = "组织 ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long organId;
@Schema(description = "板名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String name;
@Schema(description = "自定义板编号", requiredMode = Schema.RequiredMode.REQUIRED)
private String plateNo;
@Schema(description = "板类型,0 层板 1 立板 2 背板", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer type;
@Schema(description = "商品 ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long goodsId;
@Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED)
private Double width;
@Schema(description = "高度", requiredMode = Schema.RequiredMode.REQUIRED)
private Double height;
@Schema(description = "厚度", requiredMode = Schema.RequiredMode.REQUIRED)
private Double thickness;
@Schema(description = "拆单宽度", requiredMode = Schema.RequiredMode.REQUIRED)
private Double splitWidth;
@Schema(description = "拆单高度", requiredMode = Schema.RequiredMode.REQUIRED)
private Double splitHeight;
@Schema(description = "拆单厚度", requiredMode = Schema.RequiredMode.REQUIRED)
private Double splitThickness;
@Schema(description = "左封边厚度", requiredMode = Schema.RequiredMode.REQUIRED)
private Double sealLeft;
@Schema(description = "右封边厚度", requiredMode = Schema.RequiredMode.REQUIRED)
private Double sealRight;
@Schema(description = "上封边厚度", requiredMode = Schema.RequiredMode.REQUIRED)
private Double sealUp;
@Schema(description = "下封边厚度", requiredMode = Schema.RequiredMode.REQUIRED)
private Double sealDown;
@Schema(description = "面积", requiredMode = Schema.RequiredMode.REQUIRED)
private Double area;
@Schema(description = "纹路类型,0 正纹 1 可翻转 2 反纹", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer texture;
@Schema(description = "孔面类型,0 正面 1 反面 2 侧面", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer holeFace;
@Schema(description = "排孔类型,0 正纹 1 反面 2 随意面", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer holeArrange;
@Schema(description = "异型孔数量", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer unregularPointCount;
@Schema(description = "正面孔数量", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer frontHoleCount;
@Schema(description = "背面孔数量", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer backHoleCount;
@Schema(description = "侧面孔数量", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer sideHoleCount;
@Schema(description = "正面造型量", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer frontModelCount;
@Schema(description = "背面造型量", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer backModelCount;
@Schema(description = "是否门板", requiredMode = Schema.RequiredMode.REQUIRED)
private Boolean isDoor;
@Schema(description = "开门类型,0 无 1 左 2 右 3 上 4 下", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer openDoorType;
@Schema(description = "异型偏移 x", requiredMode = Schema.RequiredMode.REQUIRED)
private Float offsetX;
@Schema(description = "异型偏移 y", requiredMode = Schema.RequiredMode.REQUIRED)
private Float offsetY;
@Schema(description = "是否孤形对角", requiredMode = Schema.RequiredMode.REQUIRED)
private Boolean isArcAcross;
@Schema(description = "模块类型 ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long moduleTypeId;
@Schema(description = "排单过滤类型,1 有挖穿造型 2 有挖穿孔 4 有二维刀路 8 可叠", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer filterType;
@Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
private String remark;
}
@@ -0,0 +1,123 @@
package com.cf.imes.module.manage.controller.admin.patching.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.cf.imes.framework.common.pojo.PageParam;
import io.swagger.v3.core.util.Json;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.apache.ibatis.type.TypeHandler;
import java.util.HashMap;
import java.util.List;
@Schema(description = "管理后台 - 补板 分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class PatchingPlatePageReqVO extends PageParam {
@Schema(description = "订单号")
private Long orderNo;
@Schema(description = "自定义单号")
private String customOrderNo;
@Schema(description = "状态-生产中,加工完成,打包完成", requiredMode = Schema.RequiredMode.REQUIRED,example = "3,4,5")
private List<Long> statusList;
@Schema(description = "客户")
private String customer;
@Schema(description = "收货地址")
private String address;
@Schema(description = "开始时间"/*, requiredMode = Schema.RequiredMode.REQUIRED*/)
private String startTime;
@Schema(description = "结束时间"/*, requiredMode = Schema.RequiredMode.REQUIRED*/)
private String endTime;
@Schema(description = "矩形")
private Boolean isRectangle;
@Schema(description = "异形")
private Boolean isSpecialShaped;
@Schema(description = "造型")
private Boolean isProfiling;
@Schema(description = "有挖穿造型")
private Boolean isDigThrough;
@Schema(description = "有挖穿孔")
private Boolean isDiggingHoles;
@Schema(description = "有二维刀路")
private Boolean is2DCuttingPath;
@Schema(description = "门板")
private Boolean isDoor;
@Schema(description = "长范围")
@TableField(typeHandler = JacksonTypeHandler.class)
private List<DataRangeList> longRangeList;
@Schema(description = "宽范围")
private List<DataRangeList> WidthRangeList;
}
@@ -0,0 +1,55 @@
package com.cf.imes.module.manage.controller.admin.patching.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - 补板 Response VO")
@Data
public class PatchingPlateRespVO {
@Schema(description = "订单号", requiredMode = Schema.RequiredMode.REQUIRED)
private Long orderId;
@Schema(description = "自定义单号", requiredMode = Schema.RequiredMode.REQUIRED)
private Long customOrderId;
@Schema(description = "客户", requiredMode = Schema.RequiredMode.REQUIRED)
private String customer;
@Schema(description = "地址", requiredMode = Schema.RequiredMode.REQUIRED)
private String address;
@Schema(description = "订单状态", requiredMode = Schema.RequiredMode.REQUIRED)
private Long orderStatus;
@Schema(description = "柜体ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long groupId;
@Schema(description = "板件显示名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String plateName;
@Schema(description = "材料", requiredMode = Schema.RequiredMode.REQUIRED)
private String material;
@Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED)
private String color;
@Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED)
private Double width;
@Schema(description = "长度", requiredMode = Schema.RequiredMode.REQUIRED)
private Double height;
@Schema(description = "厚度", requiredMode = Schema.RequiredMode.REQUIRED)
private Double thickness;
@Schema(description = "面积", requiredMode = Schema.RequiredMode.REQUIRED)
private Double area;
@Schema(description = "板件数量", requiredMode = Schema.RequiredMode.REQUIRED)
private Long plateNum;
}
@@ -0,0 +1,34 @@
package com.cf.imes.module.manage.controller.admin.patching.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.ToString;
import java.util.List;
@Schema(description = "管理后台 - 新增补板详情 Request VO")
@Data
@ToString(callSuper = true)
public class PatchingReqVO {
@Schema(description = "板编号", requiredMode = Schema.RequiredMode.REQUIRED)
private List<Long> idList;
@Schema(description = "计划ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long planId;
@Schema(description = "机台", requiredMode = Schema.RequiredMode.REQUIRED)
private Long machineId;
/* @Schema(description = "板材详情", requiredMode = Schema.RequiredMode.REQUIRED)
private String detail;*/
}
@@ -87,11 +87,11 @@ public class ProductionProcessController {
@GetMapping("/selectPlateName") @GetMapping("/selectPlateName")
@Operation(summary = "查看板材信息的组合名称") @Operation(summary = "查看板材信息的组合名称")
@Parameter(name = "processStepId", description = "工序步骤ID", required = true, example = "1") @Parameter(name = "stepItemId", description = "工序明细ID", required = true, example = "1")
@PreAuthorize("@ss.hasPermission('manage:process:query')") @PreAuthorize("@ss.hasPermission('manage:process:query')")
public CommonResult<List<OrderModuleVO>> selectPlateName(@Valid @RequestParam("processStepId") Long processStepId){ public CommonResult<List<OrderModuleVO>> selectPlateName(@Valid @RequestParam("stepItemId") Long stepItemId){
return success(productionProcessService.selectPlateName(processStepId)); return success(productionProcessService.selectPlateName(stepItemId));
} }
@@ -106,4 +106,5 @@ public class ProductionProcessController {
} }
} }
@@ -13,7 +13,15 @@ public class OrderModuleVO {
private Long bodyId; private Long bodyId;
@Schema(description = "加工组 id", example = "嘿嘿")
private Long groupId;
@Schema(description = "组合名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "嘿嘿") @Schema(description = "组合名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "嘿嘿")
private String name; private String name;
@Schema(description = "加工组名称", example = "嘿嘿")
private String groupName;
} }
@@ -17,4 +17,8 @@ public class PlatePageVO extends PageParam {
private Long bodyId ; private Long bodyId ;
@Schema(description = "加工组 id")
private Long groupId;
} }
@@ -1,14 +1,53 @@
package com.cf.imes.module.manage.controller.admin.test; package com.cf.imes.module.manage.controller.admin.test;
import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.quartz.config.XxlJobProperties;
import com.cf.imes.module.manage.config.XxlJobParameter;
import com.cf.imes.module.manage.controller.admin.patching.vo.PatchingDetailRespVO;
import com.cf.imes.module.manage.controller.admin.patching.vo.PatchingPlateRespVO;
import com.cf.imes.module.manage.dal.dataobject.process.OrderProcessStepItemNDO;
import com.cf.imes.module.manage.dal.mysql.plate.OrderPlateMapper;
import com.cf.imes.module.manage.dal.mysql.process.ProcessStepItemMapper;
import com.cf.imes.module.manage.dal.mysql.test.TestMapper; import com.cf.imes.module.manage.dal.mysql.test.TestMapper;
import com.jacob.com.ComThread;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.jetbrains.annotations.TestOnly;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.annotation.security.PermitAll; import javax.annotation.security.PermitAll;
import javax.sound.sampled.AudioInputStream;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import javax.sound.sampled.*;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.net.Socket;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.IOException;
import java.util.Random;
/** /**
* @author there * @author there
@@ -22,10 +61,183 @@ public class TestController {
@Resource @Resource
private TestMapper testMapper; private TestMapper testMapper;
@GetMapping("/get") @GetMapping("/get")
@PermitAll @PermitAll
@Operation(summary = "测试") @Operation(summary = "测试")
public Object get() { public Object get() {
return testMapper.selectList(); return testMapper.selectList();
} }
public class JacobTestController {
/* *
* 语音转文字并播放
*
* @param text
*/
private static void convertTextToSpeech(String text) {
try {
//jacob.dll没成功安装,执行这一步会出错
//构建音频格式 调用注册表应用
Dispatch spAudioFormat = new ActiveXComponent("Sapi.SpAudioFormat").getObject();
//音频文件输出流
Dispatch spFileStream = new ActiveXComponent("Sapi.SpFileStream").getObject();
//构建音频对象
Dispatch spVoice = new ActiveXComponent("Sapi.SpVoice").getObject();
//设置spAudioFormat音频流格式类型22
Dispatch.put(spAudioFormat, "Type", new Variant(22));
//设置spFileStream文件输出流的音频格式
Dispatch.putRef(spFileStream, "Format", spAudioFormat);
//设置spFileStream文件输出流参数地址等
Dispatch.call(spFileStream, "Open", new Variant("E:AAAAA\48641486.wav"), new Variant(3), new Variant(true));
//设置spVoice声音对象的音频输出流为输出文件对象
Dispatch.putRef(spVoice, "AudioOutputStream", spFileStream);
//设置spVoice声音对象的音量大小100
Dispatch.put(spVoice, "Volume", new Variant(100));
//设置spVoice声音对象的速度 0为正常速度,范围【..-2 -1 0 1 2..】
Dispatch.put(spVoice, "Rate", new Variant(0));
//设置spVoice声音对象中的文本内容
Dispatch.call(spVoice, "Speak", new Variant(text));
//关闭spFileStream输出文件
Dispatch.call(spFileStream, "Close");
//释放资源
spVoice.safeRelease();
spAudioFormat.safeRelease();
spFileStream.safeRelease();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
private static XxlJobProperties aabb(){
XxlJobParameter xxlJobParameter = new XxlJobParameter();
xxlJobParameter.setEnabled(false);
xxlJobParameter.setAccessToken("1122");
xxlJobParameter.setAddresses("五阿里乌");
xxlJobParameter.setAppName("aaappn");
XxlJobProperties bean = BeanUtils.toBean(xxlJobParameter, XxlJobProperties.class);
return bean;
}
}
public static void deleteFiles(List<String> filePaths) {
// 检查文件路径集合是否为空
if (filePaths == null || filePaths.isEmpty()) {
System.out.println("文件路径集合为空");
return;
}
for (String filePath : filePaths) {
// 检查文件路径是否为空
if (filePath == null || filePath.isEmpty()) {
System.out.println("文件路径为空");
continue;
}
File file = new File(filePath);
// 检查文件是否存在
if (!file.exists()) {
System.out.println("文件不存在:" + filePath);
continue;
}
// 检查是否是文件
if (!file.isFile()) {
System.out.println("路径指向的不是文件:" + filePath);
continue;
}
// 尝试删除文件
if (file.delete()) {
System.out.println("文件删除成功:" + filePath);
} else {
System.out.println("文件删除失败:" + filePath);
}
}
}
public static Integer aacc(){
RedisTemplate<Object, Object> re = new RedisTemplate<>();
int randomInt = new Random(System.currentTimeMillis()).nextInt(900) + 100;// 生成100到999之间的随机数
return randomInt;
}
@TestOnly
public static void main(String[] args) {
// // 创建文件路径集合并添加文件路径
// List<String> filePaths = new ArrayList<>();
// filePaths.add("E:/BBBBBBB/1.txt");
// filePaths.add("E:/BBBBBBB/2.txt");
// filePaths.add("E:/BBBBBBB/4.txt");
List<Integer> filePaths = new ArrayList<>();
filePaths.add(aacc());
System.out.println(filePaths);
// // 调用 deleteFiles 方法,传入文件路径集合
// deleteFiles(filePaths);
// System.out.println(JacobTestController.aabb());
/* PatchingPlateRespVO patchingPlateRespVO = new PatchingPlateRespVO();
patchingPlateRespVO.setGroupId(11L);
patchingPlateRespVO.setArea(11.2);
patchingPlateRespVO.setColor("红色");
patchingPlateRespVO.setHeight(11.2);
String jsonString = JsonUtils.toJsonString(patchingPlateRespVO);
System.out.println(jsonString);*/
//
/*byte[] 测试测试s = JacobTestController.convertTextToSpeech("测试测试");*/
// JacobTestController.convertTextToSpeech("测试测试");
}
} }
@@ -0,0 +1,51 @@
package com.cf.imes.module.manage.controller.admin.voice;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.module.manage.controller.admin.voice.vo.VoiceReqVO;
import com.cf.imes.module.manage.service.voice.VoiceService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import org.springframework.web.bind.annotation.RestController;
@Tag(name = "管理后台 - 语音播报")
@RestController
@RequestMapping("/manage/voice")
@Validated
public class VoiceController {
@Resource
private VoiceService voiceService;
@PostMapping("/")
@Operation(summary = "语音播报")
@PreAuthorize("@ss.hasPermission('manage:voice:insert')")
public CommonResult<String> voiceAnnouncements(@Valid @RequestBody VoiceReqVO reqVO ) throws Exception {
String sourceFile = voiceService.voiceAnnouncements(reqVO.getText());
String gzipFile = sourceFile+".zip";
voiceService.zipFiles(sourceFile, gzipFile);
return CommonResult.success(gzipFile);
}
}
@@ -0,0 +1,19 @@
package com.cf.imes.module.manage.controller.admin.voice.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.util.List;
@Schema(description = "管理后台 - 语音播报 Request VO")
@Data
@ToString(callSuper = true)
public class VoiceReqVO {
@Schema(description = "语音数据", requiredMode = Schema.RequiredMode.REQUIRED)
private String text;
}
@@ -0,0 +1,42 @@
package com.cf.imes.module.manage.dal.dataobject.patching;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.cf.imes.framework.organ.core.db.OrganBaseDO;
import lombok.*;
@TableName("imes_base.system_machine")
@KeySequence("machine_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MachineDO extends OrganBaseDO {
/**
* 主键
*/
@TableId
private Long id;
/**
* 名称
*/
private String name;
/**
* 1机台设备 2CNC设备
*/
private Boolean machineType;
/**
* 标签id
*/
private Long labelId;
// 配置
private String setting;
}
@@ -0,0 +1,44 @@
package com.cf.imes.module.manage.dal.dataobject.patching;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
import com.cf.imes.framework.organ.core.db.OrganBaseDO;
import lombok.*;
@TableName("order_patch_detail_n")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PatchDetailDO extends OrganBaseDO {
// 补板ID
@TableId
private Long id;
// 生产单号
private Long orderId;
// 组织 ID
private Long organId;
// 总面积
private Double area;
// 计划 ID
private Long planId;
// 机台 ID
private Long machineId;
// 板材详情
private String detail;
}
@@ -0,0 +1,12 @@
package com.cf.imes.module.manage.dal.mysql.patching;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.module.manage.dal.dataobject.patching.MachineDO;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface MachineMapper extends BaseMapperX<MachineDO> {
}
@@ -0,0 +1,15 @@
package com.cf.imes.module.manage.dal.mysql.patching;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.module.manage.dal.dataobject.patching.PatchDetailDO;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface PatchDetailMapper extends BaseMapperX<PatchDetailDO> {
}
@@ -19,9 +19,6 @@ import java.util.List;
public interface ProcessStepItemMapper extends BaseMapperX<OrderProcessStepItemNDO> { public interface ProcessStepItemMapper extends BaseMapperX<OrderProcessStepItemNDO> {
List<ProcessRespVO> selectOrder(ProcessPageReqVO pageReqVO);
List<OrderModuleVO> selectPlateName(Long processStepId); List<OrderModuleVO> selectPlateName(Long processStepId);
@@ -5,6 +5,8 @@ import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.module.manage.controller.admin.process.vo.OrderProStepReqVO; import com.cf.imes.module.manage.controller.admin.process.vo.OrderProStepReqVO;
import com.cf.imes.module.manage.controller.admin.process.vo.OrderProcessStepItemVO; import com.cf.imes.module.manage.controller.admin.process.vo.OrderProcessStepItemVO;
import com.cf.imes.module.manage.controller.admin.process.vo.ProcessPageReqVO;
import com.cf.imes.module.manage.controller.admin.process.vo.ProcessRespVO;
import com.cf.imes.module.manage.controller.admin.query.vo.salary.PriceRatePageReqVO; import com.cf.imes.module.manage.controller.admin.query.vo.salary.PriceRatePageReqVO;
import com.cf.imes.module.manage.controller.admin.query.vo.salary.PriceRateReqVO; import com.cf.imes.module.manage.controller.admin.query.vo.salary.PriceRateReqVO;
import com.cf.imes.module.manage.dal.dataobject.process.OrderProcessStepNDO; import com.cf.imes.module.manage.dal.dataobject.process.OrderProcessStepNDO;
@@ -30,6 +32,11 @@ public interface ProcessStepMapper extends BaseMapperX<OrderProcessStepNDO> {
} }
List<ProcessRespVO> selectOrder(ProcessPageReqVO pageReqVO);
void updateStatusById(@Param("id") Long id, @Param("status") Boolean status); void updateStatusById(@Param("id") Long id, @Param("status") Boolean status);
default List<OrderProcessStepNDO> selectProducitonList(Long orderNo) { default List<OrderProcessStepNDO> selectProducitonList(Long orderNo) {
@@ -49,4 +56,6 @@ public interface ProcessStepMapper extends BaseMapperX<OrderProcessStepNDO> {
List<PriceRateReqVO> selectSalaryList(PriceRatePageReqVO pageReqVO); List<PriceRateReqVO> selectSalaryList(PriceRatePageReqVO pageReqVO);
} }
@@ -11,6 +11,7 @@ import com.cf.imes.module.manage.controller.admin.patching.vo.PatchingPlateRespV
import com.cf.imes.module.manage.controller.admin.process.vo.ProcessPageReqVO; import com.cf.imes.module.manage.controller.admin.process.vo.ProcessPageReqVO;
import com.cf.imes.module.manage.dal.dataobject.process.OrderDO; import com.cf.imes.module.manage.dal.dataobject.process.OrderDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
@@ -23,19 +24,6 @@ import java.util.List;
public interface ProductionProcessMapper extends BaseMapperX<OrderDO> { public interface ProductionProcessMapper extends BaseMapperX<OrderDO> {
default PageResult<OrderDO> selectPage(ProcessPageReqVO pageReqVO) {
return selectPage(pageReqVO, new LambdaQueryWrapperX<OrderDO>()
.eqIfPresent(OrderDO::getId,pageReqVO.getOrderNo())
.eqIfPresent(OrderDO::getCustomOrderNo,pageReqVO.getCustomOrderNo())
.likeIfPresent(OrderDO::getCustomer,pageReqVO.getCustomer())
.likeIfPresent(OrderDO::getAddress,pageReqVO.getAddress())
.orderByDesc(OrderDO::getId));
}
default PageResult<OrderDO> selectPageList(OrderPageReqVO pageReqVO) { default PageResult<OrderDO> selectPageList(OrderPageReqVO pageReqVO) {
return selectPage(pageReqVO, new LambdaQueryWrapperX<OrderDO>() return selectPage(pageReqVO, new LambdaQueryWrapperX<OrderDO>()
.eqIfPresent(OrderDO::getId,pageReqVO.getOrderNo()) .eqIfPresent(OrderDO::getId,pageReqVO.getOrderNo())
@@ -10,6 +10,7 @@ import com.cf.imes.module.manage.controller.admin.pack.vo.PlateDetailsRespVO;
import com.cf.imes.module.manage.controller.admin.query.vo.pack.PackageDetailsRespVO; import com.cf.imes.module.manage.controller.admin.query.vo.pack.PackageDetailsRespVO;
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.OrderModuleVO; import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.OrderModuleVO;
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.OrderPlateRespVO; import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.OrderPlateRespVO;
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.PlatePageVO;
import com.cf.imes.module.manage.dal.dataobject.query.OrderItemDO; import com.cf.imes.module.manage.dal.dataobject.query.OrderItemDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@@ -27,7 +28,7 @@ public interface OrderItemMapper extends BaseMapperX<OrderItemDO> {
List<OrderModuleVO> selectCombinationName(Long orderNo); List<OrderModuleVO> selectCombinationName(Long orderNo);
List<OrderPlateRespVO> selectPlateList(Long bodyId); List<OrderPlateRespVO> selectPlateList(PlatePageVO pageReqVO);
List<PlateDetailsRespVO> selectOrderPlateList(Long orderNo); List<PlateDetailsRespVO> selectOrderPlateList(Long orderNo);
@@ -25,7 +25,6 @@ public interface ProductionStatusMapper extends BaseMapperX<OrderDO> {
.eqIfPresent(OrderDO::getCustomOrderNo, pageReqVO.getCustomOrderNo()) .eqIfPresent(OrderDO::getCustomOrderNo, pageReqVO.getCustomOrderNo())
.likeIfPresent(OrderDO::getCustomer, pageReqVO.getCustomer()) .likeIfPresent(OrderDO::getCustomer, pageReqVO.getCustomer())
.likeIfPresent(OrderDO::getAddress, pageReqVO.getAddress()) .likeIfPresent(OrderDO::getAddress, pageReqVO.getAddress())
.likeIfPresent(OrderDO::getDeleted, pageReqVO.getDealer())
.and(wrapper -> { .and(wrapper -> {
for (Long status : pageReqVO.getStatusList()) { for (Long status : pageReqVO.getStatusList()) {
wrapper.or().eq(OrderDO::getStatus, status); wrapper.or().eq(OrderDO::getStatus, status);
@@ -0,0 +1,38 @@
package com.cf.imes.module.manage.service.patching;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.module.manage.controller.admin.patching.vo.*;
import com.cf.imes.module.manage.dal.dataobject.patching.MachineDO;
import java.util.List;
public interface PatchingPlateService {
// 批量加入补板查询
PageResult<PatchingPlateRespVO> patchingSearchPlate(PatchingPlatePageReqVO pageReqVO);
// 查询详细的板件
PageResult<PatchingDetailRespVO> searchPlateDetail(PatchingPlatePageReqVO pageReqVO);
// 加入的板件信息
PatchingDetailRespVO searchPatchingList(Long plateId);
// 优化排版
List<PatchingDetailRespVO> optimizeLayout(PatchingDetailReqVO reqVO);
// 新增补板详情表
void insertPatching(PatchingReqVO reqVO);
// 查询所有的机台
List<MachineDO> searchMachine();
}
@@ -0,0 +1,162 @@
package com.cf.imes.module.manage.service.patching;
import com.alibaba.nacos.shaded.com.google.gson.Gson;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.module.manage.controller.admin.pack.vo.PlateDetailsRespVO;
import com.cf.imes.module.manage.controller.admin.patching.vo.*;
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.OrderPlateRespVO;
import com.cf.imes.module.manage.dal.dataobject.patching.PatchDetailDO;
import com.cf.imes.module.manage.dal.dataobject.plate.OrderPlateDO;
import com.cf.imes.module.manage.dal.mysql.patching.MachineMapper;
import com.cf.imes.module.manage.dal.mysql.patching.PatchDetailMapper;
import com.cf.imes.module.manage.dal.mysql.plate.OrderPlateMapper;
import com.cf.imes.module.manage.dal.mysql.plate.PlateMapper;
import com.cf.imes.module.manage.dal.mysql.process.ProductionProcessMapper;
import com.cf.imes.module.manage.util.page.PageHelperUtil;
import com.cf.imes.module.manage.dal.dataobject.patching.MachineDO;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.List;
@Service
@Validated
public class PatchingPlateServiceImpl implements PatchingPlateService{
@Resource
private ProductionProcessMapper productionProcessMapper;
@Resource
private OrderPlateMapper orderPlateMapper;
@Resource
private MachineMapper machineMapper;
@Resource
private PatchDetailMapper patchDetailMapper;
// 批量加入补板查询
@Override
public PageResult<PatchingPlateRespVO> patchingSearchPlate(PatchingPlatePageReqVO pageReqVO) {
// 查询板件和订单的基础信息
PageHelper.startPage(pageReqVO.getPageNo(), pageReqVO.getPageSize());
List<PatchingPlateRespVO> patchingPlateRespVOS = productionProcessMapper.selectPatchingPlate(pageReqVO);
//
PageInfo<PatchingPlateRespVO> pageInfo = new PageInfo<>(patchingPlateRespVOS);
return PageHelperUtil.convertToPageResult(pageInfo);
}
// 查询详细的板件
@Override
public PageResult<PatchingDetailRespVO> searchPlateDetail(PatchingPlatePageReqVO pageReqVO) {
// 查询每个订单对应的板件的详细信息
PageHelper.startPage(pageReqVO.getPageNo(), pageReqVO.getPageSize());
List<PatchingDetailRespVO> plateDetailsRespVOS = orderPlateMapper.selectPlateDetail(pageReqVO);
//
PageInfo<PatchingDetailRespVO> pageInfo = new PageInfo<>(plateDetailsRespVOS);
return PageHelperUtil.convertToPageResult(pageInfo);
}
// 加入的板件信息
@Override
public PatchingDetailRespVO searchPatchingList(Long plateId) {
return orderPlateMapper.selectPlate(plateId);
}
// 优化排版
@Override
public List<PatchingDetailRespVO> optimizeLayout(PatchingDetailReqVO reqVO) {
// 查询板件的的信息
return orderPlateMapper.selectOtherPlateList(reqVO.getPlateIdList());
}
// 新增补板详情表
@Override
public void insertPatching(PatchingReqVO reqVO) {
PatchDetailDO patchDetailDO = new PatchDetailDO();
// 循环查询板件的信息,并加入补板详情表中
for (Long ids : reqVO.getIdList()) {
PatchingDetailRespVO patchingDetailRespVO = orderPlateMapper.selectPlate(ids);
String jsonString = JsonUtils.toJsonString(patchingDetailRespVO);
patchDetailDO.setId(ids);
patchDetailDO.setOrderId(patchingDetailRespVO.getOrderId());
patchDetailDO.setArea(patchDetailDO.getArea());
patchDetailDO.setPlanId(reqVO.getPlanId());
patchDetailDO.setMachineId(reqVO.getMachineId());
patchDetailDO.setDetail(jsonString);
patchDetailMapper.insert(patchDetailDO);
}
}
// 查询所有的机台
@Override
public List<MachineDO> searchMachine() {
return machineMapper.selectList();
}
}
@@ -31,7 +31,7 @@ public interface ProductionProcessService {
// 查看板材信息的组合名称 // 查看板材信息的组合名称
List<OrderModuleVO> selectPlateName(Long processStepId); List<OrderModuleVO> selectPlateName(Long stepItemId);
} }
@@ -4,6 +4,7 @@ package com.cf.imes.module.manage.service.process;
import com.cf.imes.framework.common.enums.ProcessingStatusEnum; import com.cf.imes.framework.common.enums.ProcessingStatusEnum;
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil; import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.module.manage.config.VocieParameters;
import com.cf.imes.module.manage.controller.admin.process.vo.*; import com.cf.imes.module.manage.controller.admin.process.vo.*;
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.OrderModuleVO; import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.OrderModuleVO;
import com.cf.imes.module.manage.dal.dataobject.process.OrderProcessStepItemNDO; import com.cf.imes.module.manage.dal.dataobject.process.OrderProcessStepItemNDO;
@@ -51,9 +52,8 @@ public class ProductionProcessServiceImpl implements ProductionProcessService {
@Override @Override
public PageResult<ProcessRespVO> getProcessPage(ProcessPageReqVO pageReqVO) { public PageResult<ProcessRespVO> getProcessPage(ProcessPageReqVO pageReqVO) {
PageHelper.startPage(pageReqVO.getPageNo(), pageReqVO.getPageSize()); PageHelper.startPage(pageReqVO.getPageNo(), pageReqVO.getPageSize());
List<ProcessRespVO> processRespVOS = processStepItemMapper.selectOrder(pageReqVO); List<ProcessRespVO> processRespVOS = processStepMapper.selectOrder(pageReqVO);
// 判断生产步骤表在传入的状态查询后是否为空 // 判断生产步骤表在传入的状态查询后是否为空
if(processRespVOS.isEmpty()){ if(processRespVOS.isEmpty()){
@@ -93,6 +93,7 @@ public class ProductionProcessServiceImpl implements ProductionProcessService {
// 修改工序明细表的工序状态 // 修改工序明细表的工序状态
@Override @Override
public void updateProcessStatus(Long id) { public void updateProcessStatus(Long id) {
@@ -118,26 +119,14 @@ public class ProductionProcessServiceImpl implements ProductionProcessService {
processStepItemMapper.updateById(orderProcessStepItemNDO); processStepItemMapper.updateById(orderProcessStepItemNDO);
// 判断生产单工序表的工序状态是否还有未加工
// 获取当前工序 id 下的所有生产单工序步骤表
// List<OrderProcessStepNDO> stepItemList = processStepMapper.getStepItemList(orderProcessStepNDO.getOrderNo(), ProcessingStatusEnum.RAW.getStatus());
// 集合剩余 1 ,代表当前工序步骤已全部加工,修改生产单工序表的状态为已加工
/* if (stepItemList.size() == 1) {
orderProcessMapper.updateStatusById(orderProcessStepNDO.getOrderProcessId(), ProcessingStatusEnum.PROCESSED.getStatus());
return;
}
// 遍历生产单工序步骤表,判断是否还有未加工的工序步骤
for (OrderProcessStepNDO processStepNDO : stepItemList) {
if (processStepNDO.getStatus().equals(ProcessingStatusEnum.RAW.getStatus())) {
return;
}
}*/
} }
// 修改生产步骤表的工序状态 // 修改生产步骤表的工序状态
@Override @Override
public void updateAllProcessStatus(OrderProStepReqVO reqVO) { public void updateAllProcessStatus(OrderProStepReqVO reqVO) {
@@ -163,24 +152,35 @@ public class ProductionProcessServiceImpl implements ProductionProcessService {
processStepItemMapper.updateStatus(reqVO); processStepItemMapper.updateStatus(reqVO);
// 查询当前工序步骤表的工序状态是否还有未加工 /* // 查询当前工序步骤表的工序状态是否还有未加工
List<OrderProcessStepNDO> orderProcessStepNDOS = processStepMapper.selectStepList(reqVO, ProcessingStatusEnum.RAW.getStatus()); List<OrderProcessStepNDO> orderProcessStepNDOS = processStepMapper.selectStepList(reqVO, ProcessingStatusEnum.RAW.getStatus());*/
// 如果为空,修改工序表的加工状态为已加工
if(orderProcessStepNDOS.isEmpty()){
orderProcessMapper.updateStatusById(orderProcessStepNDO.getOrderProcessId(),ProcessingStatusEnum.PROCESSED.getStatus()); // 修改工序表的加工状态为已加工
} orderProcessMapper.updateStatusById(orderProcessStepNDO.getOrderProcessId(),ProcessingStatusEnum.PROCESSED.getStatus());
} }
// 查看板材信息的组合名称 // 查看板材信息的组合名称
@Override @Override
public List<OrderModuleVO> selectPlateName(Long processStepId) { public List<OrderModuleVO> selectPlateName(Long stepItemId) {
return processStepItemMapper.selectPlateName(processStepId);
List<OrderModuleVO> orderModuleVOS = processStepItemMapper.selectPlateName(stepItemId);
for (OrderModuleVO orderModuleVO : orderModuleVOS) {
if(orderModuleVO.getGroupName().isEmpty()){
return orderModuleVOS;
}
// 修改组合名称为加工组的名称
orderModuleVO.setName(orderModuleVO.getGroupName());
}
return orderModuleVOS;
} }
@@ -103,8 +103,9 @@ public class ProductionStatusServiceImpl implements ProductionStatusService {
@Override @Override
public PageResult<OrderPlateRespVO> getOrderPlatePage(PlatePageVO pageReqVO) { public PageResult<OrderPlateRespVO> getOrderPlatePage(PlatePageVO pageReqVO) {
PageHelper.startPage(pageReqVO.getPageNo(), pageReqVO.getPageSize()); PageHelper.startPage(pageReqVO.getPageNo(), pageReqVO.getPageSize());
List<OrderPlateRespVO> orderPlateRespVOS = orderItemMapper.selectPlateList(pageReqVO.getBodyId()); List<OrderPlateRespVO> orderPlateRespVOS = orderItemMapper.selectPlateList(pageReqVO);
PageInfo<OrderPlateRespVO> pageInfo = new PageInfo<>(orderPlateRespVOS); PageInfo<OrderPlateRespVO> pageInfo = new PageInfo<>(orderPlateRespVOS);
PageResult<OrderPlateRespVO> priceRateReqVOPageResult = PageHelperUtil.convertToPageResult(pageInfo); PageResult<OrderPlateRespVO> priceRateReqVOPageResult = PageHelperUtil.convertToPageResult(pageInfo);
@@ -0,0 +1,16 @@
package com.cf.imes.module.manage.service.voice;
import java.io.IOException;
public interface VoiceService {
// 生成音频文件
String voiceAnnouncements(String text);
// 把生成的音频文件进行压缩
void zipFiles(String sourceFile, String gzipFile) throws IOException;
}
@@ -0,0 +1,150 @@
package com.cf.imes.module.manage.service.voice;
import com.cf.imes.framework.quartz.config.XxlJobProperties;
import com.cf.imes.module.manage.config.VocieParameters;
import com.cf.imes.module.manage.config.XxlJobParameter;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.http.WebSocket;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.channels.FileChannel;
import java.nio.channels.WritableByteChannel;
import java.util.Objects;
import java.util.Random;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@Service
@Slf4j
public class VoiceServiceImpl implements VoiceService{
@Resource
private VocieParameters vocieParameters;
// 生成音频文件
@Override
public String voiceAnnouncements(String text) {
//
// 音频保存的路径
String path = vocieParameters.getPath();
// 设置音频的质量( 越大越好,目前最大好像 22,最小为 4 )
Long quality = vocieParameters.getQuality();;
// 朗读声音大小
Long soundSize = vocieParameters.getSoundSize();
// 朗读速度
Long readingSpeed = vocieParameters.getReadingSpeed();
ActiveXComponent ax = null;
Dispatch spFileStream = null;
Dispatch spAudioFormat = null;
Dispatch spVoice = null;
try{
ax = new ActiveXComponent("Sapi.SpFileStream");
spFileStream = ax.getObject();
ax = new ActiveXComponent("Sapi.SpAudioFormat");
spAudioFormat = ax.getObject();
spVoice = new ActiveXComponent("Sapi.SpVoice").getObject();
// 设置音频流格式
Dispatch.put(spAudioFormat, "Type", new Variant(quality));
// 设置文件输出流格式
Dispatch.putRef(spFileStream, "Format", spAudioFormat);
// 随机数,控制文件的名字
int randomInt = new Random(System.currentTimeMillis()).nextInt(900) + 100;// 生成100到999之间的随机数
// 文件的路径
String filePath = path + randomInt + ".mp3";
// 调用输出文件流打开方法,创建一个.wav文件
Dispatch.call(spFileStream, "Open", new Variant(filePath), new Variant(3), new Variant(true));
// 设置声音对象的音频输出流为输出文件对象
Dispatch.putRef(spVoice, "AudioOutputStream", spFileStream);
// 设置音量 0 ~ 100
Dispatch.put(spVoice, "Volume", new Variant(soundSize));
// 设置朗读速度 -10 ~ +10
Dispatch.put(spVoice, "Rate", new Variant(readingSpeed));
Dispatch.call(spVoice, "Speak", new Variant(text));
System.out.println("输出语音文件成功!");
return filePath;
}catch(Exception e){
e.printStackTrace();
}finally {
// 关闭输出文件
Dispatch.call(Objects.requireNonNull(spFileStream), "Close");
Dispatch.putRef(Objects.requireNonNull(spVoice), "AudioOutputStream", null);
Objects.requireNonNull(spAudioFormat).safeRelease();
spFileStream.safeRelease();
spVoice.safeRelease();
ax.safeRelease();
}
return null;
}
/**
* 把生成的音频文件进行压缩
* @param fileNames 需要压缩的文件名称列表(包含相对路径)
* @param zipOutName 压缩后的文件名称
**/
@Override
public void zipFiles(String fileNames, String zipOutName) throws IOException {
ZipOutputStream zipOutputStream = null;
WritableByteChannel writableByteChannel = null;
ByteBuffer buffer = ByteBuffer.allocate(2048);
try {
zipOutputStream = new ZipOutputStream(new FileOutputStream(zipOutName));
writableByteChannel = Channels.newChannel(zipOutputStream);
File source = new File(fileNames);
zipOutputStream.putNextEntry(new ZipEntry(source.getName()));
FileChannel fileChannel = new FileInputStream(fileNames).getChannel();
while (fileChannel.read(buffer) != -1) {
//更新缓存区位置
buffer.flip();
while (buffer.hasRemaining()) {
writableByteChannel.write(buffer);
}
buffer.rewind();
}
fileChannel.close();
System.out.println("文件压缩成功");
} catch (Exception e) {
log.error("batchZipFiles error fileNames:");
} finally {
zipOutputStream.close();
writableByteChannel.close();
buffer.clear();
}
}
}
@@ -0,0 +1,43 @@
package com.cf.imes.module.manage.util.xxjJob;
import com.cf.imes.framework.quartz.config.XxlJobProperties;
import com.cf.imes.module.manage.config.XxlJobParameter;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.XxlJob;
import javax.annotation.Resource;
public class XxlJobUtil extends IJobHandler {
@Resource
private XxlJobParameter xxlJobParameter;
// 定时删除
public void deleteFile(){
XxlJobProperties xxlJobProperties = new XxlJobProperties();
xxlJobProperties.setEnabled(xxlJobParameter.getEnabled());
xxlJobProperties.setAccessToken(xxlJobParameter.getAccessToken());
xxlJobProperties.getAdmin().setAddresses(xxlJobParameter.getAddresses());
xxlJobProperties.getExecutor().setAppName(xxlJobParameter.getAppName());
xxlJobProperties.getExecutor().setPort(xxlJobParameter.getPort().intValue());
xxlJobProperties.getExecutor().setIp(xxlJobParameter.getIp());
xxlJobProperties.getExecutor().setLogPath(xxlJobParameter.getLogPath());
xxlJobProperties.getExecutor().setLogRetentionDays(xxlJobParameter.getLogRetentionDays().intValue());
}
@Override
@XxlJob("demoJobHandler")
public void execute() throws Exception {
deleteFile();
System.out.println("定时任务测试");
}
}
@@ -8,10 +8,9 @@
<resultMap id="PlateDetailMap" type="com.cf.imes.module.manage.controller.admin.patching.vo.PatchingDetailRespVO"> <resultMap id="PlateDetailMap" type="com.cf.imes.module.manage.controller.admin.patching.vo.PatchingDetailRespVO">
<result property="orderId" column="orderId"/>
<result property="cabinetName" column="cabinetName"/> <result property="cabinetName" column="cabinetName"/>
<result property="plateNo" column="plateNo"/> <result property="plateNo" column="plateNo"/>
<result property="name" column="plateName"/> <result property="name" column="name"/>
<result property="height" column="height"/> <result property="height" column="height"/>
<result property="width" column="width"/> <result property="width" column="width"/>
<result property="thickness" column="thickness"/> <result property="thickness" column="thickness"/>
@@ -23,7 +22,7 @@
<result property="specialShaped" column="specialShaped"/> <result property="specialShaped" column="specialShaped"/>
<result property="profiling" column="profiling"/> <result property="profiling" column="profiling"/>
<result property="rowHole" column="rowHole"/> <result property="rowHole" column="rowHole"/>
<result property="plateCombinationName" column="name"/> <result property="plateCombinationName" column="plateCombinationName"/>
<result property="material" column="material"/> <result property="material" column="material"/>
<result property="color" column="color"/> <result property="color" column="color"/>
</resultMap> </resultMap>
@@ -36,7 +35,7 @@
o.id as orderId, o.id as orderId,
ob.name as cabinetName, ob.name as cabinetName,
op.id as plateNo, op.id as plateNo,
op.name as plateName, op.name as name,
op.height as height, op.height as height,
op.width as width, op.width as width,
op.thickness as thickness, op.thickness as thickness,
@@ -47,11 +46,11 @@
o.address as address, o.address as address,
CASE WHEN op.unregular_point_count = 0 THEN '否' ELSE '是' END AS specialShaped, CASE WHEN op.unregular_point_count = 0 THEN '否' ELSE '是' END AS specialShaped,
CASE WHEN front_model_count = 0 or op.back_hole_count or op.side_hole_count THEN '否' ELSE '是' END AS profiling, CASE WHEN front_model_count = 0 or op.back_hole_count = 0 or op.side_hole_count = 0 THEN '否' ELSE '是' END AS profiling,
CASE WHEN front_hole_count = 0 or op.back_model_count THEN '否' ELSE '是' END AS rowHole, CASE WHEN front_hole_count = 0 or op.back_model_count = 0 THEN '否' ELSE '是' END AS rowHole,
CONCAT( CONCAT(
TRIM(TRAILING '.' from TRIM(TRAILING '0' FROM p.thickness)),'mm-',p.material,'-',p.color) AS name, TRIM(TRAILING '.' from TRIM(TRAILING '0' FROM p.thickness)),'mm-',p.material,'-',p.color) AS plateCombinationName,
p.material as material, p.material as material,
p.color as color p.color as color
@@ -95,24 +94,28 @@
resultMap="PlateDetailMap"> resultMap="PlateDetailMap">
select select
o.id as orderId, op.*,
oi.room_id as roomId,
oi.body_id as bodyId,
ob.room_name as roomName,
ob.name as cabinetName, ob.name as cabinetName,
op.id as plateNo, /* op.id as plateNo,
op.name as plateName, op.name as plateName,
op.height as height, op.height as height,
op.width as width, op.width as width,
op.thickness as thickness, op.thickness as thickness,
op.area as area, op.area as area,
op.remark as remark, op.remark as remark,*/
o.custom_order_no as customOrderId, o.custom_order_no as customOrderId,
o.customer as customer, o.customer as customer,
o.address as address, o.address as address,
CASE WHEN op.unregular_point_count = 0 THEN '否' ELSE '是' END AS specialShaped, CASE WHEN op.unregular_point_count = 0 THEN '否' ELSE '是' END AS specialShaped,
CASE WHEN front_model_count = 0 or op.back_hole_count or op.side_hole_count THEN '否' ELSE '是' END AS profiling, CASE WHEN front_model_count = 0 or op.back_hole_count = 0 or op.side_hole_count = 0 THEN '否' ELSE '是' END AS profiling,
CASE WHEN front_hole_count = 0 or op.back_model_count THEN '否' ELSE '是' END AS rowHole, CASE WHEN front_hole_count = 0 or op.back_model_count = 0 THEN '否' ELSE '是' END AS rowHole,
CONCAT( CONCAT(
TRIM(TRAILING '.' from TRIM(TRAILING '0' FROM p.thickness)),'mm-',p.material,'-',p.color) AS name, TRIM(TRAILING '.' from TRIM(TRAILING '0' FROM p.thickness)),'mm-',p.material,'-',p.color) AS plateCombinationName,
p.material as material, p.material as material,
p.color as color p.color as color
@@ -129,18 +132,9 @@
<resultMap id="OtherPlateMap" type="com.cf.imes.module.manage.controller.admin.patching.vo.PatchingDetailRespVO">
<result property="roomName" column="roomName"/>
<result property="roomId" column="roomId"/>
<result property="cabinetName" column="cabinetName"/>
<result property="bodyId" column="bodyId"/>
<result property="material" column="material"/>
<result property="color" column="color"/>
</resultMap>
<select id="selectOtherPlateList" <select id="selectOtherPlateList"
resultMap="OtherPlateMap" resultMap="PlateDetailMap"
parameterType="java.lang.Long"> parameterType="java.lang.Long">
@@ -150,7 +144,10 @@
ob.room_name as roomName, ob.room_name as roomName,
ob.name as cabinetName, ob.name as cabinetName,
p.material as material, p.material as material,
p.color as color p.color as color,
CONCAT(
TRIM(TRAILING '.' from TRIM(TRAILING '0' FROM p.thickness)),'mm-',p.material,'-',p.color) AS plateCombinationName
from order_plate op from order_plate op
join order_item oi on op.id = oi.plate_id join order_item oi on op.id = oi.plate_id
@@ -8,62 +8,16 @@
parameterType="java.lang.Long"> parameterType="java.lang.Long">
select CONCAT(ob.room_name,'_',ob.name) as name ,ob.id as bodyId select CONCAT(ob.room_name,'_',ob.name) as name ,ob.id as bodyId,og.name as groupName,og.id as groupId
from order_process_step_item_n opsn join order_body ob on opsn.body_id = ob.id where opsn.process_step_id = #{processStepId}; from order_process_step_item opsn
join order_body ob on opsn.body_id = ob.id
left join order_group og on ob.id = og.body_id
where opsn.process_step_id = #{processStepId};
</select> </select>
<resultMap id="OrderMap" type="com.cf.imes.module.manage.controller.admin.process.vo.ProcessRespVO">
<result property="id" column="id"/>
<result property="processStepId" column="processStepId"/>
<result property="customOrderNo" column="customOrderNo"/>
<result property="customer" column="customer"/>
<result property="address" column="address"/>
<result property="status" column="status"/>
</resultMap>
<select id="selectOrder" resultMap="OrderMap" parameterType="com.cf.imes.module.manage.controller.admin.process.vo.ProcessPageReqVO">
select distinct
ops.order_id as id,
ops.id as processStepId,
o.custom_order_no as customOrderNo,
o.customer as customer,
o.address as address,
ops.status as status
from order_process_step ops
join `order` o on ops.order_id = o.id
<where>
<if test="id != null">
and ops.processinfo_id = #{id}
</if>
<if test="status != null">
and ops.status = #{status}
</if>
<if test="orderNo != null">
and ops.order_id = #{orderNo}
</if>
<if test="customOrderNo != null">
and o.custom_order_no = #{customOrderNo}
</if>
<if test="customer != null">
and o.customer = #{customer}
</if>
<if test="address != null">
and o.address = #{address}
</if>
</where>
</select>
<resultMap id="ItemMap" type="com.cf.imes.module.manage.controller.admin.process.vo.OrderProcessStepItemVO"> <resultMap id="ItemMap" type="com.cf.imes.module.manage.controller.admin.process.vo.OrderProcessStepItemVO">
<result property="id" column="id"/> <result property="id" column="id"/>
@@ -13,6 +13,58 @@
<resultMap id="OrderMap" type="com.cf.imes.module.manage.controller.admin.process.vo.ProcessRespVO">
<result property="id" column="id"/>
<result property="processStepId" column="processStepId"/>
<result property="customOrderNo" column="customOrderNo"/>
<result property="customer" column="customer"/>
<result property="address" column="address"/>
<result property="status" column="status"/>
</resultMap>
<select id="selectOrder" resultMap="OrderMap" parameterType="com.cf.imes.module.manage.controller.admin.process.vo.ProcessPageReqVO">
select distinct
ops.order_id as id,
ops.id as processStepId,
o.custom_order_no as customOrderNo,
o.customer as customer,
o.address as address,
ops.status as status
from order_process_step ops
join `order` o on ops.order_id = o.id
<where>
<if test="id != null">
and ops.processinfo_id = #{id}
</if>
<if test="status != null">
and ops.status = #{status}
</if>
<if test="orderNo != null">
and ops.order_id = #{orderNo}
</if>
<if test="customOrderNo != null">
and o.custom_order_no = #{customOrderNo}
</if>
<if test="customer != null">
and o.customer like concat('%',#{customer},'%')
</if>
<if test="address != null">
and o.address like concat('%',#{address},'%')
</if>
</where>
</select>
<resultMap id="priceResultMap" type="com.cf.imes.module.manage.controller.admin.query.vo.salary.PriceRateReqVO"> <resultMap id="priceResultMap" type="com.cf.imes.module.manage.controller.admin.query.vo.salary.PriceRateReqVO">
<result property="name" column="name"/> <result property="name" column="name"/>
<result property="priceRate" column="piece_rate"/> <result property="priceRate" column="piece_rate"/>
@@ -55,7 +107,7 @@
</if> </if>
</where> </where>
and ops.status = true and ops.status = true
/**/
group by name,piece_rate,piece_type,creator; group by name,piece_rate,piece_type,creator;
@@ -26,7 +26,7 @@
select select
oi.body_id as groupId, p.goods_id,
o.id as orderId, o.id as orderId,
o.custom_order_no as customOrderId, o.custom_order_no as customOrderId,
o.customer as customer, o.customer as customer,
@@ -47,33 +47,125 @@
join order_plate op on oi.plate_id = op.id join order_plate op on oi.plate_id = op.id
join plate p on op.goods_id = p.goods_id join plate p on op.goods_id = p.goods_id
<where> <where>
<if test="orderNo != null"> <choose>
and o.id = #{orderNo} <!-- 挖穿,挖孔,二维刀路判断 -->
</if> <when test="isDigThrough == true">
<if test="customOrderNo != null"> (op.filter_type = 1
and o.custom_order_no = #{customOrderNo} <if test="isDiggingHoles == true ">
</if> or op.filter_type = 2
<if test="customer != null"> </if>
and o.customer = #{customer} <if test="is2DCuttingPath == true ">
</if> or op.filter_type = 4
<if test="address != null"> </if>)
and o.address = #{address}
</if> <!-- 其他的判断 -->
<if test="statusList != null"> <if test="orderNo != null">
and o.status in and o.id = #{orderNo}
<foreach item="id" collection="statusList" open="(" separator="," close=")"> </if>
#{id} <if test="customOrderNo != null">
</foreach> and o.custom_order_no = #{customOrderNo}
</if> </if>
<if test="startTime != null and endTime != null"> <if test="customer != null">
and o.update_time between #{startTime} and #{endTime} and o.customer = #{customer}
</if> </if>
<if test="address != null">
and o.address = #{address}
</if>
<if test="statusList != null">
and o.status in
<foreach item="id" collection="statusList" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<if test="startTime != null and endTime != null">
and o.update_time between #{startTime} and #{endTime}
</if>
<if test="isRectangle == true ">
and op.unregular_point_count = 0
</if>
<if test="isSpecialShaped == true ">
and op.unregular_point_count &gt; 0
</if>
<if test="isProfiling == true ">
and front_model_count &gt; 0 or op.back_hole_count &gt; 0 or op.side_hole_count &gt; 0
</if>
<if test="isDoor == true ">
and op.is_door = 1
</if>
<!-- <if test="longRangeList != null and !longRangeList.isEmpty()">
AND (
&lt;!&ndash; 根据 DataRangeList 中的属性进行条件判断 &ndash;&gt;
<foreach collection="longRangeList" item="range" separator=" OR ">
(#{op.width} &lt;= #{range.maxaa} AND #{op.width} &gt;= #{range.minbb})
</foreach>
)
</if>-->
</when>
<!-- 不传入挖穿等判断,走另一个判断逻辑 -->
<otherwise>
<if test="orderNo != null">
and o.id = #{orderNo}
</if>
<if test="customOrderNo != null">
and o.custom_order_no = #{customOrderNo}
</if>
<if test="customer != null">
and o.customer = #{customer}
</if>
<if test="address != null">
and o.address = #{address}
</if>
<if test="statusList != null">
and o.status in
<foreach item="id" collection="statusList" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<if test="startTime != null and endTime != null">
and o.update_time between #{startTime} and #{endTime}
</if>
<if test="isRectangle == true ">
and op.unregular_point_count = 0
</if>
<if test="isSpecialShaped == true ">
and op.unregular_point_count &gt; 0
</if>
<if test="isProfiling == true ">
and front_model_count &gt; 0 or op.back_hole_count &gt; 0 or op.side_hole_count &gt; 0
</if>
<if test="isDoor == true ">
and op.is_door = 1
</if>
<!--
<if test="longRangeList != null and !longRangeList.isEmpty()">
AND
&lt;!&ndash; 根据 DataRangeList 中的属性进行条件判断 &ndash;&gt;
<foreach collection="longRangeList" item="range" open="(" separator="," close=")">
op.width between #{range.minbb} AND #{range.maxaa}
</foreach>
</if>-->
</otherwise>
</choose>
</where> </where>
group by groupId,orderId,customOrderId,customer,address,orderStatus,plateNum,plateName,thickness,material,color group by p.goods_id,orderId,customOrderId,customer,address,orderStatus,plateNum,plateName,thickness,material,color
</select> </select>
</mapper> </mapper>
@@ -80,7 +80,7 @@
</resultMap> </resultMap>
<select id="selectPlateList" <select id="selectPlateList"
resultMap="PlateMap" resultMap="PlateMap"
parameterType="java.lang.Long"> parameterType="com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.PlatePageVO">
select select
op.id as palteId, op.id as palteId,
@@ -93,12 +93,22 @@
from order_item oi from order_item oi
join order_plate op on oi.plate_id = op .id join order_plate op on oi.plate_id = op .id
join plate p on op.goods_id = p.goods_id join plate p on op.goods_id = p.goods_id
where oi.body_id = #{bodyId}
<where>
<if test="bodyId != null">
and oi.body_id = #{bodyId}
</if>
<if test="groupId != null">
and oi.group_id = #{groupId}
</if>
</where>
</select> </select>
<!--where oi.body_id = #{bodyId}-->
<resultMap id="PlateDetailsMap" type="com.cf.imes.module.manage.controller.admin.pack.vo.PlateDetailsRespVO"> <resultMap id="PlateDetailsMap" type="com.cf.imes.module.manage.controller.admin.pack.vo.PlateDetailsRespVO">