XiaoRuby
2023-08-11 7b09f233bde70508f6db7e08e983e9a2c4bb3e99
Merge remote-tracking branch 'origin/master'
已添加32个文件
已修改34个文件
2530 ■■■■■ 文件已修改
framework/src/main/java/com/yuanchu/mom/exception/MyFileException.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/handler/GlobalExceptionHandler.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/utils/FileSaveUtil.java 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/FinishedInspectController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/RawInspectController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/InspectUnaccepted.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/RawInspect.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/FinishedInspectService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/FinishedInspectServiceImpl.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/RawInspectServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InspectUnacceptedMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/RawInspectMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/controller/ConsignmentController.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/controller/ImportRepertoryController.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/controller/ReceiptController.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/controller/RepertoryController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/mapper/ConsignmentMapper.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/mapper/ImportRepertoryMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/mapper/ReceiptMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/mapper/RepertoryMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/pojo/Consignment.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/pojo/ImportRepertory.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/pojo/Receipt.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/pojo/Repertory.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/pojo/dto/ConsignmentDto.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/pojo/dto/ImportRepertoryDto.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/service/ConsignmentService.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/service/ImportRepertoryService.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/service/ReceiptService.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/service/RepertoryService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/service/impl/ConsignmentServiceImpl.java 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/service/impl/ImportRepertoryServiceImpl.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/service/impl/ReceiptServiceImpl.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/service/impl/RepertoryServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/resources/mapper/ConsignmentMapper.xml 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/resources/mapper/ImportRepertoryMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/resources/mapper/ReceiptMapper.xml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/resources/mapper/RepertoryMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sale-server/pom.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sale-server/src/main/java/com/yuanchu/mom/controller/SaleController.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sale-server/src/main/java/com/yuanchu/mom/mapper/SaleMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sale-server/src/main/java/com/yuanchu/mom/pojo/Sale.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sale-server/src/main/java/com/yuanchu/mom/pojo/SaleMaterial.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sale-server/src/main/java/com/yuanchu/mom/pojo/dto/ConsignmentDto1.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sale-server/src/main/java/com/yuanchu/mom/pojo/dto/ConsignmentDto2.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sale-server/src/main/java/com/yuanchu/mom/service/SaleService.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sale-server/src/main/java/com/yuanchu/mom/service/impl/SaleServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sale-server/src/main/resources/mapper/SaleMapper.xml 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sale-server/src/main/resources/mapper/SaleMaterialMapper.xml 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/controller/TechnologyTemplateController.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/mapper/TechnologyTemplateMapper.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/pojo/RawInsProduct.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/pojo/TechnologyTemplate.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/pojo/dto/TechnologyTemplateDto.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/pojo/vo/TechnologyTemplateVo1.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/pojo/vo/TechnologyTemplateVo2.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/TechnologyTemplateService.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/impl/TechnologyTemplateServiceImpl.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/resources/mapper/OrdersMapper.xml 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/resources/mapper/TechnologyTemplateMapper.xml 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/java/com/yuanchu/mom/SystemRunApplication.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/resources/application-dev.yml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/controller/UserController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/exception/MyFileException.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.yuanchu.mom.exception;
public class MyFileException extends RuntimeException{
    public MyFileException() {
    }
    public MyFileException(String message) {
        super(message);
    }
    public MyFileException(Throwable cause) {
        super(cause);
    }
    public MyFileException(String message, Throwable cause) {
        super(message, cause);
    }
}
framework/src/main/java/com/yuanchu/mom/handler/GlobalExceptionHandler.java
@@ -1,11 +1,15 @@
package com.yuanchu.mom.handler;
import com.yuanchu.mom.exception.MyFileException;
import com.yuanchu.mom.vo.Result;
import lombok.extern.slf4j.Slf4j;
import org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException;
import org.apache.tomcat.util.http.fileupload.impl.SizeLimitExceededException;
import org.springframework.beans.ConversionNotSupportedException;
import org.springframework.beans.TypeMismatchException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException;
@@ -14,6 +18,7 @@
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.multipart.MultipartException;
import javax.servlet.http.HttpServletResponse;
import java.io.FileNotFoundException;
@@ -230,6 +235,35 @@
        return Result.fail(message);
    }
    @Value("${spring.servlet.multipart.max-file-size}")
    private String maxFileSize;
    @Value("${spring.servlet.multipart.max-request-size}")
    private String maxRequestSize;
    /**
     *文件过大报错提示
     */
    @ExceptionHandler({MultipartException.class})
    public Result<?> fileUploadExceptionHandler(MultipartException  e) {
        String msg;
        Throwable rootCause = e.getRootCause();
        if (rootCause instanceof FileSizeLimitExceededException) {
            msg="上传文件过大【单个文件大小不得超过" + maxFileSize + "】";
        }else if(rootCause instanceof SizeLimitExceededException){
            msg="上传文件过大【总上传大小不得超过" + maxRequestSize + "】";
        }else {
            msg="文件上传失败【服务器异常】";
        }
        return Result.fail(msg);
    }
    /** æ–‡ä»¶åŽç¼€åä¸é€šè¿‡è¿”回提示 */
    @ExceptionHandler({MyFileException.class})
    public Result<?> myFileException(Exception e) {
        return Result.fail("抱歉不支持【" + e.getMessage() +"】后缀的文件!");
    }
    /** å…¶ä»–错误 */
    /**
     * å…¶ä»–错误
framework/src/main/java/com/yuanchu/mom/utils/FileSaveUtil.java
@@ -1,10 +1,15 @@
package com.yuanchu.mom.utils;
import com.yuanchu.mom.exception.MyFileException;
import lombok.extern.slf4j.Slf4j;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.FileSystemUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.PostConstruct;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -16,36 +21,66 @@
public class FileSaveUtil {
    // å–yml中的路径 + /
//    @Value("${file.path}")
    private String FILE_PATH;
    private static String FILE_PATH;
    private static String[] ALLOWED;
    @Value("${file.path}")
    private String file;
    @Value("${file.allowed}")
    private String[] allowed;
    @PostConstruct
    public void getFile() {
        FILE_PATH = this.file;
    }
    @PostConstruct
    public void getAllowed(){
        ALLOWED = this.allowed;
    }
    /**
     * å­˜å‚¨æ–‡ä»¶ä¸»å‡½æ•°
     * @param content æ–‡ä»¶äºŒè¿›åˆ¶æµ
     * @param originalFilename æ–‡ä»¶åç§°
     * @param file æ–‡ä»¶äºŒè¿›åˆ¶æµ
     * @return è¿”回文件名称用于存储数据库
     */
    public String StoreFile(byte[] content, String originalFilename) {
    public static String StoreFile(MultipartFile file) {
        String originalFilename = file.getOriginalFilename();
        // ç”Ÿæˆéšæœºåç§°ï¼šæ—¶é—´_随机6位数字
        String FileName = System.currentTimeMillis() + "_" + MyUtil.getNumber(6);
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        String suffix = null;
        if (originalFilename != null) {
            suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
            // å¦‚果后缀名不通过抛出异常
            if (!isFileAllowed(suffix)){
                throw  new MyFileException(suffix);
            }
        }
        // åç§°æ‹¼æŽ¥
        String fileName = FileName + suffix;
        // è¿›è¡Œå­˜å‚¨
        storeFileWithFileName(content, fileName);
        try {
            storeFileWithFileName(file.getBytes(), fileName);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return fileName;
    }
    public static Boolean DeleteFile(String fileName) {
        return FileSystemUtils.deleteRecursively(new File(FILE_PATH + "/" + fileName));
    }
    /**
     * å­˜å‚¨æ–‡ä»¶å‡½æ•°
     * @param content æ–‡ä»¶äºŒè¿›åˆ¶æµ
     * @param fileName æ–‡ä»¶åç§°
     */
    private void storeFileWithFileName(byte[] content, String fileName) {
    private static void storeFileWithFileName(byte[] content, String fileName) {
        // å­˜å‚¨è·¯å¾„
        String path = FILE_PATH + java.io.File.separatorChar;
        String path = FILE_PATH + File.separatorChar;
        // ç›®å½•不存在则创建
        java.io.File file = new java.io.File(path);
        File file = new File(path);
        if (!file.exists()) {
            file.mkdirs();
        }
@@ -57,4 +92,21 @@
            MyUtil.PrintLog("存储文件异常:" + e);
        }
    }
    /**
     * åˆ¤æ–­æ–‡ä»¶æ˜¯å¦è¢«å…è®¸ä¸Šä¼ 
     *
     * @param fileName æ–‡ä»¶å
     * @return å…è®¸true, å¦åˆ™false
     */
    private static boolean isFileAllowed(String fileName) {
        // èŽ·å–åŽç¼€å
        String suffixName = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
        for (String allow : ALLOWED) {
            if (allow.equals(suffixName)) {
                return true;
            }
        }
        return false;
    }
}
inspect-server/pom.xml
@@ -33,6 +33,11 @@
            <artifactId>standard-server</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.yuanchu.mom</groupId>
            <artifactId>inventory-server</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.vaadin.external.google</groupId>
inspect-server/src/main/java/com/yuanchu/mom/controller/FinishedInspectController.java
@@ -5,6 +5,8 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.FinishedInspect;
import com.yuanchu.mom.service.*;
import com.yuanchu.mom.utils.JackSonUtil;
import com.yuanchu.mom.utils.Jwt;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -43,6 +45,9 @@
    @Autowired
    private MaterialService materialService;
    @Autowired
    Jwt jwt;
    @ApiOperation(value = "新增按钮-->1、新增成品检验单")
    @PostMapping("/add_process_inspection_sheet")
@@ -84,8 +89,9 @@
            @ApiImplicitParam(name = "result",value = "检验结论",dataTypeClass  = Integer.class,required = true),
    })
    @PostMapping("/inspection_conclusion")
    public Result<?> inspectionConclusion(Integer finishedInspectId, Integer result){
        Integer isInsertSuccess = finishedInspectService.inspectionConclusion(finishedInspectId, result);
    public Result<?> inspectionConclusion(@RequestHeader("token") String token,Integer finishedInspectId, Integer result) throws Exception {
        Map<String, String> data = JackSonUtil.unmarshal(jwt.readJWT(token).get("data"), Map.class);
        Integer isInsertSuccess = finishedInspectService.inspectionConclusion(data.get("name").replaceAll("\"", ""),finishedInspectId, result);
        if (isInsertSuccess == 1){
            return Result.success("上报成功!");
        }
inspect-server/src/main/java/com/yuanchu/mom/controller/RawInspectController.java
@@ -4,6 +4,7 @@
import com.yuanchu.mom.pojo.RawInspect;
import com.yuanchu.mom.service.*;
import com.yuanchu.mom.utils.JackSonUtil;
import com.yuanchu.mom.utils.Jwt;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.*;
@@ -106,12 +107,9 @@
    @ApiOperation(value = "新增检验单")
    @PostMapping("/addRawInspects")
    public Result addRawInspects(@RequestHeader("token") String token, @RequestBody RawInspect rawInspect) throws JSONException {
        Map<String, String> map = jwt.readJWT(token);
        String data = map.get("data");
        JSONObject jsonObject = new JSONObject(data);
        String userName = jsonObject.getString("name");
        return Result.success(rawInspectService.addRawInspects(userName, rawInspect));
    public Result addRawInspects(@RequestHeader("token") String token, @RequestBody RawInspect rawInspect) throws Exception {
        Map<String, String> data = JackSonUtil.unmarshal(jwt.readJWT(token).get("data"), Map.class);
        return Result.success(rawInspectService.addRawInspects(data.get("name").replaceAll("\"", ""), rawInspect));
    }
}
inspect-server/src/main/java/com/yuanchu/mom/pojo/InspectUnaccepted.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
@@ -53,9 +54,8 @@
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date dealTime;
    /**
     * ${column.comment}
     **/
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    @TableLogic(value = "1", delval = "0")
    private Integer state;
    /**
inspect-server/src/main/java/com/yuanchu/mom/pojo/RawInspect.java
@@ -6,6 +6,7 @@
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -75,9 +76,8 @@
     */
    private String userName;
    /**
     *
     */
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    @TableLogic(value = "1", delval = "0")
    private Integer state;
    /**
inspect-server/src/main/java/com/yuanchu/mom/service/FinishedInspectService.java
@@ -21,7 +21,7 @@
    @Transactional(rollbackFor = Exception.class)
    Integer addProcessInspectionSheet(FinishedInspect finishedInspect);
    Integer inspectionConclusion(Integer finishedInspectId, Integer result);
    Integer inspectionConclusion(String username,Integer finishedInspectId, Integer result);
    IPage<Map<String, Object>> selectFinishedInspectPage(Page<Object> page, Integer inspectResult, String inspectDate, String inspectUsername);
}
inspect-server/src/main/java/com/yuanchu/mom/service/impl/FinishedInspectServiceImpl.java
@@ -1,18 +1,22 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.mapper.InspectUnacceptedMapper;
import com.yuanchu.mom.mapper.RepertoryMapper;
import com.yuanchu.mom.pojo.FinishedInspect;
import com.yuanchu.mom.mapper.FinishedInspectMapper;
import com.yuanchu.mom.pojo.InspectUnaccepted;
import com.yuanchu.mom.pojo.Repertory;
import com.yuanchu.mom.service.FinishedInspectService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.service.InspectionItemService;
import com.yuanchu.mom.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
@@ -20,7 +24,7 @@
/**
 * <p>
 *  æœåŠ¡å®žçŽ°ç±»
 * æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
@@ -41,11 +45,14 @@
    @Resource
    InspectUnacceptedMapper inspectUnacceptedMapper;
    @Resource
    RepertoryMapper repertoryMapper;
    @Override
    public Integer addProcessInspectionSheet(FinishedInspect finishedInspect) {
        finishedInspect.setType(0);
        int insert = finishedInspectMapper.insert(finishedInspect);
        if (insert == 1){
        if (insert == 1) {
            List<Map<String, Object>> maps = productService.selectProductList(finishedInspect.getSpecificationsId());
            inspectionItemService.insertList(finishedInspect.getId(), maps);
            return insert;
@@ -53,22 +60,85 @@
        return 0;
    }
    @Override
    public Integer inspectionConclusion(Integer finishedInspectId, Integer result) {
    @Transactional(rollbackFor = Exception.class)
    public Integer inspectionConclusion(String username, Integer finishedInspectId, Integer result) {
        //更新检验单里面的检验结论
        LambdaUpdateWrapper<FinishedInspect> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(FinishedInspect::getId, finishedInspectId);
        updateWrapper.set(FinishedInspect::getResult, result);
        finishedInspectMapper.update(new FinishedInspect(), updateWrapper);
        //如果检验结论为不合格,则需要新增不合格检验单
        //如果检验结论为不合格,则需要新增不合格检验单,还需要新增半成品库存
        FinishedInspect finishedInspect = finishedInspectMapper.selectById(finishedInspectId);
        if (result == 0) {
            /*新增不合格检验单*/
            InspectUnaccepted inspectUnaccepted = InspectUnaccepted.builder()
                    .reason(finishedInspect.getProjectName() + "不合格")  //暂且定义为工程名称不合格
                    .rawInspectId(finishedInspectId)
                    .type(finishedInspect.getType())
                    .build();
            inspectUnacceptedMapper.insert(inspectUnaccepted);
            /*新增半成品(1)库存*/
            //如果入库的信息一样只有库存不一样,则在原来的库存数量上加上相应的数量
            LambdaQueryWrapper<Repertory> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(Repertory::getOrderCode, finishedInspect.getOrderNumber())
                    .eq(Repertory::getCode, finishedInspect.getMaterialCode())
                    .eq(Repertory::getName, finishedInspect.getMaterial())
                    .eq(Repertory::getSpecifications, finishedInspect.getSpecificationsModel())
                    .eq(Repertory::getUnit, finishedInspect.getUnit())
                    .eq(Repertory::getType, 1);
            Repertory rep = repertoryMapper.selectOne(queryWrapper);
            if (rep != null && rep.getCheckState()==1) {
                rep.setNumber(rep.getNumber() + finishedInspect.getQuantity());
                rep.setUserName(username);
                repertoryMapper.updateById(rep);
            } else {
                //如果除了库存别的信息有任何一个不一样,则新增一条半成品库存
                Repertory repertory = Repertory.builder()
                        .orderCode(finishedInspect.getOrderNumber())
                        .code(finishedInspect.getMaterialCode())
                        .name(finishedInspect.getMaterial())
                        .specifications(finishedInspect.getSpecificationsModel())
                        .unit(finishedInspect.getUnit())
                        .number(finishedInspect.getQuantity())
                        .userName(username)
                        .type(1)
                        .checkState(1)
                        .build();
                repertoryMapper.insert(repertory);
            }
        }
        //如果检验合格,需要新增成品(0)库存
        if (result == 1) {
            //如果入库的信息一样只有库存不一样,则在原来的库存数量上加上相应的数量
            LambdaQueryWrapper<Repertory> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(Repertory::getOrderCode, finishedInspect.getOrderNumber())
                    .eq(Repertory::getCode, finishedInspect.getMaterialCode())
                    .eq(Repertory::getName, finishedInspect.getMaterial())
                    .eq(Repertory::getSpecifications, finishedInspect.getSpecificationsModel())
                    .eq(Repertory::getUnit, finishedInspect.getUnit())
                    .eq(Repertory::getType, 0);
            Repertory rep = repertoryMapper.selectOne(queryWrapper);
            if (rep != null && rep.getCheckState()==1) {
                rep.setNumber(rep.getNumber() + finishedInspect.getQuantity());
                rep.setUserName(username);
                repertoryMapper.updateById(rep);
            } else {
                //如果除了库存别的信息有任何一个不一样,则新增一条成品库存
                Repertory repertory = Repertory.builder()
                        .orderCode(finishedInspect.getOrderNumber())
                        .code(finishedInspect.getMaterialCode())
                        .name(finishedInspect.getMaterial())
                        .specifications(finishedInspect.getSpecificationsModel())
                        .unit(finishedInspect.getUnit())
                        .number(finishedInspect.getQuantity())
                        .userName(username)
                        .type(0)
                        .checkState(1)
                        .build();
                repertoryMapper.insert(repertory);
            }
        }
        return 1;
    }
