From ae6f643fd140eb4bf1d06342f5d07376d212c06d Mon Sep 17 00:00:00 2001 From: sunjianxi <839419401@qq.com> Date: Thu, 30 Nov 2023 15:50:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=98=89=E7=A6=BE=E4=BA=8C=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/springblade/auth/AuthApplication.java | 5 + .../common/launch/LauncherServiceImpl.java | 4 +- .../gateway/GateWayApplication.java | 5 + .../resource/ResourceApplication.java | 5 + .../springblade/lims/goods/entity/Goods.java | 14 +- .../springblade/system/enums/DictBizEnum.java | 12 +- .../lims/Excel/InstrumentExcel.java | 64 ++++++ .../springblade/lims/entry/PurchaseApply.java | 185 ++++++++++++++++++ .../springblade/lims/entry/PurchaseCheck.java | 108 ++++++++++ .../springblade/lims/entry/PurchaseOrder.java | 81 ++++++++ .../system/user/feign/IUserClient.java | 10 + .../springblade/lims/CapitalApplication.java | 5 + .../goods/controller/ApplyController.java | 8 +- .../goods/controller/GoodsController.java | 54 ++++- .../lims/goods/service/IGoodsService.java | 8 +- .../goods/service/impl/GoodsServiceImpl.java | 67 +++++-- .../org/springblade/file/FileApplication.java | 7 +- .../org/springblade/lims/LimsApplication.java | 5 + .../lims/controller/InstrumentController.java | 156 ++++++++++++++- .../controller/PurchaseApplyController.java | 62 ++++++ .../controller/PurchaseCheckController.java | 106 ++++++++++ .../controller/PurchaseOrderController.java | 67 +++++++ .../lims/mapper/PurchaseApplyMapper.java | 15 ++ .../lims/mapper/PurchaseCheckMapper.java | 15 ++ .../lims/mapper/PurchaseOrderMapper.java | 15 ++ .../lims/service/IPurchaseApplyService.java | 20 ++ .../lims/service/IPurchaseCheckService.java | 27 +++ .../lims/service/IPurchaseOrderService.java | 22 +++ .../impl/PurchaseApplyServiceImpl.java | 121 ++++++++++++ .../impl/PurchaseCheckServiceImpl.java | 153 +++++++++++++++ .../impl/PurchaseOrderServiceImpl.java | 78 ++++++++ .../springblade/system/SystemApplication.java | 5 + .../system/user/UserApplication.java | 5 + .../system/user/feign/UserClient.java | 8 +- 34 files changed, 1479 insertions(+), 43 deletions(-) create mode 100644 lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/Excel/InstrumentExcel.java create mode 100644 lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/entry/PurchaseApply.java create mode 100644 lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/entry/PurchaseCheck.java create mode 100644 lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/entry/PurchaseOrder.java create mode 100644 lab-service/lab-lims/src/main/java/org/springblade/lims/controller/PurchaseApplyController.java create mode 100644 lab-service/lab-lims/src/main/java/org/springblade/lims/controller/PurchaseCheckController.java create mode 100644 lab-service/lab-lims/src/main/java/org/springblade/lims/controller/PurchaseOrderController.java create mode 100644 lab-service/lab-lims/src/main/java/org/springblade/lims/mapper/PurchaseApplyMapper.java create mode 100644 lab-service/lab-lims/src/main/java/org/springblade/lims/mapper/PurchaseCheckMapper.java create mode 100644 lab-service/lab-lims/src/main/java/org/springblade/lims/mapper/PurchaseOrderMapper.java create mode 100644 lab-service/lab-lims/src/main/java/org/springblade/lims/service/IPurchaseApplyService.java create mode 100644 lab-service/lab-lims/src/main/java/org/springblade/lims/service/IPurchaseCheckService.java create mode 100644 lab-service/lab-lims/src/main/java/org/springblade/lims/service/IPurchaseOrderService.java create mode 100644 lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/PurchaseApplyServiceImpl.java create mode 100644 lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/PurchaseCheckServiceImpl.java create mode 100644 lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/PurchaseOrderServiceImpl.java diff --git a/lab-auth/src/main/java/org/springblade/auth/AuthApplication.java b/lab-auth/src/main/java/org/springblade/auth/AuthApplication.java index 395310a..ce2a75b 100644 --- a/lab-auth/src/main/java/org/springblade/auth/AuthApplication.java +++ b/lab-auth/src/main/java/org/springblade/auth/AuthApplication.java @@ -18,6 +18,11 @@ public class AuthApplication { public static void main(String[] args) { BladeApplication.run(AppConstant.APPLICATION_AUTH_NAME, AuthApplication.class, args); + System.out.println("=============================="); + System.out.println("=============================="); + System.out.println("===========Auth启动成功!======="); + System.out.println("=============================="); + System.out.println("=============================="); } } diff --git a/lab-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java b/lab-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java index 2b7a184..7a11640 100644 --- a/lab-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java +++ b/lab-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java @@ -24,8 +24,8 @@ public class LauncherServiceImpl implements LauncherService { // PropsUtil.setProperty(props, "spring.cloud.nacos.config.server-addr", LauncherConstant.nacosAddr(profile)); // PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.namespace", "44debeab-5f49-41b6-a664-2f0a33825f8f"); // PropsUtil.setProperty(props, "spring.cloud.nacos.config.namespace", "44debeab-5f49-41b6-a664-2f0a33825f8f"); - PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.namespace", "e9bcb975-a8b3-43d1-812f-8408ce571137"); - PropsUtil.setProperty(props, "spring.cloud.nacos.config.namespace", "e9bcb975-a8b3-43d1-812f-8408ce571137"); + PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.namespace", "e9bcb975-a8b3-43d1-812f-8408ce571136"); + PropsUtil.setProperty(props, "spring.cloud.nacos.config.namespace", "e9bcb975-a8b3-43d1-812f-8408ce571136"); // PropsUtil.setProperty(props, "spring.cloud.sentinel.transport.dashboard", LauncherConstant.sentinelAddr(profile)); // PropsUtil.setProperty(props, "spring.zipkin.base-url", LauncherConstant.zipkinAddr(profile)); PropsUtil.setProperty(props, "spring.datasource.dynamic.enabled", "false"); diff --git a/lab-gateway/src/main/java/org/springblade/gateway/GateWayApplication.java b/lab-gateway/src/main/java/org/springblade/gateway/GateWayApplication.java index b8052a2..aead66e 100644 --- a/lab-gateway/src/main/java/org/springblade/gateway/GateWayApplication.java +++ b/lab-gateway/src/main/java/org/springblade/gateway/GateWayApplication.java @@ -19,6 +19,11 @@ public class GateWayApplication { public static void main(String[] args) { BladeApplication.run(AppConstant.APPLICATION_GATEWAY_NAME, GateWayApplication.class, args); + System.out.println("=============================="); + System.out.println("=============================="); + System.out.println("========Gateway启动成功!======="); + System.out.println("=============================="); + System.out.println("=============================="); } } diff --git a/lab-ops/lab-resource/src/main/java/org/springblade/resource/ResourceApplication.java b/lab-ops/lab-resource/src/main/java/org/springblade/resource/ResourceApplication.java index bfa7f9c..6d1d398 100644 --- a/lab-ops/lab-resource/src/main/java/org/springblade/resource/ResourceApplication.java +++ b/lab-ops/lab-resource/src/main/java/org/springblade/resource/ResourceApplication.java @@ -17,6 +17,11 @@ public class ResourceApplication { public static void main(String[] args) { BladeApplication.run(AppConstant.APPLICATION_RESOURCE_NAME, ResourceApplication.class, args); + System.out.println("=============================="); + System.out.println("=============================="); + System.out.println("========Resource启动成功!======"); + System.out.println("=============================="); + System.out.println("=============================="); } } diff --git a/lab-service-api/lab-capital-api/src/main/java/org/springblade/lims/goods/entity/Goods.java b/lab-service-api/lab-capital-api/src/main/java/org/springblade/lims/goods/entity/Goods.java index 5bbd9a2..2b54f51 100644 --- a/lab-service-api/lab-capital-api/src/main/java/org/springblade/lims/goods/entity/Goods.java +++ b/lab-service-api/lab-capital-api/src/main/java/org/springblade/lims/goods/entity/Goods.java @@ -12,7 +12,6 @@ import lombok.EqualsAndHashCode; import org.springblade.core.mp.base.BaseEntity; import org.springblade.lims.capital.entity.ProductStoreDetial; -import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -114,4 +113,17 @@ public class Goods extends BaseEntity { // 出库数量 @TableField(exist = false) private Integer outNum; + + @ApiModelProperty(value = "附件链接") + private String attach; + + @ApiModelProperty(value = "附件名称") + private String attachName; + + + @ApiModelProperty(value = "库存上限") + private Integer warnNumUpper; + + @ApiModelProperty(value = "库存下限") + private Integer warnNumLower; } diff --git a/lab-service-api/lab-dict-api/src/main/java/org/springblade/system/enums/DictBizEnum.java b/lab-service-api/lab-dict-api/src/main/java/org/springblade/system/enums/DictBizEnum.java index 0753eb5..d9378f1 100644 --- a/lab-service-api/lab-dict-api/src/main/java/org/springblade/system/enums/DictBizEnum.java +++ b/lab-service-api/lab-dict-api/src/main/java/org/springblade/system/enums/DictBizEnum.java @@ -88,7 +88,17 @@ public enum DictBizEnum { /** * 样品处理方式 */ - SAMPLE_HANDLING("sample_handling") + SAMPLE_HANDLING("sample_handling"), + + /** + * 设备名称 + */ + INSTRUMENT("instrument"), + + /** + * 仪器设备管理状态 + */ + EQUIP_STATUS("equip_status"), ; diff --git a/lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/Excel/InstrumentExcel.java b/lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/Excel/InstrumentExcel.java new file mode 100644 index 0000000..3d5f857 --- /dev/null +++ b/lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/Excel/InstrumentExcel.java @@ -0,0 +1,64 @@ +package org.springblade.lims.Excel; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author sjx + */ +@Data +public class InstrumentExcel implements Serializable { + + private static final long serialVersionUID = 1L; + + @ExcelProperty("仪器/设备编号") + private String code; + + @ExcelProperty("仪器/设备名称") + private String name; + + @ExcelProperty("仪器/设备类型(实验设备、存贮仪器、计算仪器)") + private String type; + + @ExcelProperty("型号") + private String model; + + @ExcelProperty("出厂日期") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date productionDate; + + @ExcelProperty("启用日期") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date enableDate; + + @ExcelProperty("存放地点") + private String storagePlace; + + @ExcelProperty("保管人") + private String saveByName; + + @ExcelProperty("生产厂家及品牌") + private String manufacturerBrand; + + @ExcelProperty("购置时间") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date purchaseTime; + + @ExcelProperty("是否需要检定(是、否)") + private String isVerification; + + @ExcelProperty("报废年限") + private Integer scrapYears; + + @ExcelProperty("状态(正常、维修中、报废申请中、已报废)") + private String instrumentStatus; + +} \ No newline at end of file diff --git a/lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/entry/PurchaseApply.java b/lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/entry/PurchaseApply.java new file mode 100644 index 0000000..1b75a0c --- /dev/null +++ b/lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/entry/PurchaseApply.java @@ -0,0 +1,185 @@ +package org.springblade.lims.entry; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springblade.core.mp.base.BaseEntity; +import org.springframework.data.annotation.Id; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * @author sjx + * @date 2023年11月27日15:34:17 + */ +@Data +@TableName("t_purchase_apply") +public class PurchaseApply extends BaseEntity implements Serializable { + + /** + * 业务主键 + */ + @Id + private Long id; + + /** + * 业务编号 + */ + private String businessCode; + + /** + * 流程 + */ + private String procId; + + /** + * 业务名称 + */ + private String name; + + + /** + * 申请状态 + */ + private String applyStatus; + + /** + * 申请部门 + */ + private String applyOrgId; + + /** + * 采购人 + */ + private String purchaseUserId; + + /** + * 供应商 + */ + private String supplierId; + + /** + * 采购说明 + */ + private String applyContent; + + /** + * 采购日期 + */ + private String applyDate; + + /** + * 到货时间 + */ + @DateTimeFormat( + pattern = "yyyy-MM-dd" + ) + @JsonFormat( + pattern = "yyyy-MM-dd" + ) + private Date expectedArrivalDate; + + /** + * 验收单 + */ + private String checkId; + + /** + * 验收情况 + */ + private String assetCheck; + + /** + * 备注 + */ + private String notes; + + /** + * 附件 + */ + private String attach; + + + /** + * 制单人 + */ + private String originatorId; + + /** + * 租户 + */ + private String tenantId; + + /** + * 变更类型 + */ + private String chsType; + + /** + * 变更状态 + */ + private String chsStatus; + + /** + * 变更版本号 + */ + private String chsVersion; + + /** + * 变更ID + */ + private String changeInstanceId; + + /** + * 流程概要 + */ + private String summary; + + /** + * 最后审批人账户ID + */ + private String latestApproverId; + + /** + * 最后审批人姓名 + */ + private String latestApproverName; + + /** + * 下一节点审批人 + */ + private String nextApproverIds; + + /** + * 下一个审批节点审批人姓名,用逗号隔开 + */ + private String nextApproverNames; + + /** + * 审批意见 + */ + private String approvalOpinion; + + /** + * 采购日期开始 + */ + @TableField(exist = false) + private String applyDateBegin; + + /** + * 采购日期结束 + */ + @TableField(exist = false) + private String applyDateEnd; + + /** + * 采购清单list + */ + @TableField(exist = false) + private List orderList; + +} diff --git a/lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/entry/PurchaseCheck.java b/lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/entry/PurchaseCheck.java new file mode 100644 index 0000000..72d0476 --- /dev/null +++ b/lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/entry/PurchaseCheck.java @@ -0,0 +1,108 @@ +package org.springblade.lims.entry; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import org.springblade.core.mp.base.BaseEntity; +import org.springframework.data.annotation.Id; + +import java.io.Serializable; + +/** + * @author sjx + * @date 2023年11月27日15:34:17 + */ +@Data +@TableName("t_purchase_check") +public class PurchaseCheck extends BaseEntity implements Serializable { + + /** + * 业务主键 + */ + @Id + private Long id; + + /** + * 业务编号 + */ + private String businessCode; + + /** + * 名称 + */ + private String name; + + /** + * 采购申请 + */ + private String applyId; + + /** + * 供应商 + */ + private String supplierId; + + /** + * 验收人 + */ + private String checkUserName; + + /** + * 到货日期 + */ + private String receiveDate; + + /** + * 验收时间 + */ + private String checkDate; + + /** + * 验收信息 + */ + private String checkInformation; + + /** + * 备注 + */ + private String notes; + + /** + * 附件 + */ + private String attach; + + /** + * 附件名称 + */ + private String attachName; + + /** + * 制单人 + */ + private String originatorId; + + /** + * 到货日期开始 + */ + @TableField(exist = false) + private String receiveDateBegin; + + /** + * 到货日期结束 + */ + @TableField(exist = false) + private String receiveDateEnd; + + /** + * 验收时间开始 + */ + @TableField(exist = false) + private String checkDateBegin; + + /** + * 验收时间结束 + */ + @TableField(exist = false) + private String checkDateEnd; +} diff --git a/lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/entry/PurchaseOrder.java b/lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/entry/PurchaseOrder.java new file mode 100644 index 0000000..72c209c --- /dev/null +++ b/lab-service-api/lab-lims-api/src/main/java/org/springblade/lims/entry/PurchaseOrder.java @@ -0,0 +1,81 @@ +package org.springblade.lims.entry; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import org.springblade.core.mp.base.BaseEntity; +import org.springframework.data.annotation.Id; + +import java.io.Serializable; + +/** + * @author sjx + * @date 2023年11月27日15:34:17 + */ +@Data +@TableName("t_purchase_order") +public class PurchaseOrder extends BaseEntity implements Serializable { + + /** + * 业务主键 + */ + @Id + private Long id; + + /** + * 物品编码 + */ + private String code; + + /** + * 物品名称 + */ + private String name; + + /** + * 物品档案 + */ + private String goodsId; + + /** + * 物品类型 + */ + private String goodsType; + + /** + * 存放类型 + */ + private String storageType; + + /** + * 采购数量 + */ + private Integer purchaseNumber; + + /** + * 采购单价 + */ + private Double unitPrice; + + /** + * 备注 + */ + private String notes; + + /** + * 采购单 + */ + private String applyId; + + /** + * 验收单 + */ + private String checkId; + + + /** + * 制单人 + */ + private String originatorId; + + +} diff --git a/lab-service-api/lab-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java b/lab-service-api/lab-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java index 7d04ee7..30b3a9e 100644 --- a/lab-service-api/lab-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java +++ b/lab-service-api/lab-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java @@ -37,6 +37,7 @@ public interface IUserClient { String SELECT_USER_LIST = API_PREFIX + "/user-list"; String SELECT_ID_BY_ROLEIDS = API_PREFIX + "/select-id-by-roleids"; String USER_INFO_BY_NAME = API_PREFIX + "/user-name"; + String FIND_BY_NAME = API_PREFIX + "/find-by-name"; /** @@ -141,4 +142,13 @@ public interface IUserClient { */ @GetMapping(USER_INFO_BY_NAME) R userInfoByName(@RequestParam("tenantId")String tenantId,@RequestParam("userName") String userName); + + + /** + * 获取用户信息 + * @param userName 用户 + * @return + */ + @GetMapping(FIND_BY_NAME) + R findByName(@RequestParam("userName") String userName); } diff --git a/lab-service/lab-capital/src/main/java/org/springblade/lims/CapitalApplication.java b/lab-service/lab-capital/src/main/java/org/springblade/lims/CapitalApplication.java index 6fb383c..356d097 100644 --- a/lab-service/lab-capital/src/main/java/org/springblade/lims/CapitalApplication.java +++ b/lab-service/lab-capital/src/main/java/org/springblade/lims/CapitalApplication.java @@ -16,6 +16,11 @@ public class CapitalApplication { public static void main(String[] args) { BladeApplication.run(LauncherConstant.APPLICATION_CAPITAL_NAME, CapitalApplication.class, args); + System.out.println("=============================="); + System.out.println("=============================="); + System.out.println("========Capital启动成功!======="); + System.out.println("=============================="); + System.out.println("=============================="); } } diff --git a/lab-service/lab-capital/src/main/java/org/springblade/lims/goods/controller/ApplyController.java b/lab-service/lab-capital/src/main/java/org/springblade/lims/goods/controller/ApplyController.java index ef1bcbf..edc3d26 100644 --- a/lab-service/lab-capital/src/main/java/org/springblade/lims/goods/controller/ApplyController.java +++ b/lab-service/lab-capital/src/main/java/org/springblade/lims/goods/controller/ApplyController.java @@ -211,7 +211,7 @@ public class ApplyController extends BladeController { goodsService.updateById(goods); } // 扣批次数量 - String batchNum = applyDetail.getBatchNum(); + /*String batchNum = applyDetail.getBatchNum(); if (batchNum != null && !"".equals(batchNum)) { String[] split = batchNum.split(","); for (String s : split) { @@ -224,7 +224,7 @@ public class ApplyController extends BladeController { productStoreDetial.setNum(i); productStoreDetialService.updateById(productStoreDetial); } - } + }*/ } applyDetailService.saveBatch(detailList); } @@ -419,7 +419,7 @@ public class ApplyController extends BladeController { if (detail.getOutNum() != null && detail.getReturnNum() != null) { detail.setNeedReturnNum(detail.getOutNum() - detail.getReturnNum()); - // 批次号及其数量 + /*// 批次号及其数量 String[] split = detail.getBatchNum().split(":"); // 条件查询对应的物品详情 @@ -429,7 +429,7 @@ public class ApplyController extends BladeController { ProductStoreDetial productStoreDetial = productStoreDetialService.getOne(queryWrapper); // 过期时间 - detail.setBeyondTime(productStoreDetial.getBeyondTime()); + detail.setBeyondTime(productStoreDetial.getBeyondTime());*/ } } apply1.setDetailList(applyDetails); diff --git a/lab-service/lab-capital/src/main/java/org/springblade/lims/goods/controller/GoodsController.java b/lab-service/lab-capital/src/main/java/org/springblade/lims/goods/controller/GoodsController.java index 81d06b1..e58a885 100644 --- a/lab-service/lab-capital/src/main/java/org/springblade/lims/goods/controller/GoodsController.java +++ b/lab-service/lab-capital/src/main/java/org/springblade/lims/goods/controller/GoodsController.java @@ -11,7 +11,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.AllArgsConstructor; +import lombok.SneakyThrows; import org.apache.commons.lang.math.RandomUtils; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.springblade.core.boot.ctrl.BladeController; @@ -20,18 +22,19 @@ import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; -import org.springblade.core.tool.utils.BeanUtil; -import org.springblade.core.tool.utils.Func; -import org.springblade.core.tool.utils.StringUtil; -import org.springblade.lims.capital.entity.*; -import org.springblade.lims.capital.excel.ApplyDetailExcel; -import org.springblade.lims.capital.excel.DetailExcel; +import org.springblade.core.tool.utils.*; +import org.springblade.lims.capital.entity.GoodsCheckLog; +import org.springblade.lims.capital.entity.ProductClass; +import org.springblade.lims.capital.entity.ProductStoreDetial; import org.springblade.lims.capital.excel.GoodsExcel; import org.springblade.lims.capital.excel.InAndOutExcel; import org.springblade.lims.capital.service.IGoodsCheckLogService; import org.springblade.lims.capital.service.IProductClassService; import org.springblade.lims.capital.service.IProductStoreDetialService; -import org.springblade.lims.goods.entity.*; +import org.springblade.lims.goods.entity.ApplyDetail; +import org.springblade.lims.goods.entity.Goods; +import org.springblade.lims.goods.entity.InAndOutRecord; +import org.springblade.lims.goods.entity.Report; import org.springblade.lims.goods.service.IApplyDetailService; import org.springblade.lims.goods.service.IApplyService; import org.springblade.lims.goods.service.IGoodsService; @@ -43,9 +46,15 @@ import org.springblade.system.enums.DictBizEnum; import org.springblade.system.user.entity.User; import org.springblade.system.user.feign.IUserClient; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; import java.io.IOException; +import java.io.InputStream; +import java.net.URLEncoder; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDateTime; @@ -80,6 +89,8 @@ public class GoodsController extends BladeController { private final IApplyService applyService; + private final HttpServletResponse response; + //物品列表 分页 @GetMapping("/list") public IPage list(Goods goods, Query query) { @@ -938,4 +949,33 @@ public class GoodsController extends BladeController { return map; } + /** + * 上传文件 + */ + @PostMapping("/uploadFile") + public R> uploadFile(@RequestParam MultipartFile file) { + return R.data(goodsService.uploadFile(file)); + } + + @SneakyThrows + @GetMapping("/download/{id}") + @ApiOperationSupport(order = 0) + @ApiOperation(value = "下载文件", notes = "下载文件") + public void download(@ApiParam(value = "下载的文件id", required = true) @Valid @NotNull @PathVariable("id") Long id) { + Goods entry = goodsService.getById(id); + String fileName = entry.getAttachName(); + // 查询 + InputStream inputStream = goodsService.getInputStreamById(id); + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding(Charsets.UTF_8.name()); + if (fileName != null) { + fileName = URLEncoder.encode(fileName, Charsets.UTF_8.name()); + response.setHeader("Content-disposition", "attachment;filename=" + fileName); + } + ServletOutputStream outputStream = response.getOutputStream(); + IoUtil.copy(inputStream, outputStream); + IoUtil.closeQuietly(inputStream); + IoUtil.closeQuietly(outputStream); + } + } diff --git a/lab-service/lab-capital/src/main/java/org/springblade/lims/goods/service/IGoodsService.java b/lab-service/lab-capital/src/main/java/org/springblade/lims/goods/service/IGoodsService.java index 63634e1..1b8a382 100644 --- a/lab-service/lab-capital/src/main/java/org/springblade/lims/goods/service/IGoodsService.java +++ b/lab-service/lab-capital/src/main/java/org/springblade/lims/goods/service/IGoodsService.java @@ -2,12 +2,16 @@ package org.springblade.lims.goods.service; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; -import org.springblade.core.mp.support.Query; import org.springblade.lims.goods.entity.Goods; +import org.springframework.web.multipart.MultipartFile; -import java.util.List; +import java.io.InputStream; import java.util.Map; public interface IGoodsService extends BaseService { IPage listByPnum(Goods goods,IPage page); + + Map uploadFile(MultipartFile file); + + InputStream getInputStreamById(Long id); } diff --git a/lab-service/lab-capital/src/main/java/org/springblade/lims/goods/service/impl/GoodsServiceImpl.java b/lab-service/lab-capital/src/main/java/org/springblade/lims/goods/service/impl/GoodsServiceImpl.java index ba08fed..37cdeac 100644 --- a/lab-service/lab-capital/src/main/java/org/springblade/lims/goods/service/impl/GoodsServiceImpl.java +++ b/lab-service/lab-capital/src/main/java/org/springblade/lims/goods/service/impl/GoodsServiceImpl.java @@ -1,28 +1,25 @@ package org.springblade.lims.goods.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.StringUtils; import lombok.AllArgsConstructor; +import lombok.SneakyThrows; import org.springblade.core.mp.base.BaseServiceImpl; -import org.springblade.core.mp.support.Condition; -import org.springblade.core.mp.support.Query; -import org.springblade.lims.capital.entity.ProductStoreDetial; -import org.springblade.lims.capital.service.IGoodsCheckLogService; -import org.springblade.lims.capital.service.IProductStoreDetialService; -import org.springblade.lims.goods.entity.ApplyDetail; import org.springblade.lims.goods.entity.Goods; import org.springblade.lims.goods.mapper.GoodsMapper; -import org.springblade.lims.goods.service.IApplyDetailService; -import org.springblade.lims.goods.service.IApplyService; import org.springblade.lims.goods.service.IGoodsService; -import org.springblade.system.user.feign.IUserClient; +import org.springblade.system.feign.ISysClient; +import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; -import java.text.SimpleDateFormat; -import java.util.*; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; /** * 物品表 服务实现类 @@ -31,8 +28,50 @@ import java.util.*; @AllArgsConstructor public class GoodsServiceImpl extends BaseServiceImpl implements IGoodsService { private final GoodsMapper goodsMapper; + + private final ISysClient sysClient; @Override public IPage listByPnum(Goods goods, IPage page) { return goodsMapper.listByPnum(goods, page); } + + @Override + public Map uploadFile(MultipartFile file) { + Map map = new HashMap<>(); + String fileName = ""; + String path = ""; + String originalFilename = ""; + if (file != null) { + originalFilename = file.getOriginalFilename(); + String fileSuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); + fileName = UUID.randomUUID().toString() + fileSuffix; + path = sysClient.getParamValue("jiahe").getData() + fileName; + + FileOutputStream fout; + try { + fout = new FileOutputStream(path); + fout.write(file.getBytes()); + fout.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + map.put("filename",originalFilename); + map.put("path",path); + return map; + } + + @Override + @SneakyThrows + public InputStream getInputStreamById(Long id) { + Goods entry = this.getById(id); + InputStream inputStream; + File file = new File(entry.getAttach()); + if (file.exists()) { + inputStream = new FileInputStream(file); + } else { + inputStream = new ClassPathResource("FileNotFound.xlsx").getInputStream(); + } + return inputStream; + } } diff --git a/lab-service/lab-file/src/main/java/org/springblade/file/FileApplication.java b/lab-service/lab-file/src/main/java/org/springblade/file/FileApplication.java index 56fb679..57e5008 100644 --- a/lab-service/lab-file/src/main/java/org/springblade/file/FileApplication.java +++ b/lab-service/lab-file/src/main/java/org/springblade/file/FileApplication.java @@ -1,10 +1,8 @@ package org.springblade.file; -import org.springblade.common.constant.LauncherConstant; import org.springblade.core.cloud.feign.EnableBladeFeign; import org.springblade.core.launch.BladeApplication; -import org.springblade.core.launch.constant.AppConstant; import org.springframework.cloud.client.SpringCloudApplication; /** @@ -18,6 +16,11 @@ public class FileApplication { public static void main(String[] args) { BladeApplication.run("blade-file", FileApplication.class, args); + System.out.println("=============================="); + System.out.println("=============================="); + System.out.println("========File启动成功!=========="); + System.out.println("=============================="); + System.out.println("=============================="); } } diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/LimsApplication.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/LimsApplication.java index e7c4968..6aefed4 100644 --- a/lab-service/lab-lims/src/main/java/org/springblade/lims/LimsApplication.java +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/LimsApplication.java @@ -18,6 +18,11 @@ public class LimsApplication { public static void main(String[] args) { BladeApplication.run(LauncherConstant.APPLICATION_LIMS_NAME, LimsApplication.class, args); + System.out.println("=============================="); + System.out.println("=============================="); + System.out.println("===========Lims启动成功!======="); + System.out.println("=============================="); + System.out.println("=============================="); } diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/InstrumentController.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/InstrumentController.java index fec500b..dd00ea5 100644 --- a/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/InstrumentController.java +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/InstrumentController.java @@ -3,32 +3,39 @@ package org.springblade.lims.controller; import com.alibaba.nacos.common.utils.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; -import io.swagger.models.auth.In; import lombok.AllArgsConstructor; import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; +import org.springblade.core.tool.utils.ObjectUtil; import org.springblade.file.entity.EquipVerification; import org.springblade.file.fegin.IEquipVerificationClient; -import org.springblade.lims.ao.CommonAo; -import org.springblade.lims.entry.*; -import org.springblade.lims.service.*; +import org.springblade.lims.Excel.InstrumentExcel; +import org.springblade.lims.entry.Instrument; +import org.springblade.lims.service.IInstrumentService; +import org.springblade.system.cache.DictBizCache; +import org.springblade.system.cache.DictCache; +import org.springblade.system.enums.DictBizEnum; +import org.springblade.system.enums.DictEnum; +import org.springblade.system.user.entity.User; import org.springblade.system.user.feign.IUserClient; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** @@ -154,4 +161,137 @@ public class InstrumentController extends BladeController { return R.data(map); } } + + /** + * 导出模板 + */ + @GetMapping("importTmplate") + @ApiOperationSupport(order = 8) + @ApiOperation(value = "设备导入模板") + public void importTmplate(HttpServletResponse response) { + List list = new ArrayList<>(); + ExcelUtil.export(response, "仪器设备导入模板", "仪器设备管理", list, InstrumentExcel.class); + } + + /** + * 批量导入设备数据 + */ + @PostMapping("/import") + public R Import(MultipartFile file) throws Exception { + List excelList = ExcelUtil.read(file, InstrumentExcel.class); + List list = new ArrayList<>(); + StringBuilder builder = new StringBuilder(); + StringBuilder builder1 = new StringBuilder(); + StringBuilder builder2 = new StringBuilder(); + int success = 0; + int fail = 0; + if (excelList != null && excelList.size() > 0) { + //非空校验 + builder = checkExcel(excelList); + if(builder.length() > 0){ + return R.data(builder); + } + for (InstrumentExcel instrumentExcel : excelList) { + //验证仪器/设备编号是否重复 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Instrument::getCode,instrumentExcel.getCode()); + wrapper.eq(BaseEntity::getIsDeleted,0); + Instrument oldInstrument = service.getOne(wrapper); + if(ObjectUtil.isNotEmpty(oldInstrument)){ + builder1.append(oldInstrument.getCode()).append(","); + fail++; + continue; + } + + //构建实体类 + Instrument instrument = new Instrument(); + //根据保管人名称查询保管人id + R user = userClient.findByName(instrumentExcel.getSaveByName()); + if(user.getData().getId() == null){ + builder2.append(instrument.getCode()).append(","); + fail++; + continue; + } + instrument.setCode(instrumentExcel.getCode()); + instrument.setName(instrumentExcel.getName()); + instrument.setType(DictBizCache.getKey(DictBizEnum.INSTRUMENT.getName(), instrumentExcel.getType())); + instrument.setModel(instrumentExcel.getModel()); + instrument.setProductionDate(instrumentExcel.getProductionDate()); + instrument.setEnableDate(instrumentExcel.getEnableDate()); + instrument.setStoragePlace(instrumentExcel.getStoragePlace()); + instrument.setSaveByName(instrumentExcel.getSaveByName()); + instrument.setSaveById(user.getData().getId()); + instrument.setManufacturerBrand(instrumentExcel.getManufacturerBrand()); + instrument.setPurchaseTime(instrumentExcel.getPurchaseTime()); + instrument.setIsVerification(DictCache.getKey(DictEnum.YES_NO.getName(), instrumentExcel.getType())); + instrument.setScrapYears(instrumentExcel.getScrapYears()); + instrument.setInstrumentStatus(DictBizCache.getKey(DictBizEnum.EQUIP_STATUS.getName(), instrumentExcel.getInstrumentStatus())); + success++; + list.add(instrument); + } + } + service.saveBatch(list); + builder = builder.append("导入成功").append(success).append("条,失败").append(fail).append("条。"); + if(builder1.length() > 0){ + builder = builder.append("设备编码重复:").append(builder1.substring(0,builder1.length()-1)).append(";"); + } + if(builder2.length() > 0){ + builder = builder.append("未查询到保管人:").append(builder2.substring(0,builder2.length()-1)).append(";"); + } + + return R.data(builder); + } + + /** + * 导出模板 + */ + @GetMapping("export") + @ApiOperationSupport(order = 14) + @ApiOperation(value = "导出仪器设备") + public void export(HttpServletResponse response,@RequestParam String ids) { + String[] strIds = ids.split(","); + List listInstrument = service.listByIds(Arrays.asList(strIds)); + List list = BeanUtil.copy(listInstrument, InstrumentExcel.class); + list.forEach(item -> { + item.setType(DictBizCache.getValue(DictBizEnum.INSTRUMENT.getName(), item.getType())); + item.setInstrumentStatus(DictBizCache.getValue(DictBizEnum.EQUIP_STATUS.getName(), item.getInstrumentStatus())); + item.setIsVerification(DictCache.getValue(DictEnum.YES_NO.getName(), item.getIsVerification())); + }); + ExcelUtil.export(response, "仪器设备管理数据", "仪器设备管理", list, InstrumentExcel.class); + } + + public StringBuilder checkExcel(List excelList){ + StringBuilder builder = new StringBuilder(); + for(int i=0;i< excelList.size(); i++){ + InstrumentExcel excel = excelList.get(i); + if(StringUtils.isEmpty(excel.getCode())){ + builder.append("第").append(i+2).append("行仪器/设备编号不能为空;"); + continue; + } + if(StringUtils.isEmpty(excel.getName())){ + builder.append("第").append(i+2).append("行仪器/设备名称不能为空;"); + continue; + } + if(excel.getProductionDate() == null){ + builder.append("第").append(i+2).append("行出厂日期不能为空;"); + continue; + } + if(excel.getEnableDate() == null){ + builder.append("第").append(i+2).append("行启用日期不能为空;"); + continue; + } + if(StringUtils.isEmpty(excel.getStoragePlace())){ + builder.append("第").append(i+2).append("行存放地点不能为空;"); + continue; + } + if(StringUtils.isEmpty(excel.getSaveByName())){ + builder.append("第").append(i+2).append("行保管人不能为空;"); + continue; + } + if(StringUtils.isEmpty(excel.getIsVerification())){ + builder.append("第").append(i+2).append("行是否需要鉴定不能为空;"); + } + } + return builder; + } } diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/PurchaseApplyController.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/PurchaseApplyController.java new file mode 100644 index 0000000..7347989 --- /dev/null +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/PurchaseApplyController.java @@ -0,0 +1,62 @@ + +package org.springblade.lims.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.AllArgsConstructor; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.mp.support.Query; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.Func; +import org.springblade.lims.entry.PurchaseApply; +import org.springblade.lims.service.IPurchaseApplyService; +import org.springframework.web.bind.annotation.*; + + +/** + * @author sjx + * @date 2023年11月27日15:34:17 + */ +@RestController +@AllArgsConstructor +@RequestMapping("/purchaseApply") +@Api(value = "", tags = "") +public class PurchaseApplyController extends BladeController { + + private final IPurchaseApplyService service; + + @GetMapping("/page") + public R page(PurchaseApply entry, Query query) { + return R.data(service.findPage(entry, query)); + } + + /** + * 保存申请单 + */ + @PostMapping("/saveApply") + @ApiOperation(value = "保存申请单", notes = "保存申请单") + public R saveApply(@RequestBody PurchaseApply entry) { + return R.data(service.saveApply(entry)); + } + + /** + * 根据id查询信息 + */ + @GetMapping("/getById") + @ApiOperation(value = "根据id查询信息", notes = "根据id查询信息") + public R getById(String id) { + return R.data(service.findById(id)); + } + + + /** + * 删除 + */ + @GetMapping("/deleteById") + @ApiOperation(value = "逻辑删除", notes = "传入id") + public R deleteById(@ApiParam(value = "主键集合", required = true) @RequestParam String id) { + return R.status(service.deleteLogic(Func.toLongList(id))); + } + +} diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/PurchaseCheckController.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/PurchaseCheckController.java new file mode 100644 index 0000000..20404d3 --- /dev/null +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/PurchaseCheckController.java @@ -0,0 +1,106 @@ + +package org.springblade.lims.controller; + +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.AllArgsConstructor; +import lombok.SneakyThrows; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.mp.support.Query; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.Charsets; +import org.springblade.core.tool.utils.Func; +import org.springblade.core.tool.utils.IoUtil; +import org.springblade.lims.entry.PurchaseCheck; +import org.springblade.lims.service.IPurchaseCheckService; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import java.io.InputStream; +import java.net.URLEncoder; +import java.util.Map; + + +/** + * @author sjx + * @date 2023年11月27日15:34:17 + */ +@RestController +@AllArgsConstructor +@RequestMapping("/purchaseCheck") +@Api(value = "", tags = "") +public class PurchaseCheckController extends BladeController { + + private final IPurchaseCheckService service; + private final HttpServletResponse response; + + @GetMapping("/page") + public R page(PurchaseCheck entry, Query query) { + return R.data(service.findPage(entry, query)); + } + + /** + * 保存申请单 + */ + @PostMapping("/saveCheck") + @ApiOperation(value = "保存验收单", notes = "保存验收单") + public R saveApply(@RequestBody PurchaseCheck entry) { + return R.data(service.saveCheck(entry)); + } + + /** + * 根据id查询信息 + */ + @GetMapping("/getById") + @ApiOperation(value = "根据id查询信息", notes = "根据id查询信息") + public R getById(String id) { + return R.data(service.getById(id)); + } + + + /** + * 删除 + */ + @GetMapping("/deleteById") + @ApiOperation(value = "逻辑删除", notes = "传入id") + public R deleteById(@ApiParam(value = "主键集合", required = true) @RequestParam String id) { + return R.status(service.deleteLogic(Func.toLongList(id))); + } + + /** + * 上传文件 + */ + @PostMapping("/uploadFile") + public R> uploadFile(@RequestParam MultipartFile file) { + return R.data(service.uploadFile(file)); + } + + @SneakyThrows + @GetMapping("/download/{id}") + @ApiOperationSupport(order = 0) + @ApiOperation(value = "下载文件", notes = "下载文件") + public void download(@ApiParam(value = "下载的文件id", required = true) @Valid @NotNull @PathVariable("id") Long id) { + PurchaseCheck entry = service.getById(id); + String fileName = entry.getAttachName(); + // 查询 + InputStream inputStream = service.getInputStreamById(id); + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding(Charsets.UTF_8.name()); + if (fileName != null) { + fileName = URLEncoder.encode(fileName, Charsets.UTF_8.name()); + response.setHeader("Content-disposition", "attachment;filename=" + fileName); + } + ServletOutputStream outputStream = response.getOutputStream(); + IoUtil.copy(inputStream, outputStream); + IoUtil.closeQuietly(inputStream); + IoUtil.closeQuietly(outputStream); + } + + +} diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/PurchaseOrderController.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/PurchaseOrderController.java new file mode 100644 index 0000000..0565638 --- /dev/null +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/controller/PurchaseOrderController.java @@ -0,0 +1,67 @@ + +package org.springblade.lims.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.AllArgsConstructor; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.mp.support.Query; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.Func; +import org.springblade.lims.entry.PurchaseOrder; +import org.springblade.lims.service.IPurchaseOrderService; +import org.springframework.web.bind.annotation.*; + + +/** + * @author sjx + * @date 2023年11月27日15:34:17 + */ +@RestController +@AllArgsConstructor +@RequestMapping("/purchaseOrder") +@Api(value = "", tags = "") +public class PurchaseOrderController extends BladeController { + + private final IPurchaseOrderService service; + + @GetMapping("/page") + public R page(PurchaseOrder entry, Query query) { + return R.data(service.findPage(entry, query)); + } + + @GetMapping("/findLIst") + public R findLIst(PurchaseOrder entry, Query query) { + return R.data(service.findList(entry)); + } + + /** + * 保存申请单 + */ + @PostMapping("/saveOrder") + @ApiOperation(value = "保存采购清单", notes = "保存采购清单") + public R saveOrder(@RequestBody PurchaseOrder entry) { + return R.data(service.saveOrder(entry)); + } + + /** + * 根据id查询信息 + */ + @GetMapping("/ById") + @ApiOperation(value = "根据id查询信息", notes = "根据id查询信息") + public R getById(String id) { + return R.data(service.getById(id)); + } + + + /** + * 删除 + */ + @GetMapping("/deleteById") + @ApiOperation(value = "逻辑删除", notes = "传入id") + public R deleteById(@ApiParam(value = "主键集合", required = true) @RequestParam String id) { + return R.status(service.deleteLogic(Func.toLongList(id))); + } + +} diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/mapper/PurchaseApplyMapper.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/mapper/PurchaseApplyMapper.java new file mode 100644 index 0000000..6b186b8 --- /dev/null +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/mapper/PurchaseApplyMapper.java @@ -0,0 +1,15 @@ + +package org.springblade.lims.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springblade.lims.entry.PurchaseApply; + +/** + * + * + * @author sjx + * @since 2023年11月27日15:47:39 + */ +public interface PurchaseApplyMapper extends BaseMapper { + +} diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/mapper/PurchaseCheckMapper.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/mapper/PurchaseCheckMapper.java new file mode 100644 index 0000000..2d99bc2 --- /dev/null +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/mapper/PurchaseCheckMapper.java @@ -0,0 +1,15 @@ + +package org.springblade.lims.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springblade.lims.entry.PurchaseCheck; + +/** + * + * + * @author sjx + * @since 2023年11月27日15:47:39 + */ +public interface PurchaseCheckMapper extends BaseMapper { + +} diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/mapper/PurchaseOrderMapper.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/mapper/PurchaseOrderMapper.java new file mode 100644 index 0000000..4df948e --- /dev/null +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/mapper/PurchaseOrderMapper.java @@ -0,0 +1,15 @@ + +package org.springblade.lims.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springblade.lims.entry.PurchaseOrder; + +/** + * + * + * @author sjx + * @since 2023年11月27日15:47:39 + */ +public interface PurchaseOrderMapper extends BaseMapper { + +} diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/service/IPurchaseApplyService.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/service/IPurchaseApplyService.java new file mode 100644 index 0000000..ad6585b --- /dev/null +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/service/IPurchaseApplyService.java @@ -0,0 +1,20 @@ + +package org.springblade.lims.service; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.core.mp.base.BaseService; +import org.springblade.core.mp.support.Query; +import org.springblade.lims.entry.PurchaseApply; + +/** + * @author sjx + * @date 2023年11月27日15:34:17 + */ +public interface IPurchaseApplyService extends BaseService { + IPage findPage(PurchaseApply entry, Query query); + + boolean saveApply(PurchaseApply entry); + + PurchaseApply findById(String id); +} diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/service/IPurchaseCheckService.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/service/IPurchaseCheckService.java new file mode 100644 index 0000000..e841e4a --- /dev/null +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/service/IPurchaseCheckService.java @@ -0,0 +1,27 @@ + +package org.springblade.lims.service; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.core.mp.base.BaseService; +import org.springblade.core.mp.support.Query; +import org.springblade.lims.entry.PurchaseCheck; +import org.springframework.web.multipart.MultipartFile; + +import java.io.InputStream; +import java.util.Map; + +/** + * @author sjx + * @date 2023年11月27日15:34:17 + */ +public interface IPurchaseCheckService extends BaseService { + IPage findPage(PurchaseCheck entry, Query query); + + boolean saveCheck(PurchaseCheck entry); + + Map uploadFile(MultipartFile file); + + InputStream getInputStreamById(Long id); + +} diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/service/IPurchaseOrderService.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/service/IPurchaseOrderService.java new file mode 100644 index 0000000..695b703 --- /dev/null +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/service/IPurchaseOrderService.java @@ -0,0 +1,22 @@ + +package org.springblade.lims.service; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.core.mp.base.BaseService; +import org.springblade.core.mp.support.Query; +import org.springblade.lims.entry.PurchaseOrder; + +import java.util.List; + +/** + * @author sjx + * @date 2023年11月27日15:34:17 + */ +public interface IPurchaseOrderService extends BaseService { + IPage findPage(PurchaseOrder entry, Query query); + List findList(PurchaseOrder entry); + + boolean saveOrder(PurchaseOrder entry); + +} diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/PurchaseApplyServiceImpl.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/PurchaseApplyServiceImpl.java new file mode 100644 index 0000000..414db7e --- /dev/null +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/PurchaseApplyServiceImpl.java @@ -0,0 +1,121 @@ + +package org.springblade.lims.service.impl; + + +import com.alibaba.nacos.common.utils.StringUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.time.DateFormatUtils; +import org.springblade.core.mp.base.BaseEntity; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.mp.support.Condition; +import org.springblade.core.mp.support.Query; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tool.utils.CollectionUtil; +import org.springblade.core.tool.utils.StringUtil; +import org.springblade.lims.entry.PurchaseApply; +import org.springblade.lims.entry.PurchaseOrder; +import org.springblade.lims.mapper.PurchaseApplyMapper; +import org.springblade.lims.service.IPurchaseApplyService; +import org.springblade.lims.service.IPurchaseOrderService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; + + +/** + * + * @author swj + * @since 2022年6月2日15:53:01 + */ +@Service +@AllArgsConstructor +public class PurchaseApplyServiceImpl extends BaseServiceImpl implements IPurchaseApplyService { + + private final IPurchaseOrderService purchaseOrderService; + + @Override + public IPage findPage(PurchaseApply entry, Query query) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + if(entry.getApplyStatus() != null){ + wrapper.eq(PurchaseApply::getApplyStatus,entry.getApplyStatus()); + } + if(StringUtils.isNotBlank(entry.getSupplierId())){ + wrapper.eq(PurchaseApply::getSupplierId,entry.getSupplierId()); + } + if(StringUtils.isNotBlank(entry.getBusinessCode())){ + wrapper.eq(PurchaseApply::getBusinessCode,entry.getBusinessCode()); + } + if(StringUtils.isNotBlank(entry.getName())){ + wrapper.eq(PurchaseApply::getName,entry.getName()); + } + if(StringUtils.isNotBlank(entry.getAssetCheck())){ + wrapper.eq(PurchaseApply::getAssetCheck,entry.getAssetCheck()); + } + if(StringUtils.isNotBlank(entry.getApplyDateBegin())){ + wrapper.ge(PurchaseApply::getApplyDate,entry.getApplyDateBegin()); + } + if(StringUtils.isNotBlank(entry.getApplyDateEnd())){ + wrapper.le(PurchaseApply::getApplyDate,entry.getApplyDateEnd()); + } + wrapper.eq(BaseEntity::getIsDeleted,0); + wrapper.orderByDesc(PurchaseApply::getCreateTime); + IPage page = this.page(Condition.getPage(query), wrapper); + return page; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean saveApply(PurchaseApply entry) { + Date date = new Date(); + if(entry.getId() == null){ + entry.setCreateUser(AuthUtil.getUserId()); + entry.setCreateTime(date); + entry.setBusinessCode("CGSQ"+ DateFormatUtils.format(date,"yyyyMMddhhmmss")+ StringUtil.randomUUID().substring(0,5)); + entry.setOriginatorId(AuthUtil.getUserId().toString()); + entry.setAssetCheck("0"); + baseMapper.insert(entry); + }else{ + entry.setUpdateUser(AuthUtil.getUserId()); + entry.setUpdateTime(date); + baseMapper.updateById(entry); + } + //保存id到采购清单 + if("0".equals(entry.getApplyStatus()) || "1".equals(entry.getApplyStatus())){ + if(CollectionUtil.isNotEmpty(entry.getOrderList())){ + //采购清单全删全增 + PurchaseOrder oldOrder = new PurchaseOrder(); + oldOrder.setApplyId(entry.getId().toString()); + List oldOrderList = purchaseOrderService.findList(oldOrder); + if(CollectionUtil.isNotEmpty(oldOrderList)){ + for(PurchaseOrder order : oldOrderList){ + purchaseOrderService.removeById(order.getId()); + } + } + for(PurchaseOrder order : entry.getOrderList()){ + order.setId(null); + order.setApplyId(entry.getId().toString()); + order.setUpdateUser(AuthUtil.getUserId()); + order.setUpdateTime(date); + purchaseOrderService.save(order); + } + } + } + return true; + } + + @Override + public PurchaseApply findById(String id) { + PurchaseApply entry = this.getById(id); + //根据id查询对应采购清单 + LambdaQueryWrapper orderQueryWrapper = new LambdaQueryWrapper<>(); + orderQueryWrapper.eq(PurchaseOrder::getApplyId,entry.getId()); + orderQueryWrapper.eq(BaseEntity::getIsDeleted,0); + List orderList = purchaseOrderService.list(orderQueryWrapper); + entry.setOrderList(orderList); + return entry; + } +} diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/PurchaseCheckServiceImpl.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/PurchaseCheckServiceImpl.java new file mode 100644 index 0000000..343a858 --- /dev/null +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/PurchaseCheckServiceImpl.java @@ -0,0 +1,153 @@ + +package org.springblade.lims.service.impl; + + +import com.alibaba.nacos.common.utils.StringUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import lombok.AllArgsConstructor; +import lombok.SneakyThrows; +import org.apache.commons.lang3.time.DateFormatUtils; +import org.springblade.core.mp.base.BaseEntity; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.mp.support.Condition; +import org.springblade.core.mp.support.Query; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tool.utils.StringUtil; +import org.springblade.lims.entry.PurchaseApply; +import org.springblade.lims.entry.PurchaseCheck; +import org.springblade.lims.mapper.PurchaseCheckMapper; +import org.springblade.lims.service.IPurchaseApplyService; +import org.springblade.lims.service.IPurchaseCheckService; +import org.springblade.system.feign.ISysClient; +import org.springframework.core.io.ClassPathResource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + + +/** + * + * @author swj + * @since 2022年6月2日15:53:01 + */ +@Service +@AllArgsConstructor +public class PurchaseCheckServiceImpl extends BaseServiceImpl implements IPurchaseCheckService { + + private final ISysClient sysClient; + + private final IPurchaseApplyService purchaseApplyService; + + @Override + public IPage findPage(PurchaseCheck entry, Query query) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + + if(StringUtils.isNotBlank(entry.getBusinessCode())){ + wrapper.eq(PurchaseCheck::getBusinessCode,entry.getBusinessCode()); + } + + if(StringUtils.isNotBlank(entry.getName())){ + wrapper.like(PurchaseCheck::getName,entry.getName()); + } + + if(StringUtils.isNotBlank(entry.getCheckUserName())){ + wrapper.eq(PurchaseCheck::getCheckUserName,entry.getCheckUserName()); + } + + if(StringUtils.isNotBlank(entry.getCheckUserName())){ + wrapper.eq(PurchaseCheck::getCheckUserName,entry.getCheckUserName()); + } + + if(StringUtils.isNotBlank(entry.getReceiveDateBegin())){ + wrapper.ge(PurchaseCheck::getReceiveDate,entry.getReceiveDateBegin()); + } + + if(StringUtils.isNotBlank(entry.getReceiveDateEnd())){ + wrapper.le(PurchaseCheck::getReceiveDate,entry.getReceiveDateEnd()); + } + + if(StringUtils.isNotBlank(entry.getCheckDateBegin())){ + wrapper.ge(PurchaseCheck::getCheckDate,entry.getCheckDateBegin()); + } + + if(StringUtils.isNotBlank(entry.getCheckDateEnd())){ + wrapper.le(PurchaseCheck::getCheckDate,entry.getCheckDateEnd()); + } + wrapper.eq(BaseEntity::getIsDeleted,0); + wrapper.orderByDesc(PurchaseCheck::getCreateTime); + IPage page = this.page(Condition.getPage(query), wrapper); + return page; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean saveCheck(PurchaseCheck entry) { + Date date = new Date(); + entry.setBusinessCode("CGYS"+ DateFormatUtils.format(date,"yyyyMMddhhmmss")+ StringUtil.randomUUID().substring(0,5)); + entry.setCreateUser(AuthUtil.getUserId()); + entry.setCreateTime(date); + entry.setOriginatorId(AuthUtil.getUserId().toString()); + baseMapper.insert(entry); + //根据采购申请id更新采购申请单 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(PurchaseApply::getId,entry.getApplyId()); + wrapper.eq(BaseEntity::getIsDeleted,0); + PurchaseApply apply = purchaseApplyService.getOne(wrapper); + apply.setApplyStatus("4"); + apply.setCheckId(entry.getId().toString()); + apply.setAssetCheck("1"); + purchaseApplyService.updateById(apply); + return true; + } + + @Override + public Map uploadFile(MultipartFile file) { + Map map = new HashMap<>(); + String fileName = ""; + String path = ""; + String originalFilename = ""; + if (file != null) { + originalFilename = file.getOriginalFilename(); + String fileSuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); + fileName = UUID.randomUUID().toString() + fileSuffix; + path = sysClient.getParamValue("jiahe").getData() + fileName; + + FileOutputStream fout; + try { + fout = new FileOutputStream(path); + fout.write(file.getBytes()); + fout.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + map.put("filename",originalFilename); + map.put("path",path); + return map; + } + + @Override + @SneakyThrows + public InputStream getInputStreamById(Long id) { + PurchaseCheck entry = this.getById(id); + InputStream inputStream; + File file = new File(entry.getAttach()); + if (file.exists()) { + inputStream = new FileInputStream(file); + } else { + inputStream = new ClassPathResource("FileNotFound.xlsx").getInputStream(); + } + return inputStream; + } + +} diff --git a/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/PurchaseOrderServiceImpl.java b/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/PurchaseOrderServiceImpl.java new file mode 100644 index 0000000..27e5726 --- /dev/null +++ b/lab-service/lab-lims/src/main/java/org/springblade/lims/service/impl/PurchaseOrderServiceImpl.java @@ -0,0 +1,78 @@ + +package org.springblade.lims.service.impl; + + +import com.alibaba.nacos.common.utils.StringUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import lombok.AllArgsConstructor; +import org.springblade.core.mp.base.BaseEntity; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.mp.support.Condition; +import org.springblade.core.mp.support.Query; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.lims.entry.PurchaseOrder; +import org.springblade.lims.mapper.PurchaseOrderMapper; +import org.springblade.lims.service.IPurchaseOrderService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; + + +/** + * + * @author swj + * @since 2022年6月2日15:53:01 + */ +@Service +@AllArgsConstructor +public class PurchaseOrderServiceImpl extends BaseServiceImpl implements IPurchaseOrderService { + + @Override + public IPage findPage(PurchaseOrder entry, Query query) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + + if(StringUtils.isNotBlank(entry.getName())){ + wrapper.like(PurchaseOrder::getName,entry.getName()); + } + wrapper.eq(BaseEntity::getIsDeleted,0); + wrapper.orderByDesc(PurchaseOrder::getCreateTime); + IPage page = this.page(Condition.getPage(query), wrapper); + return page; + } + + @Override + public List findList(PurchaseOrder entry) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + if(StringUtils.isNotBlank(entry.getName())){ + wrapper.like(PurchaseOrder::getName,entry.getName()); + } + if(StringUtils.isNotBlank(entry.getApplyId())){ + wrapper.like(PurchaseOrder::getApplyId,entry.getApplyId()); + } + wrapper.eq(BaseEntity::getIsDeleted,0); + wrapper.orderByDesc(PurchaseOrder::getCreateTime); + List list = this.list(wrapper); + return list; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean saveOrder(PurchaseOrder entry) { + Date date = new Date(); + if(entry.getId() == null){ + entry.setCreateUser(AuthUtil.getUserId()); + entry.setCreateTime(date); + entry.setOriginatorId(AuthUtil.getUserId().toString()); + baseMapper.insert(entry); + }else{ + entry.setUpdateUser(AuthUtil.getUserId()); + entry.setUpdateTime(date); + baseMapper.updateById(entry); + } + return true; + } + +} diff --git a/lab-service/lab-system/src/main/java/org/springblade/system/SystemApplication.java b/lab-service/lab-system/src/main/java/org/springblade/system/SystemApplication.java index 270142b..962a3b6 100644 --- a/lab-service/lab-system/src/main/java/org/springblade/system/SystemApplication.java +++ b/lab-service/lab-system/src/main/java/org/springblade/system/SystemApplication.java @@ -16,6 +16,11 @@ public class SystemApplication { public static void main(String[] args) { BladeApplication.run(AppConstant.APPLICATION_SYSTEM_NAME, SystemApplication.class, args); + System.out.println("=============================="); + System.out.println("=============================="); + System.out.println("========System启动成功!========"); + System.out.println("=============================="); + System.out.println("=============================="); } } diff --git a/lab-service/lab-user/src/main/java/org/springblade/system/user/UserApplication.java b/lab-service/lab-user/src/main/java/org/springblade/system/user/UserApplication.java index 834be4d..8e3f5ff 100644 --- a/lab-service/lab-user/src/main/java/org/springblade/system/user/UserApplication.java +++ b/lab-service/lab-user/src/main/java/org/springblade/system/user/UserApplication.java @@ -19,6 +19,11 @@ public class UserApplication { public static void main(String[] args) { BladeApplication.run(AppConstant.APPLICATION_USER_NAME, UserApplication.class, args); + System.out.println("=============================="); + System.out.println("=============================="); + System.out.println("========User启动成功!=========="); + System.out.println("=============================="); + System.out.println("=============================="); } } diff --git a/lab-service/lab-user/src/main/java/org/springblade/system/user/feign/UserClient.java b/lab-service/lab-user/src/main/java/org/springblade/system/user/feign/UserClient.java index d20d277..9e8f431 100644 --- a/lab-service/lab-user/src/main/java/org/springblade/system/user/feign/UserClient.java +++ b/lab-service/lab-user/src/main/java/org/springblade/system/user/feign/UserClient.java @@ -6,7 +6,6 @@ import lombok.AllArgsConstructor; import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; -import org.springblade.system.entity.Dept; import org.springblade.system.feign.ISysClient; import org.springblade.system.user.entity.User; import org.springblade.system.user.entity.UserInfo; @@ -18,7 +17,6 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; -import java.util.ArrayList; import java.util.List; /** @@ -101,4 +99,10 @@ public class UserClient implements IUserClient { return R.data(user); } + @Override + @GetMapping(FIND_BY_NAME) + public R findByName(String userName) { + User user = service.getOne(Wrappers.query().lambda().eq(User::getName,userName)); + return R.data(user); + } }