diff --git a/src/main/java/com/bonus/gzgqj/business/plan/entity/FileUploadVo.java b/src/main/java/com/bonus/gzgqj/business/plan/entity/FileUploadVo.java new file mode 100644 index 0000000..1337b30 --- /dev/null +++ b/src/main/java/com/bonus/gzgqj/business/plan/entity/FileUploadVo.java @@ -0,0 +1,45 @@ +package com.bonus.gzgqj.business.plan.entity; + +import lombok.Data; + +@Data +public class FileUploadVo { + /** + * id + */ + private String id; + /** + * 文件名称 + */ + private String fileName; + /** + * 文件路径 + */ + private String fileUrl; + /** + * 业务id + */ + private String ownId; + + private String createTime; + /** + * 创建人 + */ + private String creator; + /** + * 文件类型 + */ + private String fileType; + + /** + * 业务表名称 + */ + private String modelTable; + + /** + * 业务表名称 + */ + private String suffix; + + +} diff --git a/src/main/java/com/bonus/gzgqj/business/plan/mapper/FileUploadMapper.java b/src/main/java/com/bonus/gzgqj/business/plan/mapper/FileUploadMapper.java new file mode 100644 index 0000000..7e81280 --- /dev/null +++ b/src/main/java/com/bonus/gzgqj/business/plan/mapper/FileUploadMapper.java @@ -0,0 +1,13 @@ +package com.bonus.gzgqj.business.plan.mapper; + +import com.bonus.gzgqj.business.plan.entity.FileUploadVo; +import org.springframework.stereotype.Repository; + +@Repository +public interface FileUploadMapper { + /** + * 文件上传 + * @param vo + */ + void insertFileUpload(FileUploadVo vo); +} diff --git a/src/main/java/com/bonus/gzgqj/business/plan/service/PlanOutServiceImpl.java b/src/main/java/com/bonus/gzgqj/business/plan/service/PlanOutServiceImpl.java index e009259..fa7f558 100644 --- a/src/main/java/com/bonus/gzgqj/business/plan/service/PlanOutServiceImpl.java +++ b/src/main/java/com/bonus/gzgqj/business/plan/service/PlanOutServiceImpl.java @@ -5,10 +5,10 @@ import cn.hutool.core.collection.ListUtil; import com.alibaba.fastjson.JSON; import com.bonus.gzgqj.business.plan.entity.*; import com.bonus.gzgqj.business.plan.mapper.PlanOutMapper; -import com.bonus.gzgqj.manager.common.util.R; -import com.bonus.gzgqj.manager.common.util.SecurityUtils; -import com.bonus.gzgqj.manager.common.util.StringHelper; -import com.bonus.gzgqj.manager.common.util.StringUtils; +import com.bonus.gzgqj.business.utils.FileUploadService; +import com.bonus.gzgqj.business.utils.IDUtils; +import com.bonus.gzgqj.business.utils.SystemUtils; +import com.bonus.gzgqj.manager.common.util.*; import com.bonus.gzgqj.manager.webResult.ServerResponse; import com.github.pagehelper.PageInfo; import lombok.Data; @@ -16,21 +16,28 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.ObjectUtils; import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.PUBLIC_MEMBER; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; + import java.util.ArrayList; import java.util.List; + + @Service @Slf4j public class PlanOutServiceImpl implements PlanOutService{ @Autowired private PlanOutMapper mapper; + + @Autowired + private FileUploadService uploadService; /** * 查询工程需要的系那个 * @param data @@ -117,100 +124,166 @@ public class PlanOutServiceImpl implements PlanOutService{ //出库记录单存储 vo.setCreater(userId+""); int num=mapper.insertProOutInfo(vo); + //存储文件 + List fileList=uploadService.uploadImage(files,vo.getId(),"t_plan_out"); + if(StringUtils.isEmpty(fileList) || fileList.size()!=files.length){ + return ServerResponse.createErroe("发货失败"); + } if(num>0){ //计算 本次全部发货数量及整改数量 最后同步到 工程 -计划-发货统计表中 int allFhNum=0; int allTzNum=0; - for (ProOutDetail details:list){ - allFhNum=allFhNum+details.getFhNum(); - allTzNum=allTzNum+details.getTzNum(); - //获取 计划数据 - ProNeedInfo data=mapper.getProNeedInfo(details); - if(data==null){ - mapper.deleteProOut(vo); - return ServerResponse.createErroe("未找到发货内容,发货失败"); - }else{ - ProNeedInfo insertObj=new ProNeedInfo(); - BeanUtils.copyProperties(insertObj,data); - insertObj.setOutId(vo.getId()); - insertObj.setDataType("1"); - insertObj.setFhNum(details.getFhNum()); - insertObj.setTzNum(details.getTzNum()); - insertObj.setRemarks(details.getRemarks()); - int num2=mapper.insertProNeedDetails(insertObj); - if(num2>=0){ - //更新 工程-计划-发货 清单表 - int fhNum=data.getFhNum(); - int tzNum=data.getFhNum(); - data.setRemarks(details.getRemarks()); - int fhNum2=details.getFhNum(); - int tzNum2=details.getFhNum(); - data.setFhNum(fhNum+fhNum2); - data.setTzNum(tzNum+tzNum2); - mapper.updateNeedInfo(data); - }else { - return ServerResponse.createErroe("发货失败"); - } - } - } - //是否有 新增 - if(StringUtils.isNotEmpty(addList)){ - //全部新增发货清单 - for (ProAddInfoDetails details:addList){ - allFhNum=allFhNum+details.getFhNum(); - ProNeedInfo insertObj=new ProNeedInfo(); - insertObj.setOutId(vo.getId()); - insertObj.setDataType("1"); - insertObj.setFhNum(details.getFhNum()); - insertObj.setTzNum(0); - insertObj.setType(details.getType()); - insertObj.setName(details.getName()); - insertObj.setModule(details.getModule()); - insertObj.setModuleId(details.getModuleId()); - insertObj.setUnit(details.getUnit()); - insertObj.setRemarks(details.getRemark()); - insertObj.setDataType("2"); - insertObj.setProId(vo.getProId()); - //添加 记录清单 - int num2=mapper.insertProNeedDetails(insertObj); - if(num2>=0){ - //新增 工程-计划-发货 清单表 - mapper.addNeedInfo(insertObj); - }else { - return ServerResponse.createErroe("发货失败"); - } - } - } - //更新工程 总数据信息 - ProPlanInfoVo data= mapper.getProPlanInfo(vo); - int recordNum=data.getRecordNum(); - int outNum= data.getOutNum(); - int needNum= data.getNeedNum(); - recordNum=recordNum+1; - outNum=outNum+allFhNum; - data.setRecordNum(recordNum); - //发货数量 - data.setOutNum(outNum); - //调整数量 - data.setTzNum(allTzNum); - //更新 发货状态 - if(needNum>outNum+allTzNum){ - data.setStatus(1); - }else { - data.setStatus(2); + //处理 发货单 + boolean a= planOutInfo(list,vo,allFhNum,allTzNum); + if(!a){ + return ServerResponse.createErroe("发货失败"); } - data.setLastDay(vo.getCreateDay()); - //更新 工程-计划 -统计表 - mapper.updatePriPlanInfo(data); - + //处理新增发货单 + boolean b=addOutPlanInfo(addList,vo,allFhNum); + if(!b){ + return ServerResponse.createErroe("发货失败"); + } + //处理 发货后 统计及 详情数据 + boolean c= updateProPlan(vo,allFhNum,allTzNum); + if(!c){ + return ServerResponse.createErroe("发货失败"); + } + return ServerResponse.createBySuccessMsg("发货成功"); }else { return ServerResponse.createErroe("发货失败"); } - - } catch (Exception e) { log.error(e.toString(),e); } return ServerResponse.createSuccess(); } + + public boolean planOutInfo(List list,ProOutInfoVo vo,int allFhNum, int allTzNum){ + try { + for (ProOutDetail details:list){ + allFhNum=allFhNum+details.getFhNum(); + allTzNum=allTzNum+details.getTzNum(); + //获取 计划数据 + ProNeedInfo data=mapper.getProNeedInfo(details); + if(data==null){ + mapper.deleteProOut(vo); + return false; + }else{ + ProNeedInfo insertObj=new ProNeedInfo(); + BeanUtils.copyProperties(insertObj,data); + insertObj.setOutId(vo.getId()); + insertObj.setDataType("1"); + insertObj.setFhNum(details.getFhNum()); + insertObj.setTzNum(details.getTzNum()); + insertObj.setRemarks(details.getRemarks()); + int num2=mapper.insertProNeedDetails(insertObj); + if(num2>=0){ + //更新 工程-计划-发货 清单表 + int fhNum=data.getFhNum(); + int tzNum=data.getFhNum(); + data.setRemarks(details.getRemarks()); + int fhNum2=details.getFhNum(); + int tzNum2=details.getFhNum(); + data.setFhNum(fhNum+fhNum2); + data.setTzNum(tzNum+tzNum2); + mapper.updateNeedInfo(data); + return true; + }else { + return false; + } + } + } + }catch (Exception e){ + log.error(e.toString(),e); + } + return true; + } + + + /** + * 更新工程 -统计数据 + * @param allTzNum + * @param vo + * @param allFhNum + * @return + */ + public Boolean updateProPlan( ProOutInfoVo vo,int allFhNum, int allTzNum){ + try { + //更新工程 总数据信息 + ProPlanInfoVo data= mapper.getProPlanInfo(vo); + int recordNum=data.getRecordNum(); + int outNum= data.getOutNum(); + int needNum= data.getNeedNum(); + recordNum=recordNum+1; + outNum=outNum+allFhNum; + data.setRecordNum(recordNum); + //发货数量 + data.setOutNum(outNum); + //调整数量 + data.setTzNum(allTzNum); + //更新 发货状态 + if(needNum>outNum+allTzNum){ + data.setStatus(1); + }else { + data.setStatus(2); + } + data.setLastDay(vo.getCreateDay()); + //更新 工程-计划 -统计表 + mapper.updatePriPlanInfo(data); + return true; + }catch (Exception e){ + log.error(e.toString(),e); + } + return false; + } + /** + * 处理 新增 需求 及发货单 + * 传入 + * 新增集合、发货单、发货数量 + */ + public Boolean addOutPlanInfo(List addList, ProOutInfoVo vo,int allFhNum){ + try { + //是否有 新增 + if(StringUtils.isNotEmpty(addList)){ + //全部新增发货清单 + for (ProAddInfoDetails details:addList){ + allFhNum=allFhNum+details.getFhNum(); + ProNeedInfo insertObj=new ProNeedInfo(); + insertObj.setOutId(vo.getId()); + insertObj.setDataType("1"); + insertObj.setFhNum(details.getFhNum()); + insertObj.setTzNum(0); + insertObj.setType(details.getType()); + insertObj.setName(details.getName()); + insertObj.setModule(details.getModule()); + insertObj.setModuleId(details.getModuleId()); + insertObj.setUnit(details.getUnit()); + insertObj.setRemarks(details.getRemark()); + insertObj.setDataType("2"); + insertObj.setProId(vo.getProId()); + //添加 记录清单 + int num2=mapper.insertProNeedDetails(insertObj); + if(num2>=0){ + //新增 工程-计划-发货 清单表 + mapper.addNeedInfo(insertObj); + return true; + }else { + return false; + } + } + } + }catch (Exception e){ + log.error(e.toString(),e); + } + return false; + } + + + + + public static void main(String[] args) { + String suffx= IDUtils.getSuffix("/C/SSSK4555.PNG"); + System.err.println(suffx); + } + } diff --git a/src/main/java/com/bonus/gzgqj/business/utils/FileUploadService.java b/src/main/java/com/bonus/gzgqj/business/utils/FileUploadService.java new file mode 100644 index 0000000..7e44167 --- /dev/null +++ b/src/main/java/com/bonus/gzgqj/business/utils/FileUploadService.java @@ -0,0 +1,74 @@ +package com.bonus.gzgqj.business.utils; + +import com.bonus.gzgqj.business.plan.entity.FileUploadVo; +import com.bonus.gzgqj.business.plan.mapper.FileUploadMapper; +import com.bonus.gzgqj.manager.common.util.DateTimeHelper; +import com.bonus.gzgqj.manager.common.util.SecurityUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import static com.bonus.gzgqj.business.utils.IDUtils.getSuffix; +import static com.bonus.gzgqj.business.utils.IDUtils.isImageFileExtension; + +/** + * 文件上传业务 + */ +@Service +@Slf4j +public class FileUploadService { + + + @Autowired + private FileUploadMapper mapper; + + + + /** + * 上传文件 + */ + public List uploadImage(MultipartFile[] files , String outId, String table){ + List list=new ArrayList<>(); + try { + for (MultipartFile file : files) { + String fileName = file.getOriginalFilename(); + String suffix=IDUtils.getSuffix(fileName); + String newPath= SystemUtils.getUploadPath()+ DateTimeHelper.getNowYMD()+"/"+ IDUtils.createID()+suffix; + File uploadFile = new File(newPath); + //生成文件夹 + if (!uploadFile.getParentFile().exists()) { + uploadFile.getParentFile().mkdirs(); + } + String fileType=isImageFileExtension(fileName); + // 存入临时文件 + file.transferTo(uploadFile); + FileUploadVo vo=new FileUploadVo(); + vo.setFileName(fileName); + vo.setFileUrl(newPath); + vo.setOwnId(outId); + vo.setModelTable(table); + vo.setSuffix(suffix); + vo.setFileType(fileType); + String userId= SecurityUtils.getUserId()+""; + vo.setCreator(userId); + list.add(vo); + mapper.insertFileUpload(vo); + } + + + }catch (Exception e){ + log.error(e.toString(),e); + } + return list; + } + + + + + +} diff --git a/src/main/java/com/bonus/gzgqj/business/utils/IDUtils.java b/src/main/java/com/bonus/gzgqj/business/utils/IDUtils.java new file mode 100644 index 0000000..786ae8b --- /dev/null +++ b/src/main/java/com/bonus/gzgqj/business/utils/IDUtils.java @@ -0,0 +1,52 @@ +package com.bonus.gzgqj.business.utils; + +public class IDUtils { + private static byte[] lock = new byte[0]; + + // 位数,默认是8位 + private final static long w = 100000000; + + /** + * 传入文件 名称 + * @param fileName + * @return + */ + public static String getSuffix(String fileName){ + return fileName.substring(fileName.lastIndexOf('.')); + } + + public static void main(String[] args) { + System.err.println(createID()); + } + + /** + * 获取id + * @return + */ + public static String createID() { + long r = 0; + synchronized (lock) { + r = (long) ((Math.random() + 1) * w); + } + + return System.currentTimeMillis() + String.valueOf(r).substring(1); + } + + /** + * 是否是文件/图片 + * @param name + * @return + */ + public static String isImageFileExtension(String name) { + name=name.toLowerCase(); + String[] imageFormats = {"jpg", "jpeg", "png", "gif", "bmp", "tiff"}; + for (String format : imageFormats) { + if (format.equals(name)) { // 判断扩展名 + return "1"; + } + } + return "2"; // 不是支持的图片格式 + } + + +} diff --git a/src/main/java/com/bonus/gzgqj/business/utils/SystemUtils.java b/src/main/java/com/bonus/gzgqj/business/utils/SystemUtils.java new file mode 100644 index 0000000..c94b318 --- /dev/null +++ b/src/main/java/com/bonus/gzgqj/business/utils/SystemUtils.java @@ -0,0 +1,74 @@ +package com.bonus.gzgqj.business.utils; + + +import lombok.extern.slf4j.Slf4j; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class SystemUtils { + + public static String windowsPath; + + + public static String linuxPath; + + /** + * 自动注入 + * + * @param windowsPath + */ + @Value("${file.upload_path.windows}") + public void setWindowsPath(String windowsPath) { + SystemUtils.windowsPath = windowsPath; + } + + /** + * 自动注入 + * + * @param linuxPath + */ + @Value("${file.upload_path.linux}") + public void setLinuxPath(String linuxPath) { + SystemUtils.linuxPath = linuxPath; + } + + /** + * 返回系统 + * + * @return + */ + public static String getSystem() { + String os = System.getProperty("os.name"); + //Windows操作系统 + if (os != null && os.toLowerCase().startsWith("windows")) { + return "windows"; + } else if (os != null && os.toLowerCase().startsWith("linux")) {//Linux操作系统 + return "linux"; + } else { //其它操作系统 + return "other"; + } + } + + /** + * 获取文件上传路径 + * + * @return + */ + public static String getUploadPath() { + String os = getSystem(); + System.err.println("当前系统是=" + os); + if ("windows".equals(os)) { + return windowsPath; + } else if ("linux".equals(os)) { + return linuxPath; + } else { + return windowsPath; + } + } + + + +} diff --git a/src/main/java/com/bonus/gzgqj/manager/common/config/WebMvcConfig.java b/src/main/java/com/bonus/gzgqj/manager/common/config/WebMvcConfig.java new file mode 100644 index 0000000..40dd5a6 --- /dev/null +++ b/src/main/java/com/bonus/gzgqj/manager/common/config/WebMvcConfig.java @@ -0,0 +1,47 @@ +package com.bonus.gzgqj.manager.common.config; + + +import com.bonus.gzgqj.business.utils.SystemUtils; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +@Configuration +public class WebMvcConfig implements WebMvcConfigurer { + /** + * 跨域支持 + * @return + * @return + */ + @Bean + public WebMvcConfigurer corsConfigurer() { + return new WebMvcConfigurer() { + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**").allowedMethods("*"); +// registry.addMapping("/**") +// .allowedOrigins("http://example.com") +// .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") +// .allowedHeaders("*") +// .allowCredentials(true); + } + }; + } + + + + /** + * 外部文件访问 + */ + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + String filePath= SystemUtils.getUploadPath();//获取文件上传路径 + /** 本地文件上传路径 */ + registry.addResourceHandler("/statics/**") + .addResourceLocations("file:" + filePath); + registry.addResourceHandler("/files/**") + .addResourceLocations("file:"+filePath); + } + +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index df80605..5af0998 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -38,6 +38,12 @@ zhly: aq: enable: false +file: + upload_path: + windows: D://files//zg_gqj// + linux: /home/zg_gqj/files// + + jwt: secret: your_secret_key diff --git a/src/main/resources/mappers/plan/FileUploadMapper.xml b/src/main/resources/mappers/plan/FileUploadMapper.xml new file mode 100644 index 0000000..6301c6c --- /dev/null +++ b/src/main/resources/mappers/plan/FileUploadMapper.xml @@ -0,0 +1,20 @@ + + + + + + + insert into bm_file_upload( + file_name, + file_url, + create_time, + creator, + model_table, + own_id, + suffix, + file_type + )values(#{fileName},#{fileUrl},now(),#{creator},#{modelTable},#{ownId},#{suffix},#{fileType}) + + + \ No newline at end of file diff --git a/src/main/resources/mappers/plan/PlanOutMapper.xml b/src/main/resources/mappers/plan/PlanOutMapper.xml index 037c8d8..c1d14ad 100644 --- a/src/main/resources/mappers/plan/PlanOutMapper.xml +++ b/src/main/resources/mappers/plan/PlanOutMapper.xml @@ -50,7 +50,7 @@