inspect-server/src/main/java/com/yuanchu/mom/service/impl/RawInspectServiceImpl.java
@@ -161,26 +161,6 @@
        rawInsProductService.saveBatch(list);
        return rawInspect.getId();
    }
    //判断数组是否包含0
    private static boolean containsZero(Object[] array) {
        for (Object num : array) {
            if (num.equals(0)) {
                return true;
            }
        }
        return false;
    }
    //判断数组是否全部为1
    private static boolean allOnes(Object[] array) {
        for (Object num : array) {
            if (!num.equals(1)) {
                return false;
            }
        }
        return true;
    }
}
inspect-server/src/main/resources/mapper/InspectUnacceptedMapper.xml
@@ -2,7 +2,8 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yuanchu.mom.mapper.InspectUnacceptedMapper">
    <select id="selectUnRawInspectsList" resultType="java.util.Map">
        select DATE_FORMAT(form_time, '%Y-%m-%d') '来料日期',
        select ru.id
        DATE_FORMAT(form_time, '%Y-%m-%d') '来料日期',
        reason,
        code,
        name,
@@ -17,20 +18,22 @@
        DATE_FORMAT(deal_time, '%Y-%m-%d') '处理日期'
        from mom_ocean.raw_inspect ri inner join mom_ocean.inspect_unaccepted ru on ri.id = ru.raw_inspect_id
        <where>
        <if test="dealState!=null">
        <if test="dealState!=null and dealState!=''">
           and deal_state=#{dealState}
        </if>
        <if test="formTime!=null">
        <if test="formTime!=null and formTime!=''">
            and form_time=#{formTime}
        </if>
        <if test="type!=null">
        <if test="type!=null and type!=''">
            and ru.type=#{type}
        </if>
        and ru.state=1
        </where>
        order by ru.id desc
    </select>
    <select id="selectInsList" resultType="java.util.Map">
        select DATE_FORMAT(fi.create_time, '%Y-%m-%d') '来料日期',
        select ru.id
        DATE_FORMAT(fi.create_time, '%Y-%m-%d') '来料日期',
        reason,
        material_code,
        name,
@@ -48,15 +51,16 @@
        mom_ocean.user u
        where fi.id = ru.raw_inspect_id
        and fi.user_id=u.id
        <if test="dealState!=null">
        <if test="dealState!=null and dealState!=''">
            and deal_state=#{dealState}
        </if>
        <if test="formTime!=null">
        <if test="formTime!=null and formTime!=''">
            and fi.create_time=#{formTime}
        </if>
        <if test="type!=null">
        <if test="type!=null and type!=''">
            and ru.type=#{type}
        </if>
        and ru.state=1
        order by ru.id desc
    </select>
</mapper>
inspect-server/src/main/resources/mapper/RawInspectMapper.xml
@@ -3,7 +3,6 @@
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yuanchu.mom.mapper.RawInspectMapper">
    <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.RawInspect">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="code" column="code" jdbcType="VARCHAR"/>
@@ -21,8 +20,9 @@
        <result property="formTime" column="form_time" jdbcType="DATE"/>
    </resultMap>
    <select id="selectRawInspectsByLimit" resultType="com.yuanchu.mom.pojo.RawInspect">
        select id, code, name, specifications, unit, number, ins_state, judge_state, ins_time, user_name, create_time, form_time
        from raw_inspect
        select id, code, name, specifications, unit, number, ins_state, judge_state, ins_time, user_name, create_time,
        form_time
        from mom_ocean.raw_inspect
        where state = 1
        <if test="formTime!=null and formTime!=''">
            and form_time = #{formTime}
@@ -36,6 +36,7 @@
        <if test="judgeState!=2">
            and judge_state = #{judgeState}
        </if>
        order by id desc
        limit #{pageSize},#{countSize}
    </select>
</mapper>
inventory-server/pom.xml
@@ -31,6 +31,12 @@
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.yuanchu.mom</groupId>
            <artifactId>sale-server</artifactId>
            <version>1.0.0</version>
        </dependency>
        <!--工具模块-->
        <dependency>
            <groupId>com.yuanchu.mom</groupId>
inventory-server/src/main/java/com/yuanchu/mom/controller/ConsignmentController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,98 @@
package com.yuanchu.mom.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.dto.ConsignmentDto;
import com.yuanchu.mom.service.SaleService;
import com.yuanchu.mom.utils.JackSonUtil;
import com.yuanchu.mom.utils.Jwt;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.yuanchu.mom.service.ConsignmentService;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * æˆå“å‘货表(Consignment)表控制层
 *
 * @author zss
 * @since 2023-08-10 15:08:02
 */
@Api(tags = "WMS管理-->成品发货")
@RestController
@RequestMapping("/consignment")
public class ConsignmentController {
    @Autowired
    private ConsignmentService consignmentService;
    @Resource
    SaleService saleService;
    @Resource
    Jwt jwt;
    @ApiOperation(value = "新增成品发货-->根据订单号查询销售信息")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "orderNumber", value = "订单编号", dataTypeClass = String.class, required = true)
    })
    @GetMapping("/selSale")
    public Result selSale(String orderNumber) {
        return Result.success(saleService.selSale(orderNumber));
    }
    @ApiOperation(value = "新增成品发货")
    @PostMapping("/addCon")
    public Result addCon(@RequestHeader("token") String token, @RequestBody ConsignmentDto consignmentDto) throws Exception {
        Map<String, String> data = JackSonUtil.unmarshal(jwt.readJWT(token).get("data"), Map.class);
        return Result.success(consignmentService.addCon(data.get("name").replaceAll("\"", ""), consignmentDto));
    }
    @ApiOperation(value = "查询发货记录列表")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "pageSize", value = "页数", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "countSize", value = "条数/页", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "name", value = "产品名称", dataTypeClass = String.class),
            @ApiImplicitParam(name = "specifications", value = "产品型号", dataTypeClass = String.class),
            @ApiImplicitParam(name = "time", value = "发货日期", dataTypeClass = String.class)
    })
    @GetMapping("/selectAllCon")
    public Result selectAllCon(int pageSize, int countSize, String name, String specifications, String time) {
        IPage<Map<String, Object>> consignmentPage = consignmentService.selectAllCon(new Page<Object>(pageSize, countSize), name, specifications, time);
        Map<String, Object> map = new HashMap<>();
        map.put("total", consignmentPage.getTotal());
        map.put("row", consignmentPage.getRecords());
        return Result.success(map);
    }
    @ApiOperation(value = "根据发货id删除")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "id", value = "发货id", dataTypeClass = Integer.class, required = true)
    })
    @PostMapping("/delCon")
    public Result delCon(Integer id) {
        consignmentService.delCon(id);
        return Result.success();
    }
    @ApiOperation(value = "批量删除")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "ids", value = "ids", dataTypeClass = Integer.class, dataType = "List", required = true)
    })
    @PostMapping("/delAllCon")
    public Result delAllCon(@RequestParam("ids") List<Integer> ids) {
        consignmentService.delAllCon(ids);
        return Result.success();
    }
}
inventory-server/src/main/java/com/yuanchu/mom/controller/ImportRepertoryController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
package com.yuanchu.mom.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.ImportRepertory;
import com.yuanchu.mom.pojo.dto.ImportRepertoryDto;
import com.yuanchu.mom.utils.JackSonUtil;
import com.yuanchu.mom.utils.Jwt;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.yuanchu.mom.service.ImportRepertoryService;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * æˆå“å…¥åº“表(ImportRepertory)表控制层
 *
 * @author zss
 * @since 2023-08-10 10:27:01
 */
@Api(tags = "WMS管理-->成品入库")
@RestController
@RequestMapping("/importRepertory")
public class ImportRepertoryController {
    @Autowired
    private ImportRepertoryService importRepertoryService;
    @Resource
    Jwt jwt;
    @ApiOperation(value = "新增成品入库")
    @PostMapping("/addImpRep")
    public Result addSale(@RequestHeader("token") String token, @RequestBody ImportRepertoryDto importRepertoryDto) throws Exception {
        Map<String, String> data = JackSonUtil.unmarshal(jwt.readJWT(token).get("data"), Map.class);
        importRepertoryService.addImpRep(data.get("name").replaceAll("\"", ""), importRepertoryDto);
        return Result.success("新增成功!");
    }
    @ApiOperation("查询所有入库列表")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "pageSize", value = "页数", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "countSize", value = "条数/页", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "orderCode", value = "订单编号", dataTypeClass = String.class),
            @ApiImplicitParam(name = "name", value = "材料名称", dataTypeClass = String.class),
            @ApiImplicitParam(name = "time", value = "入库日期", dataTypeClass = String.class)
    })
    @GetMapping("/selectAllImpRep")
    public Result selectAllImpRep(int pageSize, int countSize, String orderCode, String name, String time) {
        IPage<Map<String, Object>> importRepertoryPage = importRepertoryService.selectAllImpRep(new Page<Object>(pageSize, countSize), orderCode, name, time);
        Map<String, Object> map = new HashMap<>();
        map.put("total", importRepertoryPage.getTotal());
        map.put("row", importRepertoryPage.getRecords());
        return Result.success(map);
    }
    @ApiOperation("根据id查看入库详情")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "id", value = "入库id", dataTypeClass = Integer.class, required = true)
    })
    @GetMapping("/selectImpRepById")
    public Result selectImpRepById(Integer id) {
        return Result.success(importRepertoryService.getById(id));
    }
    @ApiOperation(value = "根据入库id删除")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "id", value = "入库id", dataTypeClass = Integer.class, required = true)
    })
    @PostMapping("/delImpRep")
    public Result delImpRep(Integer id) {
        importRepertoryService.delImpRep(id);
        return Result.success();
    }
    @ApiOperation(value = "批量删除")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "ids", value = "ids", dataTypeClass = Integer.class, dataType = "List", required = true)
    })
    @PostMapping("/delAllImpRep")
    public Result delAllImpRep(@RequestParam("ids") List<Integer> ids) {
        importRepertoryService.delAllImpRep(ids);
        return Result.success();
    }
}
inventory-server/src/main/java/com/yuanchu/mom/controller/ReceiptController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,98 @@
package com.yuanchu.mom.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import com.yuanchu.mom.service.ReceiptService;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * å›žå•表(Receipt)表控制层
 *
 * @author zss
 * @since 2023-08-11 10:08:54
 */
@Api(tags = "WMS管理-->回单管理")
@RestController
@RequestMapping("/receipt")
public class ReceiptController {
    @Autowired
    private ReceiptService receiptService;
    @ApiOperation(value = "查询回单列表")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "pageSize", value = "页数", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "countSize", value = "条数/页", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "name", value = "产品名称", dataTypeClass = String.class),
            @ApiImplicitParam(name = "orderCode", value = "订单编号", dataTypeClass = String.class),
            @ApiImplicitParam(name = "type", value = "类型(为空=全部)", dataTypeClass = String.class),
            @ApiImplicitParam(name = "deliverTime", value = "发货日期", dataTypeClass = String.class)
    })
    @GetMapping("/selectAllRece")
    public Result selectAllRece(int pageSize, int countSize, String name, String orderCode, String type, String deliverTime) {
        IPage<Map<String, Object>> receiptPage = receiptService.selectAllRece(new Page<Object>(pageSize, countSize), name, orderCode, type, deliverTime);
        Map<String, Object> map = new HashMap<>();
        map.put("total", receiptPage.getTotal());
        map.put("row", receiptPage.getRecords());
        return Result.success(map);
    }
    @ApiOperation(value = "核销")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "id", value = "回单id", dataTypeClass = Integer.class, required = true)
    })
    @PostMapping("/delRece")
    public Result delRece(Integer id) {
        receiptService.delRece(id);
        return Result.success();
    }
    @ApiOperation(value = "批量核销")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "ids", value = "ids", dataTypeClass = Integer.class, dataType = "List", required = true)
    })
    @PostMapping("/delAllRece")
    public Result delAllRece(@RequestParam("ids") List<Integer> ids) {
        receiptService.delAllRece(ids);
        return Result.success();
    }
    @ApiOperation(value = "上传附件")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "id", value = "回单id", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "file", value = "回单文件", dataTypeClass = MultipartFile.class, required = true)
    })
    @PostMapping("/updRece")
    public Result updRece(Integer id,@RequestPart MultipartFile file) {
        receiptService.updRece(id, file);
        return Result.success();
    }
    @ApiOperation(value = "查看回单")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "id", value = "回单id", dataTypeClass = Integer.class, required = true)
    })
    @PostMapping("/selReceDatil")
    public ResponseEntity<byte[]> selReceDatil(Integer id) throws IOException {
        return receiptService.selReceDatil(id);
    }
}
inventory-server/src/main/java/com/yuanchu/mom/controller/RepertoryController.java
@@ -34,11 +34,12 @@
            @ApiImplicitParam(name = "name", value = "产品名称", dataTypeClass = String.class),
            @ApiImplicitParam(name = "specifications", value = "产品型号", dataTypeClass = String.class),
            @ApiImplicitParam(name = "time", value = "入库日期", dataTypeClass = String.class),
            @ApiImplicitParam(name = "type", value = "类型(为空=全部)", dataTypeClass = Integer.class)
            @ApiImplicitParam(name = "type", value = "类型(为空=全部)", dataTypeClass = Integer.class),
            @ApiImplicitParam(name = "checkState", value = "检验状态(为空=全部)", dataTypeClass = Integer.class)
    })
    @GetMapping("/selectAllRepertory")
    public Result selectAllRepertory(int pageSize, int countSize, String name, String specifications, String time, Integer type) {
        IPage<Map<String, Object>> repertoryPage = repertoryService.selectAllRepertory(new Page<Object>(pageSize, countSize), name, specifications, time, type);
    public Result selectAllRepertory(int pageSize, int countSize, String name, String specifications, String time, Integer type,Integer checkState) {
        IPage<Map<String, Object>> repertoryPage = repertoryService.selectAllRepertory(new Page<Object>(pageSize, countSize), name, specifications, time, type,checkState);
        Map<String, Object> map = new HashMap<>();
        map.put("total", repertoryPage.getTotal());
        map.put("row", repertoryPage.getRecords());
inventory-server/src/main/java/com/yuanchu/mom/mapper/ConsignmentMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.yuanchu.mom.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.Consignment;
import java.util.List;
import java.util.Map;
/**
 * æˆå“å‘货表(Consignment)表数据库访问层
 *
 * @author zss
 * @since 2023-08-10 15:08:02
 */
public interface ConsignmentMapper extends BaseMapper<Consignment> {
    //查询所有发货记录
    List<Consignment> selectAll();
    //查询发货记录列表
    IPage<Map<String, Object>> selectAllCon(Page<Object> page, String name, String specifications, String time);
}
inventory-server/src/main/java/com/yuanchu/mom/mapper/ImportRepertoryMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.yuanchu.mom.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.ImportRepertory;
import java.util.Map;
/**
 * æˆå“å…¥åº“表(ImportRepertory)表数据库访问层
 *
 * @author zss
 * @since 2023-08-10 10:27:01
 */
public interface ImportRepertoryMapper extends BaseMapper<ImportRepertory> {
    //查询入库列表
    IPage<Map<String, Object>> selectAllImpRep(Page<Object> page, String orderCode, String name, String time);
}
inventory-server/src/main/java/com/yuanchu/mom/mapper/ReceiptMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.yuanchu.mom.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.Receipt;
import java.util.Map;
/**
 * å›žå•表(Receipt)表数据库访问层
 *
 * @author zss
 * @since 2023-08-11 10:08:54
 */
public interface ReceiptMapper extends BaseMapper<Receipt> {
    //查询回单列表
    IPage<Map<String, Object>> selectAllRece(Page<Object> page, String name, String orderCode, String type, String deliverTime);
}
inventory-server/src/main/java/com/yuanchu/mom/mapper/RepertoryMapper.java
@@ -17,6 +17,6 @@
public interface RepertoryMapper extends BaseMapper<Repertory> {
    //查询所有库存列表
    IPage<Map<String, Object>> selectAllRepertory(Page<Object> page, String name, String specifications, String time, Integer type);
    IPage<Map<String, Object>> selectAllRepertory(Page<Object> page, String name, String specifications, String time, Integer type,Integer checkState);
}
inventory-server/src/main/java/com/yuanchu/mom/pojo/Consignment.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,106 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.io.Serializable;
/**
 * æˆå“å‘货表(Consignment)表实体类
 *
 * @author zss
 * @since 2023-08-10 15:08:02
 */
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Builder
@TableName("consignment")
public class Consignment implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * id
     **/
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * åˆåŒç¼–号
     **/
    private String customerCode;
    /**
     * æŠ¼è¿å•编号
     **/
    private String escortCode;
    /**
     * è®¢å•编号
     **/
    private String orderCode;
    /**
     * ææ–™ç¼–码
     **/
    private String code;
    /**
     * ææ–™åç§°
     **/
    private String name;
    /**
     * åž‹å·è§„æ ¼
     **/
    private String specifications;
    /**
     * å•位
     **/
    private String unit;
    /**
     * æ•°é‡
     **/
    private Integer number;
    /**
     * ç¼–制人、发货人(当前用户名)
     **/
    private String userName;
    /**
     * æ£€æŸ¥äººå‘˜
     **/
    private String checkName;
    /**
     * è£…配人员
     **/
    private String fitName;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    private Integer state;
    /**
     * å‘货日期
     **/
    @TableField(fill = FieldFill.INSERT)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date updateTime;
}
inventory-server/src/main/java/com/yuanchu/mom/pojo/ImportRepertory.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,92 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.io.Serializable;
/**
 * æˆå“å…¥åº“表(ImportRepertory)表实体类
 *
 * @author zss
 * @since 2023-08-10 10:27:02
 */
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Builder
@TableName("import_repertory")
public class ImportRepertory implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * id
     **/
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * è®¢å•编码
     **/
    private String orderCode;
    /**
     * ææ–™ç¼–码
     **/
    private String code;
    /**
     * ææ–™åç§°
     **/
    private String name;
    /**
     * åž‹å·è§„æ ¼
     **/
    private String specifications;
    /**
     * å•位
     **/
    private String unit;
    /**
     * æ•°é‡
     **/
    private Integer number;
    /**
     * å…¥åº“人(当前用户名)
     **/
    private String userName;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    private Integer state;
    /**
     * å…¥åº“日期
     **/
    @TableField(fill = FieldFill.INSERT)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date updateTime;
    /**
     * å¤‡æ³¨
     **/
    private String note;
}
inventory-server/src/main/java/com/yuanchu/mom/pojo/Receipt.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,105 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.io.Serializable;
/**
 * å›žå•表(Receipt)表实体类
 *
 * @author zss
 * @since 2023-08-11 10:08:55
 */
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Builder
@TableName("receipt")
public class Receipt implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * id
     **/
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * è®¢å•编号
     **/
    private String orderCode;
    /**
     * åˆåŒç¼–号(客户订单号)
     **/
    private String customerCode;
    /**
     * å®¢æˆ·åç§°
     **/
    private String proname;
    /**
     * åˆ°è´§åœ°å€
     **/
    private String adress;
    /**
     * åˆ°è´§è”系人
     **/
    private String name;
    /**
     * æ‰‹æœºå·
     **/
    private String phone;
    /**
     * æŠ¼è¿å•编号
     **/
    private String escortCode;
    /**
     * å‘货日期
     **/
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date deliverTime;
    /**
     * å‘货人
     **/
    private String userName;
    /**
     * çŠ¶æ€0:待回单;1:已回单
     **/
    private Integer type;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    private Integer state;
    @TableField(fill = FieldFill.INSERT)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date updateTime;
    /**
     * å›žå•照片url
     **/
    private String url;
}
inventory-server/src/main/java/com/yuanchu/mom/pojo/Repertory.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
@@ -51,20 +52,6 @@
     **/
    private String specifications;
    /**
     * è¯•验要求
     **/
    private String requirements;
    /**
     * å·¥è‰ºæ–‡ä»¶ç¼–号
     **/
    private String documentNumber;
    /**
     * åº“位号
     **/
    private Integer seat;
    /**
     * å•位
@@ -81,9 +68,8 @@
     **/
    private String userName;
    /**
     * ${column.comment}
     **/
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    private Integer state;
    /**
@@ -111,5 +97,10 @@
     * ç±»åž‹ 0:成品;1:半成品
     **/
    private Integer type;
    /**
     *检验状态0:未检验;1:已检验
     **/
    private Integer checkState;
}
inventory-server/src/main/java/com/yuanchu/mom/pojo/dto/ConsignmentDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
package com.yuanchu.mom.pojo.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ConsignmentDto {
    //订单编号
    @JsonSerialize
    private String orderCode;
    //合同编号
    @JsonSerialize
    private String customerCode;
    //客户名称
    @JsonSerialize
    private String proname;
    //到货地址
    @JsonSerialize
    private String adress;
    //收货联系人
    @JsonSerialize
    private String username;
    //手机号
    @JsonSerialize
    private String phone ;
    //产品信息
    @JsonSerialize
    private List<ConsignmentDto2> messages;
    //检查人员
    @JsonSerialize
    private String checkName;
    //装配人员
    @JsonSerialize
    private String fitName;
}
inventory-server/src/main/java/com/yuanchu/mom/pojo/dto/ImportRepertoryDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
package com.yuanchu.mom.pojo.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Data;
@Data
public class ImportRepertoryDto {
    /**
     * è®¢å•编码
     **/
    @JsonSerialize
    private String orderCode;
    /**
     * ææ–™ç¼–码
     **/
    @JsonSerialize
    private String code;
    /**
     * ææ–™åç§°
     **/
    @JsonSerialize
    private String name;
    /**
     * åž‹å·è§„æ ¼
     **/
    @JsonSerialize
    private String specifications;
    /**
     * å•位
     **/
    @JsonSerialize
    private String unit;
    /**
     * æ•°é‡
     **/
    @JsonSerialize
    private Integer number;
    /**
     * å¤‡æ³¨
     **/
    @JsonSerialize
    private String note;
}
inventory-server/src/main/java/com/yuanchu/mom/service/ConsignmentService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
package com.yuanchu.mom.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.mom.pojo.Consignment;
import com.yuanchu.mom.pojo.dto.ConsignmentDto;
import java.util.List;
import java.util.Map;
/**
 * æˆå“å‘货表(Consignment)表服务接口
 *
 * @author zss
 * @since 2023-08-10 15:08:02
 */
public interface ConsignmentService extends IService<Consignment> {
    /**
     * æ–°å¢žæˆå“å‘è´§
     * @param name
     * @param consignmentDto
     */
    String addCon(String name, ConsignmentDto consignmentDto);
    /**
     * æŸ¥è¯¢å‘货记录列表
     * @param page
     * @param name
     * @param specifications
     * @param time
     * @return
     */
    IPage<Map<String, Object>> selectAllCon(Page<Object> page, String name, String specifications, String time);
    /**
     * æ ¹æ®id删除
     * @param id
     */
    void delCon(Integer id);
    /**
     * æ‰¹é‡åˆ é™¤
     * @param ids
     */
    void delAllCon(List<Integer> ids);
}
inventory-server/src/main/java/com/yuanchu/mom/service/ImportRepertoryService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
package com.yuanchu.mom.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.mom.pojo.ImportRepertory;
import com.yuanchu.mom.pojo.dto.ImportRepertoryDto;
import java.util.List;
import java.util.Map;
/**
 * æˆå“å…¥åº“表(ImportRepertory)表服务接口
 *
 * @author zss
 * @since 2023-08-10 10:27:01
 */
public interface ImportRepertoryService extends IService<ImportRepertory> {
    //新增成品入库
    void addImpRep(String name, ImportRepertoryDto importRepertoryDto);
    /**
     * æŸ¥è¯¢å…¥åº“列表
     * @param page
     * @param orderCode
     * @param name
     * @param time
     * @return
     */
    IPage<Map<String, Object>> selectAllImpRep(Page<Object> page, String orderCode, String name, String time);
    /**
     * æ ¹æ®id删除
     * @param id
     */
    void delImpRep(Integer id);
    /**
     * æ‰¹é‡åˆ é™¤
     * @param ids
     */
    void delAllImpRep(List<Integer> ids);
}
inventory-server/src/main/java/com/yuanchu/mom/service/ReceiptService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
package com.yuanchu.mom.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.mom.pojo.Receipt;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
 * å›žå•表(Receipt)表服务接口
 *
 * @author zss
 * @since 2023-08-11 10:08:54
 */
public interface ReceiptService extends IService<Receipt> {
    /**
     * æŸ¥è¯¢å›žå•列表
     * @param page
     * @param name
     * @param orderCode
     * @param type
     * @param deliverTime
     * @return
     */
    IPage<Map<String, Object>> selectAllRece(Page<Object> page, String name, String orderCode, String type, String deliverTime);
    /**
     * æ ¹æ®å›žå•id删除
     * @param id
     */
    void delRece(Integer id);
    /**
     * æ‰¹é‡åˆ é™¤
     * @param ids
     */
    void delAllRece(List<Integer> ids);
    /**
     * æ ¹æ®id修改状态
     * @param id
     */
    void updRece(Integer id, MultipartFile file);
    /**
     * æ ¹æ®id查看回单
     * @param id
     */
    ResponseEntity<byte[]> selReceDatil(Integer id) throws IOException;
}
inventory-server/src/main/java/com/yuanchu/mom/service/RepertoryService.java
@@ -24,6 +24,6 @@
     * @param type
     * @return
     */
    IPage<Map<String, Object>> selectAllRepertory(Page<Object> page, String name, String specifications, String time, Integer type);
    IPage<Map<String, Object>> selectAllRepertory(Page<Object> page, String name, String specifications, String time, Integer type,Integer checkState);
}
inventory-server/src/main/java/com/yuanchu/mom/service/impl/ConsignmentServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,167 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.mapper.ConsignmentMapper;
import com.yuanchu.mom.mapper.ReceiptMapper;
import com.yuanchu.mom.mapper.RepertoryMapper;
import com.yuanchu.mom.pojo.Consignment;
import com.yuanchu.mom.pojo.Receipt;
import com.yuanchu.mom.pojo.Repertory;
import com.yuanchu.mom.pojo.dto.ConsignmentDto;
import com.yuanchu.mom.pojo.dto.ConsignmentDto2;
import com.yuanchu.mom.service.ConsignmentService;
import com.yuanchu.mom.utils.MyUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * æˆå“å‘货表(Consignment)表服务实现类
 *
 * @author zss
 * @since 2023-08-10 15:08:02
 */
@Service
public class ConsignmentServiceImpl extends ServiceImpl<ConsignmentMapper, Consignment> implements ConsignmentService {
    @Resource
    ConsignmentMapper consignmentMapper;
    @Resource
    RepertoryMapper repertoryMapper;
    @Resource
    ReceiptMapper receiptMapper;
    //新增成品发货
    @Override
    public String addCon(String name, ConsignmentDto consignmentDto) {
        //生成一个押运单编号
        String escortCode = MyUtil.getTimeSixNumberCode("YY");
        //如果该订单已经发过货了不能再发货
        List<Consignment> consignments = consignmentMapper.selectAll();
        //如果没有发货表中没有数据也可以发货
        if (consignments.size()==0) {
            /*新增成品发货*/
            String mes1 = addConsign(name, consignmentDto, escortCode);
            return mes1;
        } else {
            for (Consignment consignment : consignments) {
                if (consignment.getCustomerCode().equals(consignmentDto.getCustomerCode())) {
                    return "该合同订单已发过货,无法再次发货!";
                } else {
                    /*新增成品发货*/
                    String mes2 = addConsign(name, consignmentDto, escortCode);
                    return mes2;
                }
            }
        }
        return null;
    }
    //查询发货记录列表
    @Override
    public IPage<Map<String, Object>> selectAllCon(Page<Object> page, String name, String specifications, String time) {
        return consignmentMapper.selectAllCon(page, name, specifications, time);
    }
    //根据id删除
    @Override
    public void delCon(Integer id) {
        //删除发货记录
        Consignment consignment = consignmentMapper.selectById(id);
        consignment.setState(0);
        consignmentMapper.updateById(consignment);
        //库存也要新增
        LambdaQueryWrapper<Repertory> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Repertory::getCode, consignment.getCode())
                .eq(Repertory::getName, consignment.getName())
                .eq(Repertory::getSpecifications, consignment.getSpecifications())
                .eq(Repertory::getUnit, consignment.getUnit())
                .eq(Repertory::getType, 0) //成品发货
                .eq(Repertory::getCheckState, 1); //只有已检验才能发货
        Repertory repertory = repertoryMapper.selectOne(queryWrapper);
        repertory.setNumber(repertory.getNumber() + consignment.getNumber());
        repertoryMapper.updateById(repertory);
    }
    //批量删除
    @Override
    public void delAllCon(List<Integer> ids) {
        List<Consignment> consignments = consignmentMapper.selectBatchIds(ids);
        for (Consignment consignment : consignments) {
            consignment.setState(0);
            //删除发货记录
            consignmentMapper.updateById(consignment);
            //库存新增
            LambdaQueryWrapper<Repertory> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(Repertory::getCode, consignment.getCode())
                    .eq(Repertory::getName, consignment.getName())
                    .eq(Repertory::getSpecifications, consignment.getSpecifications())
                    .eq(Repertory::getUnit, consignment.getUnit())
                    .eq(Repertory::getType, 0) //成品发货
                    .eq(Repertory::getCheckState, 1); //只有已检验才能发货
            Repertory repertory = repertoryMapper.selectOne(queryWrapper);
            repertory.setNumber(repertory.getNumber() + consignment.getNumber());
            repertoryMapper.updateById(repertory);
        }
    }
    //新增发货一系列操作
    private String addConsign(String name, ConsignmentDto consignmentDto, String escortCode) {
        /*新增成品发货*/
        List<ConsignmentDto2> messages = consignmentDto.getMessages();
        for (ConsignmentDto2 message : messages) {
            //查询产品编码(通过在成品库存表中的产品名称,规格型号以及单位进行查找)
            LambdaQueryWrapper<Repertory> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(Repertory::getName, message.getName())
                    .eq(Repertory::getSpecifications, message.getSpecifications())
                    .eq(Repertory::getUnit, message.getUnit())
                    .eq(Repertory::getType, 0);
            Repertory repertory = repertoryMapper.selectOne(queryWrapper);
            //该成品的检验状态是已检验1才能进行发货
            if (repertory.getCheckState() == 1) {
                //该成品库存的数量大于等于发货的数量才能进行发货
                if (repertory.getNumber() >= message.getNumber()) {
                    //构造成品发货实体类
                    Consignment consig = Consignment.builder()
                            .customerCode(consignmentDto.getCustomerCode())
                            .escortCode(escortCode)
                            .orderCode(consignmentDto.getOrderCode())
                            .userName(name)
                            .checkName(consignmentDto.getCheckName())
                            .fitName(consignmentDto.getFitName())
                            .name(message.getName())
                            .specifications(message.getSpecifications())
                            .unit(message.getUnit())
                            .number(message.getNumber())
                            .code(repertory.getCode())
                            .build();
                    consignmentMapper.insert(consig);
                    /*减少对应的库存*/
                    repertory.setNumber(repertory.getNumber() - consig.getNumber());
                    repertoryMapper.updateById(repertory);
                } else return "库存不足,无法发货!";
            } else return "该产品还未检验,不能发货!";
        }
        /*发货成功之后需要新增一张回单*/
        Receipt receipt = new Receipt();
        BeanUtils.copyProperties(consignmentDto, receipt);
        receipt.setName(consignmentDto.getUsername());//收货联系人
        receipt.setUserName(name);//发货人
        receipt.setEscortCode(escortCode);//押运单编号
        receipt.setDeliverTime(new Date());//发货日期
        receiptMapper.insert(receipt);
        return "发货成功!";
    }
}
inventory-server/src/main/java/com/yuanchu/mom/service/impl/ImportRepertoryServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,120 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.mapper.ImportRepertoryMapper;
import com.yuanchu.mom.mapper.RepertoryMapper;
import com.yuanchu.mom.pojo.ImportRepertory;
import com.yuanchu.mom.pojo.Repertory;
import com.yuanchu.mom.pojo.dto.ImportRepertoryDto;
import com.yuanchu.mom.service.ImportRepertoryService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
 * æˆå“å…¥åº“表(ImportRepertory)表服务实现类
 *
 * @author zss
 * @since 2023-08-10 10:27:01
 */
@Service
public class ImportRepertoryServiceImpl extends ServiceImpl<ImportRepertoryMapper, ImportRepertory> implements ImportRepertoryService {
    @Resource
    ImportRepertoryMapper importRepertoryMapper;
    @Resource
    RepertoryMapper repertoryMapper;
    //新增成品入库
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addImpRep(String name, ImportRepertoryDto importRepertoryDto) {
        //新增成品入库
        ImportRepertory importRepertory = new ImportRepertory();
        BeanUtils.copyProperties(importRepertoryDto, importRepertory);
        importRepertory.setUserName(name);
        importRepertoryMapper.insert(importRepertory);
        //新增成品库存
        //如果入库的信息一样只有库存不一样,则在原来的库存数量上加上相应的数量
        LambdaQueryWrapper<Repertory> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Repertory::getOrderCode, importRepertoryDto.getOrderCode())
                .eq(Repertory::getCode, importRepertoryDto.getCode())
                .eq(Repertory::getName, importRepertoryDto.getName())
                .eq(Repertory::getSpecifications, importRepertoryDto.getSpecifications())
                .eq(Repertory::getUnit, importRepertoryDto.getUnit())
                .eq(Repertory::getType, 0);
        Repertory rep = repertoryMapper.selectOne(queryWrapper);
        if (rep != null && rep.getCheckState() == 0) {
            rep.setNumber(rep.getNumber() + importRepertoryDto.getNumber());
            rep.setUserName(name);
            repertoryMapper.updateById(rep);
        } else {
            //如果除了库存别的信息有任何一个不一样,则新增一条成品库存
            Repertory repertory = new Repertory();
            BeanUtils.copyProperties(importRepertoryDto, repertory);
            repertory.setUserName(name);
            repertory.setType(0);
            repertory.setCheckState(0);
            repertoryMapper.insert(repertory);
        }
    }
    //查询入库列表
    @Override
    public IPage<Map<String, Object>> selectAllImpRep(Page<Object> page, String orderCode, String name, String time) {
        return importRepertoryMapper.selectAllImpRep(page, orderCode, name, time);
    }
    //根据id删除
    @Override
    public void delImpRep(Integer id) {
        //删除入库记录
        ImportRepertory importRepertory = importRepertoryMapper.selectById(id);
        importRepertory.setState(0);
        importRepertoryMapper.updateById(importRepertory);
        //库存也要减少
        LambdaQueryWrapper<Repertory> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Repertory::getOrderCode, importRepertory.getOrderCode())
                .eq(Repertory::getCode, importRepertory.getCode())
                .eq(Repertory::getName, importRepertory.getName())
                .eq(Repertory::getSpecifications, importRepertory.getSpecifications())
                .eq(Repertory::getUnit, importRepertory.getUnit())
                .eq(Repertory::getType, 0)
                .eq(Repertory::getCheckState, 0);
        Repertory rep = repertoryMapper.selectOne(queryWrapper);
        rep.setNumber(rep.getNumber() - importRepertory.getNumber());
        repertoryMapper.updateById(rep);
    }
    //批量删除
    @Override
    public void delAllImpRep(List<Integer> ids) {
        List<ImportRepertory> importRepertories = importRepertoryMapper.selectBatchIds(ids);
        for (ImportRepertory importRepertory : importRepertories) {
            importRepertory.setState(0);
            //删除入库记录
            importRepertoryMapper.updateById(importRepertory);
            //减少库存
            LambdaQueryWrapper<Repertory> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(Repertory::getOrderCode, importRepertory.getOrderCode())
                    .eq(Repertory::getCode, importRepertory.getCode())
                    .eq(Repertory::getName, importRepertory.getName())
                    .eq(Repertory::getSpecifications, importRepertory.getSpecifications())
                    .eq(Repertory::getUnit, importRepertory.getUnit())
                    .eq(Repertory::getType, 0)
                    .eq(Repertory::getCheckState, 0);
            Repertory rep = repertoryMapper.selectOne(queryWrapper);
            rep.setNumber(rep.getNumber() - importRepertory.getNumber());
            repertoryMapper.updateById(rep);
        }
    }
}
inventory-server/src/main/java/com/yuanchu/mom/service/impl/ReceiptServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,100 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.mapper.ReceiptMapper;
import com.yuanchu.mom.pojo.Receipt;
import com.yuanchu.mom.service.ReceiptService;
import com.yuanchu.mom.utils.FileSaveUtil;
import io.swagger.models.Response;
import org.apache.logging.log4j.util.Strings;
import org.springframework.core.io.FileSystemResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.List;
import java.util.Map;
/**
 * å›žå•表(Receipt)表服务实现类
 *
 * @author zss
 * @since 2023-08-11 10:08:55
 */
@Service
public class ReceiptServiceImpl extends ServiceImpl<ReceiptMapper, Receipt> implements ReceiptService {
    @Resource
    ReceiptMapper receiptMapper;
    //查询回单列表
    @Override
    public IPage<Map<String, Object>> selectAllRece(Page<Object> page, String name, String orderCode, String type, String deliverTime) {
        return receiptMapper.selectAllRece(page, name, orderCode, type, deliverTime);
    }
    //根据id删除
    @Override
    public void delRece(Integer id) {
        Receipt receipt = receiptMapper.selectById(id);
        receipt.setState(0);
        receiptMapper.updateById(receipt);
    }
    //批量删除
    @Override
    public void delAllRece(List<Integer> ids) {
        List<Receipt> receipts = receiptMapper.selectBatchIds(ids);
        for (Receipt receipt : receipts) {
            receipt.setState(0);
            receiptMapper.updateById(receipt);
        }
    }
    //上传附件修改状态
    @Override
    public void updRece(Integer id, MultipartFile file) {
        if (ObjectUtils.isNotEmpty(file)) {
            Receipt receipt = receiptMapper.selectById(id);
            receipt.setUrl(FileSaveUtil.StoreFile(file));
            receipt.setType(1);
            receiptMapper.updateById(receipt);
        }
    }
    //根据id查看回单照片
    @Override
    public ResponseEntity<byte[]> selReceDatil(Integer id) throws IOException {
        String url = receiptMapper.selectById(id).getUrl();
        String path = "D:\\webapp\\images\\" + url;
        //获取图片格式后缀名
        String extension = getImageExtension(url);
        // è¯»å–本地图片文件,并将其转换为字节数组
        FileSystemResource imageResource = new FileSystemResource(path);
        byte[] bytes = Files.readAllBytes(imageResource.getFile().toPath());
        // è®¾ç½®HTTP头信息,告诉浏览器返回的是图片数据
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(new MediaType("image", extension));
        return new ResponseEntity<>(bytes, headers, HttpStatus.OK);
    }
    private String getImageExtension(String imageName) {
        // æ ¹æ®å›¾ç‰‡æ–‡ä»¶åèŽ·å–æ‰©å±•å
        int dotIndex = imageName.lastIndexOf('.');
        if (dotIndex > 0 && dotIndex < imageName.length() - 1) {
            return imageName.substring(dotIndex + 1);
        }
        return null;
    }
}
inventory-server/src/main/java/com/yuanchu/mom/service/impl/RepertoryServiceImpl.java
@@ -25,8 +25,8 @@
    //查询所有库存列表
    @Override
    public IPage<Map<String, Object>> selectAllRepertory(Page<Object> page, String name, String specifications, String time, Integer type) {
        return repertoryMapper.selectAllRepertory(page,name,specifications,time,type);
    public IPage<Map<String, Object>> selectAllRepertory(Page<Object> page, String name, String specifications, String time, Integer type,Integer checkState) {
        return repertoryMapper.selectAllRepertory(page,name,specifications,time,type,checkState);
    }
}
inventory-server/src/main/resources/mapper/ConsignmentMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yuanchu.mom.mapper.ConsignmentMapper">
    <select id="selectAll" resultType="com.yuanchu.mom.pojo.Consignment">
        select *
        from mom_ocean.consignment
        where state = 1
    </select>
    <select id="selectAllCon" resultType="java.util.Map">
        select id,
               name,
               specifications,
               code,
               customer_code,
               unit,
               number,
               check_name,
               fit_name,
               user_name
        from mom_ocean.consignment
        where state=1
        <if test="name!=null and name!=''">
            and name like concat('%',#{name},'%')
        </if>
        <if test="specifications!=null and specifications!=''">
            and specifications like concat('%',#{specifications},'%')
        </if>
        <if test="time!=null and time!=''">
            and DATE_FORMAT(create_time, '%Y-%m-%d')=#{time}
        </if>
        order by id desc
    </select>
</mapper>
inventory-server/src/main/resources/mapper/ImportRepertoryMapper.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="com.yuanchu.mom.mapper.ImportRepertoryMapper">
    <select id="selectAllImpRep" resultType="java.util.Map">
        select id,
        order_code,
        code,
        name,
        specifications,
        unit,
        number,
        user_name,
        create_time
        from mom_ocean.import_repertory
        where state=1
        <if test="orderCode!=null and orderCode!=''">
            and order_code like concat('%',#{orderCode},'%')
        </if>
        <if test="name!=null and name!=''">
            and name like concat('%',#{name},'%')
        </if>
        <if test="time!=null and time!=''">
            and create_time=#{time}
        </if>
        order by id desc
    </select>
</mapper>
inventory-server/src/main/resources/mapper/ReceiptMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yuanchu.mom.mapper.ReceiptMapper">
    <select id="selectAllRece" resultType="java.util.Map">
        select id,
        order_code,
        customer_code,
        proname,
        adress,
        name,
        phone,
        escort_code,
        DATE_FORMAT(deliver_time,'%Y-%m-%d'),
        user_name,
        type
        from mom_ocean.receipt
        where state=1
        <if test="name!=null and name!=''">
            and name like concat('%',#{name},'%')
        </if>
        <if test="orderCode!=null and orderCode!=''">
            and order_code like concat('%',#{orderCode},'%')
        </if>
        <if test="type!=null and type!=''">
            and type=#{type}
        </if>
        <if test="deliverTime!=null and deliverTime!=''">
            and deliver_time=#{deliverTime}
        </if>
        order by id desc
    </select>
</mapper>
inventory-server/src/main/resources/mapper/RepertoryMapper.xml
@@ -2,30 +2,33 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yuanchu.mom.mapper.RepertoryMapper">
    <select id="selectAllRepertory" resultType="java.util.Map">
        select name,
        select id,
        name,
        specifications,
        code,
        requirements,
        order_code,
        seat,
        check_state,
        user_name,
        DATE_FORMAT(create_time, '%Y-%m-%d') '入库日期',
        note
        from mom_ocean.repertory
        <where>
            and state=1
            <if test="name!=null">
                and name =#{name}
            <if test="name!=null and name!=''">
                and name LIKE  CONCAT('%',#{name},'%')
            </if>
            <if test="specifications!=null ">
                and specifications=#{specifications}
            <if test="specifications!=null and specifications!=''">
                and specifications LIKE CONCAT('%',#{specifications},'%')
            </if>
            <if test="time!=null ">
            <if test="time!=null and time!=''">
                and create_time=#{time}
            </if>
            <if test="type!=null">
            <if test="type!=null and type!=''">
                and type=#{type}
            </if>
            <if test="checkState!=null and checkState!=''">
                and check_state=#{checkState}
            </if>
            order by id desc
        </where>
    </select>
</mapper>
sale-server/pom.xml
@@ -22,11 +22,7 @@
            <artifactId>standard-server</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.yuanchu.mom</groupId>
            <artifactId>inventory-server</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.yuanchu.mom</groupId>
            <artifactId>user-server</artifactId>
sale-server/src/main/java/com/yuanchu/mom/controller/SaleController.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.dto.vo.SaleVo;
import com.yuanchu.mom.utils.JackSonUtil;
import org.json.JSONException;
import org.json.JSONObject;
import com.yuanchu.mom.pojo.dto.SaleDto;
@@ -17,10 +18,8 @@
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.lang.reflect.Array;
import java.util.*;
/**
 * <p>
@@ -61,12 +60,9 @@
    @ApiOperation(value = "新增销售单")
    @PostMapping("/addSale")
    public Result addSale(@RequestHeader("token") String token, @RequestBody SaleDto saleDto) throws JSONException {
        Map<String, String> map = jwt.readJWT(token);
        String data = map.get("data");
        JSONObject jsonObject = new JSONObject(data);
        String saleman = jsonObject.getString("name");
        saleService.addSale(saleman, saleDto);
    public Result addSale(@RequestHeader("token") String token, @RequestBody SaleDto saleDto) throws Exception {
        Map<String, String> data = JackSonUtil.unmarshal(jwt.readJWT(token).get("data"), Map.class);
        saleService.addSale(data.get("name").replaceAll("\"", ""), saleDto);
        return Result.success("新增成功!");
    }
@@ -84,12 +80,9 @@
            @ApiImplicitParam(name = "id", value = "销售单id", dataTypeClass = Integer.class, required = true)
    })
    @PostMapping("/updateSaleById")
    public Result updateSaleById(@RequestHeader("token") String token, Integer id, @RequestBody SaleVo saleVo) throws JSONException {
        Map<String, String> map = jwt.readJWT(token);
        String data = map.get("data");
        JSONObject jsonObject = new JSONObject(data);
        String saleman = jsonObject.getString("name");
        saleService.updateSaleById(saleman,id, saleVo);
    public Result updateSaleById(@RequestHeader("token") String token, Integer id, @RequestBody SaleVo saleVo) throws Exception {
        Map<String, String> data = JackSonUtil.unmarshal(jwt.readJWT(token).get("data"), Map.class);
        saleService.updateSaleById(data.get("name").replaceAll("\"", ""),id, saleVo);
        return Result.success("修改成功!");
    }
@@ -105,10 +98,10 @@
    @ApiOperation(value = "批量删除")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "ids", value = "销售单id", dataTypeClass = String.class, dataType = "List", required = true)
            @ApiImplicitParam(name = "ids", value = "ids", dataTypeClass = Integer.class, dataType = "List",required = true)
    })
    @PostMapping("/delAllSale")
    public Result delAllSale( List<Integer> ids) {
    public Result delAllSale( @RequestParam("ids") List<Integer> ids) {
        saleService.delAllSale(ids);
        return Result.success();
    }
@@ -119,12 +112,9 @@
            @ApiImplicitParam(name = "type", value = "状态", dataTypeClass = Integer.class, required = true)
    })
    @PostMapping("/check")
    public Result check(@RequestHeader("token") String token,Integer id,Integer type) throws JSONException {
        Map<String, String> map = jwt.readJWT(token);
        String data = map.get("data");
        JSONObject jsonObject = new JSONObject(data);
        String checkname = jsonObject.getString("name");
        saleService.check(checkname,id,type);
    public Result check(@RequestHeader("token") String token,Integer id,Integer type) throws Exception {
        Map<String, String> data = JackSonUtil.unmarshal(jwt.readJWT(token).get("data"), Map.class);
        saleService.check(data.get("name").replaceAll("\"", ""),id,type);
        return Result.success("审核成功");
    }
sale-server/src/main/java/com/yuanchu/mom/mapper/SaleMapper.java
@@ -19,4 +19,7 @@
    //查询销售单列表
    IPage<Map<String, Object>> selectSaleList(Page<Object> page, String orderNumber, String name, Integer type, String delTime);
}
sale-server/src/main/java/com/yuanchu/mom/pojo/Sale.java
@@ -1,10 +1,8 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.*;
import java.time.LocalDate;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import java.util.Date;
@@ -76,6 +74,7 @@
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date checkTime;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    private Integer state;
    @TableField(fill = FieldFill.INSERT)
sale-server/src/main/java/com/yuanchu/mom/pojo/SaleMaterial.java
@@ -1,11 +1,9 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.*;
import java.time.LocalDate;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import java.util.Date;
@@ -50,6 +48,7 @@
    @ApiModelProperty(value = "单价")
    private String price;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    private Integer state;
    @TableField(fill = FieldFill.INSERT)
sale-server/src/main/java/com/yuanchu/mom/pojo/dto/ConsignmentDto1.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
package com.yuanchu.mom.pojo.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Builder;
import lombok.Data;
import java.util.List;
@Data
@Builder
public class ConsignmentDto1 {
    //订单编号
    @JsonSerialize
    private String orderCode;
    //合同编号
    @JsonSerialize
    private String customerCode;
    //客户名称
    @JsonSerialize
    private String proname;
    //到货地址
    @JsonSerialize
    private String adress;
    //收货联系人
    @JsonSerialize
    private String username;
    //手机号
    @JsonSerialize
    private String phone ;
    //产品信息
    @JsonSerialize
    private List<ConsignmentDto2> messages;
}
sale-server/src/main/java/com/yuanchu/mom/pojo/dto/ConsignmentDto2.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.yuanchu.mom.pojo.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
public class ConsignmentDto2 {
    //产品信息
    @JsonSerialize
    private String name;
    //规格型号
    @JsonSerialize
    private String specifications;
    //单位
    @JsonSerialize
    private String unit;
    //发货数量
    @JsonSerialize
    private Integer number;
}
sale-server/src/main/java/com/yuanchu/mom/service/SaleService.java
@@ -4,13 +4,12 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.Sale;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.mom.pojo.dto.ConsignmentDto1;
import com.yuanchu.mom.pojo.dto.SaleDto;
import com.yuanchu.mom.pojo.dto.vo.SaleVo;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
 * <p>
@@ -71,4 +70,11 @@
     * @param id
     */
    void check(String checkname,Integer id,Integer type);
    /**
     *根据订单号查询销售信息
     * @param orderNumber
     * @return
     */
    ConsignmentDto1 selSale(String orderNumber);
}
sale-server/src/main/java/com/yuanchu/mom/service/impl/SaleServiceImpl.java
@@ -7,10 +7,11 @@
import com.yuanchu.mom.pojo.Sale;
import com.yuanchu.mom.mapper.SaleMapper;
import com.yuanchu.mom.pojo.SaleMaterial;
import com.yuanchu.mom.pojo.dto.ConsignmentDto1;
import com.yuanchu.mom.pojo.dto.ConsignmentDto2;
import com.yuanchu.mom.pojo.dto.SaleDto;
import com.yuanchu.mom.pojo.dto.SaleMaterialDto;
import com.yuanchu.mom.pojo.dto.vo.SaleVo;
import com.yuanchu.mom.service.SaleMaterialService;
import com.yuanchu.mom.service.SaleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
@@ -20,7 +21,6 @@
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
@@ -136,4 +136,26 @@
        sale.setCheckTime(new Date());
        saleMapper.updateById(sale);
    }
    //根据订单号查询销售信息
    @Override
    public ConsignmentDto1 selSale(String orderNumber) {
        Sale sale = saleMapper.selectOne(Wrappers.<Sale>query().eq("order_number", orderNumber));
        List<SaleMaterial> saleMaterials = saleMaterialMapper.selectList(Wrappers.<SaleMaterial>query().eq("sale_id", sale.getId()));
        List<ConsignmentDto2> dto2List = saleMaterials.stream().map(saleMaterial -> {
            ConsignmentDto2 consignmentDto2 = new ConsignmentDto2();
            BeanUtils.copyProperties(saleMaterial, consignmentDto2);
            return consignmentDto2;
        }).collect(Collectors.toList());
        ConsignmentDto1 consignmentDto1 = ConsignmentDto1.builder()
                .orderCode(orderNumber)
                .customerCode(sale.getCode())
                .proname(sale.getProname())
                .adress(sale.getAdress())
                .username(sale.getUsername())
                .phone(sale.getPhone())
                .messages(dto2List)
                .build();
        return consignmentDto1;
    }
}
sale-server/src/main/resources/mapper/SaleMapper.xml
@@ -2,27 +2,27 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yuanchu.mom.mapper.SaleMapper">
    <select id="selectSaleList" resultType="java.util.Map">
        select order_number,
        select id,
        order_number,
        code,
        name,
        proname,
        type,
        DATE_FORMAT(delTime, '%Y-%m-%d') '交货日期'
        from mom_ocean.sale
        <where>
            state=1
            <if test="orderNumber!=null">
                and order_number=#{orderNumber}
            </if>
            <if test="name!=null">
                and name=#{name}
            </if>
            <if test="type!=null">
                and type=#{type}
            </if>
            <if test="delTime!=null">
                and DATE_FORMAT(delTime, '%Y-%m-%d')=#{delTime}
            </if>
        </where>
        where state=1
        <if test="orderNumber!=null and orderNumber!=''">
            and order_number like concat('%',#{orderNumber},'%')
        </if>
        <if test="name!=null and name!=''">
            and name LIKE CONCAT('%',#{name},'%')
        </if>
        <if test="type!=null and type!=''">
            and type=#{type}
        </if>
        <if test="delTime!=null and delTime!=''">
            and DATE_FORMAT(delTime, '%Y-%m-%d')=#{delTime}
        </if>
        order by id desc
    </select>
</mapper>
sale-server/src/main/resources/mapper/SaleMaterialMapper.xml
@@ -2,11 +2,18 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yuanchu.mom.mapper.SaleMaterialMapper">
    <select id="selectSaleDatil" resultType="com.yuanchu.mom.pojo.SaleMaterial">
        select id, name, specifications, unit, number, price, state, create_time, update_time, sale_id
        select id,
               name,
               specifications,
               unit,
               number,
               price,
               state,
               create_time,
               update_time,
               sale_id
        from mom_ocean.sale_material
        where state=1
        <if test="id!=null">
            and sale_id=#{id}
        </if>
        where state = 1
          and sale_id = #{id}
    </select>
</mapper>
standard-server/src/main/java/com/yuanchu/mom/controller/TechnologyTemplateController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,104 @@
package com.yuanchu.mom.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.dto.TechnologyTemplateDto;
import com.yuanchu.mom.pojo.vo.TechnologyTemplateVo1;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.yuanchu.mom.service.TechnologyTemplateService;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * å·¥è‰ºæ¨¡ç‰ˆè¡¨(TechnologyTemplate)表控制层
 *
 * @author zss
 * @since 2023-08-09 11:20:20
 */
@Api(tags = "基础数据-->工序")
@RestController
@RequestMapping("/technologyTemplate")
public class TechnologyTemplateController {
    @Autowired
    private TechnologyTemplateService technologyTemplateService;
    @ApiOperation(value = "新增工序模版")
    @PostMapping("/addTech")
    public Result addTech(@RequestBody TechnologyTemplateDto technologyTemplateDto){
        technologyTemplateService.addTech(technologyTemplateDto);
        return Result.success("新增成功!");
    }
    @ApiOperation(value = "查询所有类型")
    @GetMapping("/seleType")
    public Result seleType(){
        return Result.success(technologyTemplateService.seleType());
    }
    @ApiOperation(value = "查询工序模版列表(二级树)")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "element", value = "元件", dataTypeClass = String.class),
            @ApiImplicitParam(name = "father", value = "工序(父类)", dataTypeClass = String.class),
            @ApiImplicitParam(name = "type", value = "类型", dataTypeClass = Integer.class,required = true)
    })
    @GetMapping("/selTech")
    public Result selTech(String element,String father,Integer type){
        List<TechnologyTemplateVo1> map = technologyTemplateService.selTech(element, father, type);
        return Result.success(map);
    }
    @ApiOperation(value = "查询工序模版详情")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "id", value = "工序id", dataTypeClass = Integer.class,required = true)
    })
    @GetMapping("/selTechById")
    public Result selTechById(Integer id){
        return Result.success(technologyTemplateService.selTechById(id));
    }
    @ApiOperation(value = "编辑")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "id", value = "工序id", dataTypeClass = Integer.class,required = true)
    })
    @PostMapping("/updaTechById")
    public Result updaTechById(Integer id,@RequestBody TechnologyTemplateDto technologyTemplateDto){
        technologyTemplateService.updaTechById(id,technologyTemplateDto);
        return Result.success("修改成功!");
    }
    @ApiOperation(value = "根据销售单id删除")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "id", value = "工序id", dataTypeClass = Integer.class, required = true)
    })
    @PostMapping("/delTech")
    public Result delTech(Integer id) {
        technologyTemplateService.delTech(id);
        return Result.success("删除成功!");
    }
    @ApiOperation(value = "批量删除")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "ids", value = "销售单id", dataTypeClass = Integer.class, dataType = "List", required = true)
    })
    @PostMapping("/delAllTech")
    public Result delAllTech(@RequestParam("ids") List<Integer> ids) {
        technologyTemplateService.delAllTech(ids);
        return Result.success("批量删除成功!");
    }
}
standard-server/src/main/java/com/yuanchu/mom/mapper/TechnologyTemplateMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.yuanchu.mom.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.TechnologyTemplate;
import com.yuanchu.mom.pojo.vo.TechnologyTemplateVo1;
import org.apache.ibatis.annotations.Select;
import java.util.List;
import java.util.Map;
/**
 * å·¥è‰ºæ¨¡ç‰ˆè¡¨(TechnologyTemplate)表数据库访问层
 *
 * @author zss
 * @since 2023-08-09 11:20:20
 */
public interface TechnologyTemplateMapper extends BaseMapper<TechnologyTemplate> {
    //查询所有类型
    List<Integer> seleType();
    //查询工序模版列表
    List<TechnologyTemplateVo1> selTech(String element, String father, Integer type);
}
standard-server/src/main/java/com/yuanchu/mom/pojo/RawInsProduct.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
@@ -61,7 +62,8 @@
     **/
    private Integer testState;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    @TableLogic(value = "1", delval = "0")
    private Integer state;
    @TableField(fill = FieldFill.INSERT)
standard-server/src/main/java/com/yuanchu/mom/pojo/TechnologyTemplate.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,82 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import java.util.Date;
import java.io.Serializable;
/**
 * å·¥è‰ºæ¨¡ç‰ˆè¡¨(TechnologyTemplate)表实体类
 *
 * @author zss
 * @since 2023-08-09 11:20:20
 */
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Builder
@TableName("technology_template")
public class TechnologyTemplate implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * å·¥åºid
     **/
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * å·¥åºåç§°
     **/
    private String name;
    /**
     * å·¥åºçˆ¶çº§
     **/
    private String father;
    /**
     * 0:橡胶连接器;1:金属连接器;2:湿插拔电连接器;3:分支组件
     **/
    private Integer type;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    private Integer state;
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "创建时间", hidden = true)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(value = "更新时间", hidden = true)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
    /**
     * å…ƒä»¶
     **/
    private String element;
    /**
     * æŽ§åˆ¶è¦ç‚¹
     **/
    private String control;
    /**
     * åŸºæœ¬è¦æ±‚
     **/
    private String base;
    /**
     * å¤‡æ³¨
     **/
    private String note;
}
standard-server/src/main/java/com/yuanchu/mom/pojo/dto/TechnologyTemplateDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package com.yuanchu.mom.pojo.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.*;
import java.io.Serializable;
@Data
@JsonSerialize
//新增或者修改工序模版
public class TechnologyTemplateDto {
    /**
     * å·¥åºåç§°
     **/
    @JsonSerialize
    private String name;
    /**
     * å·¥åºçˆ¶çº§
     **/
    @JsonSerialize
    private String father;
    /**
     * 0:橡胶连接器;1:金属连接器;2:湿插拔电连接器;3:分支组件
     **/
    @JsonSerialize
    private Integer type;
    /**
     * å…ƒä»¶
     **/
    @JsonSerialize
    private String element;
    /**
     * æŽ§åˆ¶è¦ç‚¹
     **/
    @JsonSerialize
    private String control;
    /**
     * åŸºæœ¬è¦æ±‚
     **/
    @JsonSerialize
    private String base;
    /**
     * å¤‡æ³¨
     **/
    @JsonSerialize
    private String note;
}
standard-server/src/main/java/com/yuanchu/mom/pojo/vo/TechnologyTemplateVo1.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.yuanchu.mom.pojo.vo;
import com.yuanchu.mom.pojo.dto.ProductDto2;
import lombok.Data;
import java.util.List;
@Data
public class TechnologyTemplateVo1 {
    /**
     * é¡¹ç›®åç§°
     */
    private String father;
    List<TechnologyTemplateVo2> children;
}
standard-server/src/main/java/com/yuanchu/mom/pojo/vo/TechnologyTemplateVo2.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
package com.yuanchu.mom.pojo.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Data;
@Data
public class TechnologyTemplateVo2 {
    @JsonSerialize
    private Integer id;
    //工序名称
    @JsonSerialize
    private String name;
    //元件
    @JsonSerialize
    private String element;
    //基本要求
    @JsonSerialize
    private String base;
    //控制要点
    @JsonSerialize
    private String control;
    //备注
    @JsonSerialize
    private String note;
}
standard-server/src/main/java/com/yuanchu/mom/service/TechnologyTemplateService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
package com.yuanchu.mom.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.mom.pojo.TechnologyTemplate;
import com.yuanchu.mom.pojo.dto.TechnologyTemplateDto;
import com.yuanchu.mom.pojo.vo.TechnologyTemplateVo1;
import java.util.List;
import java.util.Map;
/**
 * å·¥è‰ºæ¨¡ç‰ˆè¡¨(TechnologyTemplate)表服务接口
 *
 * @author zss
 * @since 2023-08-09 11:20:20
 */
public interface TechnologyTemplateService extends IService<TechnologyTemplate> {
    /**
     * æ–°å¢žå·¥åºæ¨¡ç‰ˆ
     * @param technologyTemplateDto
     */
    void addTech(TechnologyTemplateDto technologyTemplateDto);
    /**
     * æŸ¥è¯¢æ‰€æœ‰ç±»åž‹
     * @return
     */
    List<Integer> seleType();
    /**
     * æŸ¥è¯¢å·¥åºæ¨¡ç‰ˆåˆ—表
     * @param page
     * @param element
     * @param father
     * @param type
     * @return
     */
    List<TechnologyTemplateVo1> selTech(String element, String father, Integer type);
    /**
     * æ ¹æ®id查询详情
     * @param id
     * @return
     */
    TechnologyTemplateDto selTechById(Integer id);
    /**
     * æ ¹æ®id修改
     * @param id
     * @param technologyTemplateDto
     */
    void updaTechById(Integer id, TechnologyTemplateDto technologyTemplateDto);
    /**
     * æ ¹æ®id删除
     * @param id
     */
    void delTech(Integer id);
    /**
     * æ‰¹é‡åˆ é™¤
     * @param ids
     */
    void delAllTech(List<Integer> ids);
}
standard-server/src/main/java/com/yuanchu/mom/service/impl/TechnologyTemplateServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,87 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.mapper.TechnologyTemplateMapper;
import com.yuanchu.mom.pojo.TechnologyTemplate;
import com.yuanchu.mom.pojo.dto.TechnologyTemplateDto;
import com.yuanchu.mom.pojo.vo.TechnologyTemplateVo1;
import com.yuanchu.mom.service.TechnologyTemplateService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
 * å·¥è‰ºæ¨¡ç‰ˆè¡¨(TechnologyTemplate)表服务实现类
 *
 * @author zss
 * @since 2023-08-09 11:20:20
 */
@Service
public class TechnologyTemplateServiceImpl extends ServiceImpl<TechnologyTemplateMapper, TechnologyTemplate> implements TechnologyTemplateService {
    @Resource
    TechnologyTemplateMapper technologyTemplateMapper;
    //新增工序模版
    @Override
    public void addTech(TechnologyTemplateDto technologyTemplateDto) {
        TechnologyTemplate technologyTemplate = new TechnologyTemplate();
        BeanUtils.copyProperties(technologyTemplateDto,technologyTemplate);
        technologyTemplateMapper.insert(technologyTemplate);
    }
    //查询所有类型
    @Override
    public List<Integer> seleType() {
        return technologyTemplateMapper.seleType();
    }
    //查询工序模版列表
    @Override
    public List<TechnologyTemplateVo1> selTech( String element, String father, Integer type) {
        return technologyTemplateMapper.selTech(element,father,type);
    }
    //根据id查看工序详情
    @Override
    public TechnologyTemplateDto selTechById(Integer id) {
        TechnologyTemplate technologyTemplate = technologyTemplateMapper.selectById(id);
        TechnologyTemplateDto technologyTemplateDto = new TechnologyTemplateDto();
        BeanUtils.copyProperties(technologyTemplate,technologyTemplateDto);
        return technologyTemplateDto;
    }
    //根据id修改
    @Override
    public void updaTechById(Integer id, TechnologyTemplateDto technologyTemplateDto) {
        TechnologyTemplate technologyTemplate = technologyTemplateMapper.selectById(id);
        BeanUtils.copyProperties(technologyTemplateDto,technologyTemplate);
        technologyTemplateMapper.updateById(technologyTemplate);
    }
    //根据id删除
    @Override
    public void delTech(Integer id) {
        TechnologyTemplate technologyTemplate = technologyTemplateMapper.selectById(id);
        technologyTemplate.setState(0);
        technologyTemplateMapper.updateById(technologyTemplate);
    }
    //批量删除
    @Override
    public void delAllTech(List<Integer> ids) {
        List<TechnologyTemplate> technologyTemplates = technologyTemplateMapper.selectBatchIds(ids);
        for (TechnologyTemplate technologyTemplate : technologyTemplates) {
            technologyTemplate.setState(0);
            technologyTemplateMapper.updateById(technologyTemplate);
        }
    }
}
standard-server/src/main/resources/mapper/OrdersMapper.xml
@@ -2,7 +2,8 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yuanchu.mom.mapper.OrdersMapper">
    <select id="selectAllOrder" resultType="java.util.Map">
        select order_code,
        select o.id,
        order_code,
        department,
        province,
        salesman,
@@ -17,20 +18,20 @@
        o.state
        from mom_ocean.orders o,mom_ocean.material m
        <where>
            <if test="orderCode != null">
                and order_code = #{orderCode}
            <if test="orderCode != null and orderCode!=''">
                and order_code LIKE CONCAT('%',#{orderCode},'%')
            </if>
            <if test="time != null">
            <if test="time != null and time!=''">
                and o.create_time = #{time}
            </if>
            <if test="name != null">
                and m.name = #{name}
            <if test="name != null and name!=''">
                and m.name LIKE CONCAT('%',#{name},'%')
            </if>
            <if test="state != null">
            <if test="state != null and state!=''">
                and o.state = #{state}
            </if>
            and o.code=m.code
        </where>
        order by o.create_time desc
        order by o.id desc
    </select>
</mapper>
standard-server/src/main/resources/mapper/TechnologyTemplateMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yuanchu.mom.mapper.TechnologyTemplateMapper">
    <select id="seleType" resultType="java.lang.Integer">
        select distinct type
        from mom_ocean.technology_template
        where state = 1
    </select>
    <resultMap id="selTech" type="com.yuanchu.mom.pojo.vo.TechnologyTemplateVo1">
        <id property="father" column="father" jdbcType="VARCHAR"/>
        <collection property="children" resultMap="TechnologyTemplateVo2ListMap"/>
    </resultMap>
    <resultMap id="TechnologyTemplateVo2ListMap" type="com.yuanchu.mom.pojo.vo.TechnologyTemplateVo2">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="name" column="name" jdbcType="VARCHAR"/>
        <result property="element" column="element" jdbcType="VARCHAR"/>
        <result property="base" column="base" jdbcType="VARCHAR"/>
        <result property="control" column="control" jdbcType="VARCHAR"/>
        <result property="note" column="note" jdbcType="VARCHAR"/>
    </resultMap>
    <select id="selTech" resultMap="selTech">
        select id,
        father,
        name,
        element,
        base,
        control,
        note
        from mom_ocean.technology_template t
        <where>
            state=1
            <if test="type!=null and type!=''">
                and type=#{type}
            </if>
            <if test="element!=null and element!=''">
                and element like concat('%',#{element},'%')
            </if>
            <if test="father!=null and father!=''">
                and father like concat('%',#{father},'%')
            </if>
        </where>
    </select>
</mapper>
system-run/src/main/java/com/yuanchu/mom/SystemRunApplication.java
@@ -2,6 +2,7 @@
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
system-run/src/main/resources/application-dev.yml
@@ -18,7 +18,9 @@
# ç…§ç‰‡å­˜å‚¨è·¯å¾„+++++++++++++++++++++++++++运维需要配置+++++++++++++++++++++++++++
file:
  path: E:/webapp/images
  path: D:/webapp/images
  # ä¸Šä¼ æ–‡ä»¶å…è®¸çš„æ‰©å±•名
  allowed: png,jpg,jpeg,gif
mybatis-plus:
  type-aliases-package: com.yuanchu.mom.pojo
@@ -57,7 +59,7 @@
    # redis数据库索引(默认为0),我们使用索引为3的数据库,避免和其他数据库冲突
    database: 0
    # redis服务器地址(默认为localhost)
    host: localhost
    host: 192.168.110.209
    # redis端口(默认为6379)
    port: 6379
    # redis访问密码(默认为空)
system-run/src/main/resources/application.yml
@@ -3,6 +3,10 @@
spring:
  profiles:
    active: dev
  servlet:
    multipart:
      max-file-size: 20MB # å•个文件大小
      max-request-size: 1024MB # ä¸€æ¬¡è¯·æ±‚文件总大小
mybatis-plus:
  type-aliases-package: com.yuanchu.mom.pojo
user-server/src/main/java/com/yuanchu/mom/controller/UserController.java
@@ -41,6 +41,7 @@
        return Result.success("登录成功", map);
    }
    @ApiOperation(value = "token刷新")
    @PostMapping("/refresh")
    public Result refresh(String reToken) throws Exception {
        Map<String, String> map = new Jwt().readJWT(reToken);