ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpClinicWarehousingController.java
@@ -2,17 +2,19 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.dto.ClinicOutboundGoodsDto; import com.ruoyi.system.dto.InventoryDto; import com.ruoyi.system.dto.clinicWarehouseGoodsDto; import com.ruoyi.system.model.TCrmClinic; import com.ruoyi.system.model.TCrmSupplier; import com.ruoyi.system.query.TErpGoodsInventoryQuery; import com.ruoyi.system.query.TErpGoodsQuery; import com.ruoyi.system.query.TErpInventoryQuery; import com.ruoyi.system.query.ValidityPeriodWarningQuery; import com.ruoyi.system.model.TErpClinicOutbound; import com.ruoyi.system.model.TErpGoods; import com.ruoyi.system.query.*; import com.ruoyi.system.service.*; import com.ruoyi.system.vo.*; import io.swagger.annotations.ApiOperation; @@ -150,5 +152,140 @@ /** * 获取erp问题上报管理列表 */ @ApiOperation(value = "诊所 入库列表") @PostMapping(value = "/warehousePageList") public R<PageInfo<TErpClinicWarehousePageListVO>> warehousePageList(@RequestBody TClinicWarehouseQuery query) { SysUser user = tokenService.getLoginUser().getUser(); Integer roleType = user.getRoleType(); String supplierClinicId =null; if(roleType == 5){ // 诊所 TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) .eq(TCrmClinic::getUserId, user.getUserId()) .last("LIMIT 1")); supplierClinicId = crmClinic.getId(); } return R.ok(erpClinicWarehousingService.warehousePageList(query,user,supplierClinicId)); } @ApiOperation(value = "诊所 入库商品列表") @PostMapping(value = "/warehouseGoodsPageList") public R<Page<TErpGoods>> warehouseGoodsPageList(@RequestBody TClinicGoodsWarehouseQuery query) { SysUser user = tokenService.getLoginUser().getUser(); Integer roleType = user.getRoleType(); String supplierClinicId =null; if(roleType == 5){ // 诊所 TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) .eq(TCrmClinic::getUserId, user.getUserId()) .last("LIMIT 1")); supplierClinicId = crmClinic.getId(); } return R.ok(erpGoodsService.warehouseGoodsPageList(query,user,supplierClinicId)); } @ApiOperation(value = "诊所 入库商品详情") @GetMapping(value = "/warehouseGoodsDetail/{id}") public R<WarehouseGoodsDetailVo> warehouseGoodsDetail(@PathVariable String id) { SysUser user = tokenService.getLoginUser().getUser(); Integer roleType = user.getRoleType(); String supplierClinicId =null; if(roleType == 5){ // 诊所 TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) .eq(TCrmClinic::getUserId, user.getUserId()) .last("LIMIT 1")); supplierClinicId = crmClinic.getId(); } return R.ok(erpGoodsService.warehouseGoodsDetail(id)); } @ApiOperation(value = "诊所 出库商品详情") @GetMapping(value = "/outboundGoodsDetail/{id}") public R<OutboundGoodsDetailVo> outboundGoodsDetail(@PathVariable String id) { SysUser user = tokenService.getLoginUser().getUser(); Integer roleType = user.getRoleType(); String supplierClinicId =null; if(roleType == 5){ // 诊所 TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) .eq(TCrmClinic::getUserId, user.getUserId()) .last("LIMIT 1")); supplierClinicId = crmClinic.getId(); } return R.ok(erpGoodsService.outboundGoodsDetail(id)); } @ApiOperation(value = "诊所 入库商品操作") @PostMapping(value = "/warehouseGoods") public R<?> warehouseGoods(@RequestBody @Valid List<clinicWarehouseGoodsDto> dtos) { SysUser user = tokenService.getLoginUser().getUser(); Integer roleType = user.getRoleType(); String supplierClinicId =null; if(roleType == 5){ // 诊所 TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) .eq(TCrmClinic::getUserId, user.getUserId()) .last("LIMIT 1")); supplierClinicId = crmClinic.getId(); } erpClinicWarehousingService.warehouseGoods(dtos,user,supplierClinicId); return R.ok(); } /** * 获取erp问题上报管理列表 */ @ApiOperation(value = "诊所 出库列表") @PostMapping(value = "/outboundPageList") public R<PageInfo<TErpClinicOutboundPageListVO>> outboundPageList(@RequestBody TClinicOutboundQuery query) { SysUser user = tokenService.getLoginUser().getUser(); Integer roleType = user.getRoleType(); String supplierClinicId =null; if(roleType == 5){ // 诊所 TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) .eq(TCrmClinic::getUserId, user.getUserId()) .last("LIMIT 1")); supplierClinicId = crmClinic.getId(); } return R.ok(erpClinicWarehousingService.outboundPageList(query,user,supplierClinicId)); } @ApiOperation(value = "诊所 出库商品操作") @PostMapping(value = "/outboundGoods") public R<?> outboundGoods(@RequestBody @Valid ClinicOutboundGoodsDto dto) { SysUser user = tokenService.getLoginUser().getUser(); Integer roleType = user.getRoleType(); String supplierClinicId =null; if(roleType == 5){ // 诊所 TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) .eq(TCrmClinic::getUserId, user.getUserId()) .last("LIMIT 1")); supplierClinicId = crmClinic.getId(); } erpClinicWarehousingService.outboundGoods(dto,user,supplierClinicId); return R.ok(); } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java
@@ -359,7 +359,7 @@ List<TErpGoodsExcel> carAnnuallyImportExcels = ExcelImportUtil.importExcel(inputStream, TErpGoodsExcel.class, params); Set<String> collect = carAnnuallyImportExcels.stream().map(TErpGoodsExcel::getGoodsIdCode).collect(Collectors.toSet()); if (collect.size() != carAnnuallyImportExcels.size()) { return AjaxResult.error("导入数据中商品标识码重复"); return AjaxResult.error("导入数据中商品条码重复"); } Integer roleType = user.getRoleType(); for (TErpGoodsExcel erpGoodsExcel : carAnnuallyImportExcels) { @@ -400,10 +400,10 @@ } goods.setGoodsName(erpGoodsExcel.getGoodsName()); // 判断数据是否正确 // 判断标识码是否重复 // 判断条码是否重复 long count = erpGoodsService.count(new QueryWrapper<TErpGoods>().eq("goods_id_code", erpGoodsExcel.getGoodsIdCode())); if(count>0){ names.add(erpGoodsExcel.getGoodsName() + " :标识码重复"); names.add(erpGoodsExcel.getGoodsName() + " :条码重复"); continue; } goods.setGoodsIdCode(erpGoodsExcel.getGoodsIdCode()); ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java
@@ -53,11 +53,13 @@ private final TErpGoodsService erpGoodsService; private final TErpClinicWarehousingService erpClinicWarehousingService; private final TErpClinicWarehousingBatchService erpClinicWarehousingBatchService; private final TCrmSupplierService crmSupplierService; @Autowired public TErpProcurementController(TErpProcurementService erpProcurementService, TokenService tokenService,TCrmClinicService crmClinicService,TErpProcurementGoodsService erpProcurementGoodsService , TErpGoodsService erpGoodsService,TErpClinicWarehousingService erpClinicWarehousingService,TErpClinicWarehousingBatchService erpClinicWarehousingBatchService) { , TErpGoodsService erpGoodsService,TErpClinicWarehousingService erpClinicWarehousingService,TErpClinicWarehousingBatchService erpClinicWarehousingBatchService, TCrmSupplierService crmSupplierService) { this.erpProcurementService = erpProcurementService; this.tokenService = tokenService; this.crmClinicService = crmClinicService; @@ -65,6 +67,7 @@ this.erpGoodsService = erpGoodsService; this.erpClinicWarehousingService = erpClinicWarehousingService; this.erpClinicWarehousingBatchService = erpClinicWarehousingBatchService; this.crmSupplierService = crmSupplierService; } @@ -175,33 +178,37 @@ List<String> collect = dto.getList().stream().map(UpdateStatusProcurementDto::getId).collect(Collectors.toList()); List<TErpProcurementGoods> list = erpProcurementGoodsService.list(new LambdaQueryWrapper<TErpProcurementGoods>().in(TErpProcurementGoods::getId, collect)); TErpClinicWarehousing tErpClinicWarehousing = new TErpClinicWarehousing(); tErpClinicWarehousing.setClinicId(erpProcurement.getClinicId()); tErpClinicWarehousing.setProcurementId(erpProcurement.getId()); // tErpClinicWarehousing.setGoodsId(erpGoods.getId()); // tErpClinicWarehousing.setGoodsName(erpGoods.getGoodsName()); TCrmSupplier byId = crmSupplierService.getById(erpProcurement.getSupplierId()); tErpClinicWarehousing.setSupplierName(byId.getSupplierName()); // tErpClinicWarehousing.setQuasiNumber(erpGoods.getQuasiNumber()); // tErpClinicWarehousing.setSalesAmount(tErpProcurementGoods.getSalesAmount()); // tErpClinicWarehousing.setPurchaseCount(updateStatusProcurementDto.getPurchaseCount()); tErpClinicWarehousing.setTotalPrice(erpProcurement.getPayMoney()); // tErpClinicWarehousing.setUnitAmount(tErpProcurementGoods.getSalesAmount()); tErpClinicWarehousing.setWarehousingType(1); tErpClinicWarehousing.setType(1); tErpClinicWarehousing.setWarehouseNo("G"+ DateUtils.dateTimeNow()); erpClinicWarehousingService.save(tErpClinicWarehousing); // goodsId分组 for (UpdateStatusProcurementDto updateStatusProcurementDto : dto.getList()) { TErpProcurementGoods tErpProcurementGoods = list.stream().filter(t -> t.getId().equals(updateStatusProcurementDto.getId())).findFirst().get(); TErpGoods erpGoods = erpGoodsService.getById(tErpProcurementGoods.getGoodsId()); TErpClinicWarehousing tErpClinicWarehousing = new TErpClinicWarehousing(); tErpClinicWarehousing.setClinicId(erpProcurement.getClinicId()); tErpClinicWarehousing.setProcurementId(erpProcurement.getId()); tErpClinicWarehousing.setGoodsId(erpGoods.getId()); tErpClinicWarehousing.setGoodsName(erpGoods.getGoodsName()); tErpClinicWarehousing.setSupplierName(erpGoods.getSupplierName()); tErpClinicWarehousing.setQuasiNumber(erpGoods.getQuasiNumber()); tErpClinicWarehousing.setSalesAmount(tErpProcurementGoods.getSalesAmount()); tErpClinicWarehousing.setPurchaseCount(updateStatusProcurementDto.getPurchaseCount()); tErpClinicWarehousing.setTotalPrice(tErpProcurementGoods.getSalesAmount().multiply(new BigDecimal(updateStatusProcurementDto.getPurchaseCount()))); tErpClinicWarehousing.setUnitAmount(tErpProcurementGoods.getSalesAmount()); tErpClinicWarehousing.setWarehousingType(1); tErpClinicWarehousing.setWarehouseNo("G"+ DateUtils.dateTimeNow()); erpClinicWarehousingService.save(tErpClinicWarehousing); TErpClinicWarehousingBatch tErpClinicWarehousingGoods = new TErpClinicWarehousingBatch(); tErpClinicWarehousingGoods.setWarehousingId(tErpClinicWarehousing.getId()); tErpClinicWarehousingGoods.setWarehousingNumber(tErpClinicWarehousing.getPurchaseCount()); tErpClinicWarehousingGoods.setWarehousingNumber(updateStatusProcurementDto.getPurchaseCount()); tErpClinicWarehousingGoods.setBatchNumber(updateStatusProcurementDto.getBatchNumber()); tErpClinicWarehousingGoods.setProductionDate(updateStatusProcurementDto.getProductionDate()); tErpClinicWarehousingGoods.setExpiryDate(updateStatusProcurementDto.getExpiryDate()); tErpClinicWarehousingGoods.setGoodsId(erpGoods.getId()); tErpClinicWarehousingGoods.setGoodsName(erpGoods.getGoodsName()); tErpClinicWarehousingGoods.setQuasiNumber(erpGoods.getQuasiNumber()); tErpClinicWarehousingGoods.setSalesAmount(tErpProcurementGoods.getSalesAmount()); erpClinicWarehousingBatchService.save(tErpClinicWarehousingGoods); } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysOrderController.java
@@ -168,7 +168,7 @@ erpProcurement.setStatus(2); erpProcurement.setTermNo(supplier.getTermNo()); erpProcurement.setAccountType(type); erpProcurement.setTransType("41"); erpProcurement.setTransType(trans_type); erpProcurementService.updateById(erpProcurement); return R.ok(responseStr); @@ -422,7 +422,7 @@ @ApiOperation(value = "退款") @PostMapping(value = "/refundOrder") @SneakyThrows public R<?> refundOrder(@RequestParam String id, String type, HttpServletRequest request) { public R<?> refundOrder(@RequestParam String id, HttpServletRequest request) { SysUser user = tokenService.getLoginUser().getUser(); try { // 先退分账 在退订单 ruoyi-system/src/main/java/com/ruoyi/system/dto/ClinicOutboundGoodsDto.java
New file @@ -0,0 +1,39 @@ package com.ruoyi.system.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.math.BigDecimal; import java.util.List; @Data @ApiModel(value = "诊所商品出库dto") public class ClinicOutboundGoodsDto { @ApiModelProperty(value = "出库原因") @NotBlank(message = "出库原因不能为空") private String outboundReason; @ApiModelProperty(value = "出库类型 1=报损 2=到期 3=失效 4=召回 5=其他") @NotNull(message = "出库类型不能为空") private Integer outboundType; @ApiModelProperty("种类数") @NotNull(message = "种类数不能为空") private Integer typeNum; @ApiModelProperty("总价") @NotNull(message = "总价不能为空") private BigDecimal totalPrice; @ApiModelProperty(value = "商品出库二级dto") private List<OutboundGoodsNextDto> outboundGoodsNextDtos; } ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpClinicGoodsAddDto.java
@@ -45,8 +45,8 @@ @NotBlank ( message = "商品类型id不能为空") private String typeId; @ApiModelProperty(value = "商品标识码") @NotBlank ( message = "商品标识码不能为空") @ApiModelProperty(value = "商品条码") @NotBlank ( message = "商品条码不能为空") private String goodsIdCode; ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpGoodsAddDto.java
@@ -13,10 +13,9 @@ @NotBlank(message = "商品名称不能为空") private String goodsName; @ApiModelProperty(value = "商品标识码") @NotBlank(message = "商品标识码不能为空") @ApiModelProperty(value = "商品条码") @NotBlank(message = "商品条码不能为空") private String goodsIdCode; @ApiModelProperty(value = "国药准字号") @NotBlank(message = "国药准字号不能为空") ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpGoodsInfoSaveDto.java
@@ -19,7 +19,7 @@ @NotBlank(message = "商品类型id不能为空") private String typeId; @ApiModelProperty(value = "商品69码") @ApiModelProperty(value = "商品标识码") private String goodsYards; @ApiModelProperty(value = "保养周期") ruoyi-system/src/main/java/com/ruoyi/system/dto/clinicWarehouseGoodsDto.java
New file @@ -0,0 +1,44 @@ package com.ruoyi.system.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.math.BigDecimal; import java.time.LocalDateTime; @Data @ApiModel("诊所 商品入库dto") public class clinicWarehouseGoodsDto { @ApiModelProperty(value = "商品id") private String id; @ApiModelProperty(value = "单价") private BigDecimal unitAmount; @ApiModelProperty(value = "销售价格") private BigDecimal salesAmount; @ApiModelProperty(value = "采购数量") @NotNull(message = "采购数量不能为空") private Integer purchaseCount; @ApiModelProperty(value = "批次号") @NotBlank(message = "批次号不能为空") private String batchNumber; @ApiModelProperty(value = "生产日期") @NotNull(message = "生产日期不能为空") private LocalDateTime productionDate; @ApiModelProperty(value = "有效日期") @NotNull(message = "有效日期不能为空") private LocalDateTime expiryDate; @ApiModelProperty(value = "供应商id") @NotBlank(message = "供应商id不能为空") private String supplierId; } ruoyi-system/src/main/java/com/ruoyi/system/importExcel/TErpGoodsExcel.java
@@ -14,7 +14,7 @@ @Excel(width = 30,name = "*商品名称") private String goodsName; @Excel(width = 30,name = "*商品标识码") @Excel(width = 30,name = "*商品条码") private String goodsIdCode; @Excel(width = 30,name = "*国药准字号") @@ -30,7 +30,7 @@ private String packingSpec; @Excel(width = 30,name = "商品69码") @Excel(width = 30,name = "商品标识码") private String goodsYards; @Excel(width = 30,name = "保养周期(天)") ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpClinicWarehousingMapper.java
@@ -4,12 +4,8 @@ import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.system.model.TErpClinicWarehousing; import com.ruoyi.system.query.TErpGoodsQuery; import com.ruoyi.system.query.TErpInventoryQuery; import com.ruoyi.system.query.ValidityPeriodWarningQuery; import com.ruoyi.system.vo.PageInventoryListVo; import com.ruoyi.system.vo.TErpGoodsVO; import com.ruoyi.system.vo.ValidityPeriodWarningVo; import com.ruoyi.system.query.*; import com.ruoyi.system.vo.*; import org.apache.ibatis.annotations.Param; import java.time.LocalDateTime; @@ -33,4 +29,10 @@ List<TErpGoodsVO> pageList(@Param("query") TErpGoodsQuery query, @Param("pageInfo") PageInfo<TErpGoodsVO> pageInfo, @Param("user") SysUser user); List<TErpClinicWarehousePageListVO> warehousePageList(@Param("query") TClinicWarehouseQuery query, @Param("pageInfo") PageInfo<TErpClinicWarehousePageListVO> pageInfo, @Param("user") SysUser user, @Param("supplierClinicId") String supplierClinicId, @Param("sTime") String sTime, @Param("eTime") String eTime); List<TErpClinicOutboundPageListVO> outboundPageList(@Param("query") TClinicOutboundQuery query, @Param("pageInfo") PageInfo<TErpClinicOutboundPageListVO> pageInfo, @Param("user") SysUser user, @Param("supplierClinicId") String supplierClinicId, @Param("sTime") String sTime, @Param("eTime") String eTime); } ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicOutbound.java
@@ -54,5 +54,13 @@ @TableField("outbound_reason") private String outboundReason; @ApiModelProperty(value = "盘点id") @TableField("inventory_id") private String inventoryId; @ApiModelProperty(value = "种类数") @TableField("type_num") private Integer typeNum; } ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicOutboundGoods.java
@@ -52,5 +52,9 @@ @TableField("total_price") private BigDecimal totalPrice; @ApiModelProperty(value = "商品id") @TableField("goods_id") private String goodsId; } ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicWarehousing.java
@@ -38,29 +38,12 @@ @TableField("clinic_id") private String clinicId; @ApiModelProperty(value = "商品id") @TableField("goods_id") private String goodsId; @ApiModelProperty(value = "商品名称") @TableField("goods_name") private String goodsName; @ApiModelProperty(value = "供应商名称") @TableField("supplier_name") private String supplierName; @ApiModelProperty(value = "国药准字号") @TableField("quasi_number") private String quasiNumber; @ApiModelProperty(value = "售价") @TableField("sales_amount") private BigDecimal salesAmount; @ApiModelProperty(value = "所需数量(采购数量)") @TableField("purchase_count") private Integer purchaseCount; @ApiModelProperty(value = "总价") @TableField("total_price") @@ -74,10 +57,14 @@ @TableField("warehouse_no") private String warehouseNo; @ApiModelProperty(value = "单价") @TableField("unit_amount") private BigDecimal unitAmount; @ApiModelProperty(value = "1正常 2盘点") @ApiModelProperty(value = "1采购 2盘点 3手动") private Integer type; @ApiModelProperty(value = "供应商id") @TableField("supplier_id") private String supplierId; @ApiModelProperty(value = "盘点id") @TableField("inventory_id") private String inventoryId; } ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicWarehousingBatch.java
@@ -12,6 +12,7 @@ import lombok.EqualsAndHashCode; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; /** @@ -56,4 +57,33 @@ private LocalDateTime expiryDate; @ApiModelProperty(value = "商品id") @TableField("goods_id") private String goodsId; @ApiModelProperty(value = "商品名称") @TableField("goods_name") private String goodsName; @ApiModelProperty(value = "国药准字号") @TableField("quasi_number") private String quasiNumber; @ApiModelProperty(value = "单价") @TableField("unit_amount") private BigDecimal unitAmount; @ApiModelProperty(value = "所需数量(采购数量)") @TableField("purchase_count") private Integer purchaseCount; @ApiModelProperty(value = "售价") @TableField("sales_amount") private BigDecimal salesAmount; @ApiModelProperty(value = "单位") @TableField(exist = false) private String unitName; } ruoyi-system/src/main/java/com/ruoyi/system/model/TErpGoods.java
@@ -45,9 +45,9 @@ @Excel(name = "*商品名称") private String goodsName; @ApiModelProperty(value = "商品标识码") @ApiModelProperty(value = "商品条码") @TableField("goods_id_code") @Excel(name = "*商品标识码") @Excel(name = "*商品条码") private String goodsIdCode; @ApiModelProperty(value = "国药准字号") @@ -90,9 +90,9 @@ @TableField("type_id") private String typeId; @ApiModelProperty(value = "商品69码") @ApiModelProperty(value = "商品标识码") @TableField("goods_yards") @Excel(name = "商品69码") @Excel(name = "商品标识码") private String goodsYards; @Excel(name = "保养周期(天)") ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierOutbound.java
@@ -54,9 +54,6 @@ @TableField("outbound_reason") private String outboundReason; // @ApiModelProperty(value = "商品id") // @TableField("goods_id") // private String goodsId; } ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierWarehousingBatch.java
@@ -54,5 +54,7 @@ @TableField("expiry_date") private LocalDateTime expiryDate; private String goodsId; } ruoyi-system/src/main/java/com/ruoyi/system/query/TClinicGoodsWarehouseQuery.java
New file @@ -0,0 +1,26 @@ package com.ruoyi.system.query; import com.ruoyi.common.core.domain.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "erp诊所入库商品查询参数query") public class TClinicGoodsWarehouseQuery extends BasePage { @ApiModelProperty(value = "商品名称") private String goodsName; @ApiModelProperty(value = "条码") private String goodsIdCode; @ApiModelProperty(value = "国药准字号") private String quasiNumber; @ApiModelProperty(value = "商品类型id ") private String typeId; } ruoyi-system/src/main/java/com/ruoyi/system/query/TClinicOutboundQuery.java
New file @@ -0,0 +1,25 @@ package com.ruoyi.system.query; import com.ruoyi.common.core.domain.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "erp诊所入库查询参数query") public class TClinicOutboundQuery extends BasePage { @ApiModelProperty(value = "出库单号") private String outboundNumber; @ApiModelProperty(value = "操作人") private String userName; @ApiModelProperty(value = "出库时间 2020-02-02 - 2029-02-02") private String time; @ApiModelProperty(value = " 1=报损 2=到期 3=失效 4=召回 5=其他 6=盘点出库 7=购买出库") private Integer type; } ruoyi-system/src/main/java/com/ruoyi/system/query/TClinicWarehouseQuery.java
New file @@ -0,0 +1,25 @@ package com.ruoyi.system.query; import com.ruoyi.common.core.domain.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "erp诊所入库查询参数query") public class TClinicWarehouseQuery extends BasePage { @ApiModelProperty(value = "入库单号") private String warehouseNo; @ApiModelProperty(value = "供应商") private String supplierName; @ApiModelProperty(value = "入库时间 2020-02-02 - 2029-02-02") private String time; @ApiModelProperty(value = "1采购入库 2盘点入库 ") private Integer type; } ruoyi-system/src/main/java/com/ruoyi/system/query/TErpGoodsInventoryQuery.java
@@ -30,7 +30,7 @@ private String batchNumber; @ApiModelProperty(value = "仓库id") @NotBlank(message = "仓库id不能为空") // @NotBlank(message = "仓库id不能为空") private String warehouseId; @ApiModelProperty(value = "有效期预警 出库使用 条件1 其他不传") ruoyi-system/src/main/java/com/ruoyi/system/query/TErpGoodsQuery.java
@@ -13,7 +13,7 @@ @ApiModelProperty(value = "商品名称") private String goodsName; @ApiModelProperty(value = "商品标识码") @ApiModelProperty(value = "商品条码") private String goodsIdCode; @ApiModelProperty(value = "商品类型id") ruoyi-system/src/main/java/com/ruoyi/system/service/TErpClinicWarehousingService.java
@@ -1,17 +1,17 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.system.dto.ClinicOutboundGoodsDto; import com.ruoyi.system.dto.clinicWarehouseGoodsDto; import com.ruoyi.system.model.TErpClinicWarehousing; import com.ruoyi.system.query.TErpGoodsQuery; import com.ruoyi.system.query.TErpInventoryQuery; import com.ruoyi.system.query.ValidityPeriodWarningQuery; import com.ruoyi.system.vo.InventoryDetailVo; import com.ruoyi.system.vo.PageInventoryListVo; import com.ruoyi.system.vo.TErpGoodsVO; import com.ruoyi.system.vo.ValidityPeriodWarningVo; import com.ruoyi.system.model.TErpGoods; import com.ruoyi.system.query.*; import com.ruoyi.system.vo.*; import javax.validation.Valid; import java.util.List; /** @@ -32,4 +32,15 @@ PageInfo<TErpGoodsVO> pageList(TErpGoodsQuery query, SysUser user); PageInfo<TErpClinicWarehousePageListVO> warehousePageList(TClinicWarehouseQuery query, SysUser user, String supplierClinicId); PageInfo<TErpClinicOutboundPageListVO> outboundPageList(TClinicOutboundQuery query, SysUser user, String supplierClinicId); void warehouseGoods(@Valid List<clinicWarehouseGoodsDto> dtos, SysUser user, String supplierClinicId); void outboundGoods(@Valid ClinicOutboundGoodsDto dto, SysUser user, String supplierClinicId); } ruoyi-system/src/main/java/com/ruoyi/system/service/TErpGoodsService.java
@@ -1,15 +1,19 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.system.dto.InventoryDto; import com.ruoyi.system.dto.InventoryGoodsDto; import com.ruoyi.system.model.TErpGoods; import com.ruoyi.system.query.TClinicGoodsWarehouseQuery; import com.ruoyi.system.query.TErpGoodsInventoryQuery; import com.ruoyi.system.query.TErpGoodsQuery; import com.ruoyi.system.vo.OutboundGoodsDetailVo; import com.ruoyi.system.vo.TErpGoodsInventoryVO; import com.ruoyi.system.vo.TErpGoodsVO; import com.ruoyi.system.vo.WarehouseGoodsDetailVo; import javax.validation.Valid; import javax.validation.constraints.NotBlank; @@ -59,4 +63,13 @@ List<TErpGoodsInventoryVO> pageInventoryGoodsList1(String warehouseId, SysUser user); Page<TErpGoods> warehouseGoodsPageList(TClinicGoodsWarehouseQuery query, SysUser user, String supplierClinicId); WarehouseGoodsDetailVo warehouseGoodsDetail(String id); OutboundGoodsDetailVo outboundGoodsDetail(String id); } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpClinicWarehousingServiceImpl.java
@@ -2,19 +2,19 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.system.dto.ClinicOutboundGoodsDto; import com.ruoyi.system.dto.OutboundGoodsNextDto; import com.ruoyi.system.dto.clinicWarehouseGoodsDto; import com.ruoyi.system.mapper.*; import com.ruoyi.system.model.*; import com.ruoyi.system.query.TErpGoodsQuery; import com.ruoyi.system.query.TErpInventoryQuery; import com.ruoyi.system.query.ValidityPeriodWarningQuery; import com.ruoyi.system.query.*; import com.ruoyi.system.service.TErpClinicWarehousingService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.system.vo.InventoryDetailVo; import com.ruoyi.system.vo.PageInventoryListVo; import com.ruoyi.system.vo.TErpGoodsVO; import com.ruoyi.system.vo.ValidityPeriodWarningVo; import com.ruoyi.system.vo.*; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** @@ -112,7 +113,7 @@ TErpClinicWarehousing tErpSupplierWarehousing = erpClinicWarehousingMapper.selectById(tErpSupplierInventoryGoods1.getWarehousingId()); // List<TErpSupplierWarehousingBatch> tErpSupplierWarehousingBatches = erpSupplierWarehousingBatchMapper.selectList(new LambdaQueryWrapper<TErpSupplierWarehousingBatch>().eq(TErpSupplierWarehousingBatch::getWarehousingId, tErpSupplierWarehousing.getId())); // int sum = tErpSupplierWarehousingBatches.stream().mapToInt(TErpSupplierWarehousingBatch::getWarehousingNumber).sum(); String goodsId = tErpSupplierWarehousing.getGoodsId(); String goodsId = tErpSupplierInventoryGoods1.getGoodsId(); TErpGoods goods = erpGoodsMapper.selectById(goodsId); int count = tErpSupplierInventoryGoods1.getInventoryCount() - tErpSupplierInventoryGoods1.getDamagedCount(); BigDecimal multiply = goods.getSalesAmount().multiply(new BigDecimal(count)); @@ -124,7 +125,7 @@ List<TErpClinicOutboundGoods> tErpSupplierOutboundGoods = erpClinicOutboundGoodsMapper.selectList(new LambdaQueryWrapper<TErpClinicOutboundGoods>().eq(TErpClinicOutboundGoods::getOutboundId, tErpSupplierOutbound.getId())); for (TErpClinicOutboundGoods tErpSupplierOutboundGood : tErpSupplierOutboundGoods) { TErpClinicWarehousing tErpSupplierWarehousing = erpClinicWarehousingMapper.selectById(tErpSupplierOutboundGood.getWarehousingId()); String goodsId = tErpSupplierWarehousing.getGoodsId(); String goodsId = tErpSupplierInventoryGoods1.getGoodsId(); TErpGoods goods = erpGoodsMapper.selectById(goodsId); int count = tErpSupplierInventoryGoods1.getInventoryCount() - tErpSupplierInventoryGoods1.getDamagedCount(); BigDecimal multiply = goods.getSalesAmount().multiply(new BigDecimal(count)); @@ -158,7 +159,7 @@ InventoryDetailVo inventoryDetailVo = new InventoryDetailVo(); if(tErpSupplierInventoryGood.getInventoryType()==1){ TErpClinicWarehousing tErpSupplierWarehousing = erpClinicWarehousingMapper.selectById(tErpSupplierInventoryGood.getWarehousingId()); String goodsId = tErpSupplierWarehousing.getGoodsId(); String goodsId = tErpSupplierInventoryGood.getGoodsId(); TErpGoods goods = erpGoodsMapper.selectById(goodsId); inventoryDetailVo.setGoodsName(goods.getGoodsName()); TErpGoodsUnit tErpGoodsUnit = erpGoodsUnitMapper.selectById(goods.getPackingUnitId()); @@ -237,5 +238,124 @@ pageInfo.setRecords(list); return pageInfo; } @Override public PageInfo<TErpClinicWarehousePageListVO> warehousePageList(TClinicWarehouseQuery query, SysUser user, String supplierClinicId) { String time = query.getTime(); String sTime =null; String eTime = null; if(time!=null && !time.isEmpty()){ String[] split = time.split(" - "); sTime = split[0] + " 00:00:00"; eTime = split[1] + " 23:59:59"; } PageInfo<TErpClinicWarehousePageListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<TErpClinicWarehousePageListVO> list = this.baseMapper.warehousePageList(query,pageInfo,user,supplierClinicId,sTime,eTime); if(list.isEmpty()){ return pageInfo; } List<String> collect = list.stream().map(TErpClinicWarehousePageListVO::getId).collect(Collectors.toList()); List<TErpClinicWarehousingBatch> tErpClinicWarehousingBatches = erpClinicWarehousingBatchMapper.selectList(new LambdaQueryWrapper<TErpClinicWarehousingBatch>().in(TErpClinicWarehousingBatch::getWarehousingId, collect)); for (TErpClinicWarehousePageListVO tErpClinicWarehousePageListVO : list) { int size = tErpClinicWarehousingBatches.stream().filter(e -> e.getWarehousingId().equals(tErpClinicWarehousePageListVO.getId())).map(TErpClinicWarehousingBatch::getGoodsId).collect(Collectors.toSet()).size(); tErpClinicWarehousePageListVO.setTypeNum(size); } pageInfo.setRecords(list); return pageInfo; } @Override public PageInfo<TErpClinicOutboundPageListVO> outboundPageList(TClinicOutboundQuery query, SysUser user, String supplierClinicId) { String time = query.getTime(); String sTime =null; String eTime = null; if(time!=null && !time.isEmpty()){ String[] split = time.split(" - "); sTime = split[0] + " 00:00:00"; eTime = split[1] + " 23:59:59"; } PageInfo<TErpClinicOutboundPageListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<TErpClinicOutboundPageListVO> list = this.baseMapper.outboundPageList(query,pageInfo,user,supplierClinicId,sTime,eTime); pageInfo.setRecords(list); return pageInfo; } @Override public void warehouseGoods(List<clinicWarehouseGoodsDto> dtos, SysUser user, String supplierClinicId) { // dtos根据供应商分组 Map<String, List<clinicWarehouseGoodsDto>> collect = dtos.stream().collect(Collectors.groupingBy(clinicWarehouseGoodsDto::getSupplierId)); for (Map.Entry<String, List<clinicWarehouseGoodsDto>> stringListEntry : collect.entrySet()) { String key = stringListEntry.getKey(); List<clinicWarehouseGoodsDto> value = stringListEntry.getValue(); TErpClinicWarehousing tErpClinicWarehousing = new TErpClinicWarehousing(); tErpClinicWarehousing.setClinicId(supplierClinicId); tErpClinicWarehousing.setCreateId(user.getUserId().toString()); tErpClinicWarehousing.setWarehouseNo("G"+ DateUtils.dateTimeNow()); tErpClinicWarehousing.setCreateTime(LocalDateTime.now()); tErpClinicWarehousing.setSupplierId(key); tErpClinicWarehousing.setType(3); this.save(tErpClinicWarehousing); BigDecimal totalPrice = new BigDecimal(0); for (clinicWarehouseGoodsDto dto : value) { TErpClinicWarehousingBatch tErpClinicWarehousingBatch = new TErpClinicWarehousingBatch(); tErpClinicWarehousingBatch.setWarehousingId(tErpClinicWarehousing.getId()); tErpClinicWarehousingBatch.setWarehousingNumber(dto.getPurchaseCount()); tErpClinicWarehousingBatch.setBatchNumber(dto.getBatchNumber()); tErpClinicWarehousingBatch.setProductionDate(dto.getProductionDate()); tErpClinicWarehousingBatch.setExpiryDate(dto.getExpiryDate()); tErpClinicWarehousingBatch.setGoodsId(dto.getId()); TErpGoods goods = erpGoodsMapper.selectById(dto.getId()); tErpClinicWarehousingBatch.setGoodsName(goods.getGoodsName()); tErpClinicWarehousingBatch.setQuasiNumber(goods.getQuasiNumber()); tErpClinicWarehousingBatch.setUnitAmount(dto.getUnitAmount()); tErpClinicWarehousingBatch.setSalesAmount(dto.getSalesAmount()); if(dto.getSalesAmount()==null){ tErpClinicWarehousingBatch.setSalesAmount(goods.getClinicPurchasePrice()); } tErpClinicWarehousingBatch.setPurchaseCount(dto.getPurchaseCount()); erpClinicWarehousingBatchMapper.insert(tErpClinicWarehousingBatch); totalPrice = totalPrice.add(dto.getSalesAmount().multiply(new BigDecimal(dto.getPurchaseCount()))); } tErpClinicWarehousing.setTotalPrice(totalPrice); this.updateById(tErpClinicWarehousing); } } @Override public void outboundGoods(ClinicOutboundGoodsDto dto, SysUser user, String supplierClinicId) { TErpClinicOutbound tErpClinicOutbound = new TErpClinicOutbound(); tErpClinicOutbound.setClinicId(supplierClinicId); tErpClinicOutbound.setCreateId(user.getUserId().toString()); tErpClinicOutbound.setOutboundNumber("G"+ DateUtils.dateTimeNow()); tErpClinicOutbound.setCreateTime(LocalDateTime.now()); tErpClinicOutbound.setOutboundType(dto.getOutboundType()); tErpClinicOutbound.setTotalMoney(dto.getTotalPrice()); tErpClinicOutbound.setOutboundReason(dto.getOutboundReason()); tErpClinicOutbound.setTypeNum(dto.getTypeNum()); erpClinicOutboundMapper.insert(tErpClinicOutbound); List<TErpClinicOutboundGoods> tErpClinicOutboundGoods = new ArrayList<>(); for (OutboundGoodsNextDto outboundGoodsNextDto : dto.getOutboundGoodsNextDtos()) { TErpClinicOutboundGoods tErpClinicOutboundGoods1 = new TErpClinicOutboundGoods(); tErpClinicOutboundGoods1.setOutboundId(tErpClinicOutbound.getId()); String batchId = outboundGoodsNextDto.getBatchId(); TErpClinicWarehousingBatch tErpClinicWarehousingBatch = erpClinicWarehousingBatchMapper.selectById(batchId); tErpClinicOutboundGoods1.setWarehousingId(tErpClinicWarehousingBatch.getWarehousingId()); tErpClinicOutboundGoods1.setWarehousingBatchId(batchId); tErpClinicOutboundGoods1.setOutboundCount(outboundGoodsNextDto.getNum()); tErpClinicOutboundGoods1.setTotalPrice(tErpClinicWarehousingBatch.getUnitAmount().multiply(BigDecimal.valueOf(outboundGoodsNextDto.getNum()))); tErpClinicOutboundGoods1.setGoodsId(tErpClinicWarehousingBatch.getGoodsId()); tErpClinicOutboundGoods.add(tErpClinicOutboundGoods1); erpClinicOutboundGoodsMapper.insert(tErpClinicOutboundGoods1); } } } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpGoodsServiceImpl.java
@@ -2,8 +2,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.BaseModel; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.uuid.IdUtils; @@ -11,17 +13,18 @@ import com.ruoyi.system.dto.InventoryGoodsDto; import com.ruoyi.system.mapper.*; import com.ruoyi.system.model.*; import com.ruoyi.system.query.TClinicGoodsWarehouseQuery; import com.ruoyi.system.query.TErpGoodsInventoryQuery; import com.ruoyi.system.query.TErpGoodsQuery; import com.ruoyi.system.service.TErpGoodsService; import com.ruoyi.system.service.TErpSupplierInventoryGoodsService; import com.ruoyi.system.vo.TErpGoodsInventoryVO; import com.ruoyi.system.vo.TErpGoodsVO; import com.ruoyi.system.vo.*; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; @@ -40,6 +43,9 @@ @Resource private TErpGoodsTypeMapper erpGoodsTypeMapper; @Resource private TErpGoodsMapper erpGoodsMapper; @Resource private TErpGoodsUnitMapper erpGoodsUnitMapper; @@ -319,6 +325,104 @@ } @Override public Page<TErpGoods> warehouseGoodsPageList(TClinicGoodsWarehouseQuery query, SysUser user, String supplierClinicId) { LambdaQueryWrapper<TErpGoods> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(BaseModel::getDisabled,0); wrapper.eq(TErpGoods::getSupplierClinicId,supplierClinicId).eq(TErpGoods::getGoodsSource,2); if(query.getGoodsName()!=null && !query.getGoodsName().isEmpty()){ wrapper.like(TErpGoods::getGoodsName,query.getGoodsName()); } if(query.getGoodsIdCode()!=null && !query.getGoodsIdCode().isEmpty()){ wrapper.eq(TErpGoods::getGoodsIdCode,query.getGoodsIdCode()); } if(query.getQuasiNumber()!=null && !query.getQuasiNumber().isEmpty()){ wrapper.eq(TErpGoods::getQuasiNumber,query.getQuasiNumber()); } if(query.getTypeId()!=null && !query.getTypeId().isEmpty()){ wrapper.eq(TErpGoods::getTypeId,query.getTypeId()); } wrapper.orderByDesc(BaseModel::getCreateTime); Page<TErpGoods> page = this.page(new Page<>(query.getPageNum(), query.getPageSize()), wrapper); return page; } @Override public WarehouseGoodsDetailVo warehouseGoodsDetail(String id) { WarehouseGoodsDetailVo warehouseGoodsDetailVo = new WarehouseGoodsDetailVo(); TErpClinicWarehousing tErpClinicWarehousing = erpClinicWarehousingMapper.selectById(id); warehouseGoodsDetailVo.setCreateTime(tErpClinicWarehousing.getCreateTime()); warehouseGoodsDetailVo.setCreateBy(tErpClinicWarehousing.getCreateBy()); if(tErpClinicWarehousing.getType()==1){ TErpClinicInventory tErpClinicInventory = erpClinicInventoryMapper.selectById(tErpClinicWarehousing.getInventoryId()); warehouseGoodsDetailVo.setInventoryNumber(tErpClinicInventory.getInventoryNumber()); } List<TErpClinicWarehousingBatch> tErpClinicWarehousingBatches = erpClinicWarehousingBatchMapper.selectList(new LambdaQueryWrapper<TErpClinicWarehousingBatch>().eq(TErpClinicWarehousingBatch::getWarehousingId, id)); for (TErpClinicWarehousingBatch tErpClinicWarehousingBatch : tErpClinicWarehousingBatches) { String goodsId = tErpClinicWarehousingBatch.getGoodsId(); TErpGoods tErpGoods = erpGoodsMapper.selectById(goodsId); String packingUnitId = tErpGoods.getPackingUnitId(); TErpGoodsUnit tErpGoodsUnit = erpGoodsUnitMapper.selectById(packingUnitId); tErpClinicWarehousingBatch.setUnitName(tErpGoodsUnit.getUnitName()); } warehouseGoodsDetailVo.setList(tErpClinicWarehousingBatches); return warehouseGoodsDetailVo; } @Override public OutboundGoodsDetailVo outboundGoodsDetail(String id) { OutboundGoodsDetailVo outboundGoodsDetailVo = new OutboundGoodsDetailVo(); TErpClinicOutbound tErpClinicOutbound = erpClinicOutboundMapper.selectById(id); outboundGoodsDetailVo.setCreateTime(tErpClinicOutbound.getCreateTime()); outboundGoodsDetailVo.setCreateBy(tErpClinicOutbound.getCreateBy()); outboundGoodsDetailVo.setOutboundType(tErpClinicOutbound.getOutboundType()); outboundGoodsDetailVo.setOrderNumber(tErpClinicOutbound.getOrderNumber()); if(tErpClinicOutbound.getOutboundType()==6){ TErpClinicInventory tErpClinicInventory = erpClinicInventoryMapper.selectById(tErpClinicOutbound.getInventoryId()); outboundGoodsDetailVo.setInventoryNumber(tErpClinicInventory.getInventoryNumber()); } ArrayList<OutboundGoodsDetailNextVo> tErpClinicOutboundGoods1 = new ArrayList<>(); List<TErpClinicOutboundGoods> tErpClinicOutboundGoods = erpClinicOutboundGoodsMapper.selectList(new LambdaQueryWrapper<TErpClinicOutboundGoods>().eq(TErpClinicOutboundGoods::getOutboundId, id)); for (TErpClinicOutboundGoods outboundGoods : tErpClinicOutboundGoods) { TErpClinicWarehousing tErpClinicWarehousing = erpClinicWarehousingMapper.selectById(outboundGoods.getWarehousingId()); TErpClinicWarehousingBatch tErpClinicWarehousingBatch = erpClinicWarehousingBatchMapper.selectById(outboundGoods.getWarehousingBatchId()); OutboundGoodsDetailNextVo outboundGoodsDetailNextVo = new OutboundGoodsDetailNextVo(); outboundGoodsDetailNextVo.setWarehouseNo(tErpClinicWarehousing.getWarehouseNo()); outboundGoodsDetailNextVo.setGoodsId(outboundGoods.getGoodsId()); TErpGoods goods = erpGoodsMapper.selectById(outboundGoods.getGoodsId()); outboundGoodsDetailNextVo.setGoodsName(goods.getGoodsName()); outboundGoodsDetailNextVo.setTypeId(goods.getTypeId()); TErpGoodsType tErpGoodsType = erpGoodsTypeMapper.selectById(goods.getTypeId()); outboundGoodsDetailNextVo.setTypeName(tErpGoodsType.getTypeName()); outboundGoodsDetailNextVo.setQuasiNumber(goods.getQuasiNumber()); outboundGoodsDetailNextVo.setBatchNumber(tErpClinicWarehousingBatch.getBatchNumber()); TErpGoodsUnit tErpGoodsUnit = erpGoodsUnitMapper.selectById(goods.getPackingUnitId()); outboundGoodsDetailNextVo.setUnitName(tErpGoodsUnit.getUnitName()); List<TErpClinicOutboundGoods> tErpClinicOutboundGoods2 = erpClinicOutboundGoodsMapper.selectList(new LambdaQueryWrapper<TErpClinicOutboundGoods>().eq(TErpClinicOutboundGoods::getWarehousingBatchId, outboundGoods.getWarehousingBatchId())); int sum = tErpClinicOutboundGoods2.stream().mapToInt(TErpClinicOutboundGoods::getOutboundCount).sum(); int count = tErpClinicWarehousingBatch.getPurchaseCount() - sum; outboundGoodsDetailNextVo.setSurplusCount(count); outboundGoodsDetailNextVo.setUnitAmount(tErpClinicWarehousingBatch.getUnitAmount()); outboundGoodsDetailNextVo.setOutboundCount(outboundGoods.getOutboundCount()); outboundGoodsDetailNextVo.setExpiryDate(tErpClinicWarehousingBatch.getExpiryDate()); outboundGoodsDetailNextVo.setTotalAmount(outboundGoodsDetailNextVo.getUnitAmount().multiply(new BigDecimal(outboundGoods.getOutboundCount()))); tErpClinicOutboundGoods1.add(outboundGoodsDetailNextVo); } outboundGoodsDetailVo.setList(tErpClinicOutboundGoods1); return outboundGoodsDetailVo; } @Override public void inventoryGoods(InventoryDto dto, SysUser user) { Integer roleType = user.getRoleType(); String supplierClinicId = null; @@ -457,76 +561,83 @@ TErpClinicWarehousingBatch tErpSupplierWarehousingBatch = erpClinicWarehousingBatchMapper.selectById(inventoryGoodsDto.getId()); String warehousingId = tErpSupplierWarehousingBatch.getWarehousingId(); TErpClinicWarehousing tErpSupplierWarehousing1 = erpClinicWarehousingMapper.selectById(warehousingId); TErpGoods erpGoods = this.getById(tErpSupplierWarehousing1.getGoodsId()); TErpGoods erpGoods = this.getById(tErpSupplierWarehousingBatch.getGoodsId()); // 盘点是盘亏盘盈 赢 if (inventoryGoodsDto.getNum() < inventoryGoodsDto.getInventoryCount()) { // 添加入库信息 tErpSupplierWarehousing.setClinicId(supplierClinicId); tErpSupplierWarehousing.setGoodsId(tErpSupplierWarehousing1.getGoodsId()); tErpSupplierWarehousing.setGoodsName(erpGoods.getGoodsName()); tErpSupplierWarehousing.setPurchaseCount(inventoryGoodsDto.getInventoryCount() - inventoryGoodsDto.getNum()); tErpSupplierWarehousing.setUnitAmount(erpGoods.getSalesAmount()); tErpSupplierWarehousing.setTotalPrice(erpGoods.getSalesAmount().multiply(new BigDecimal(tErpSupplierWarehousing.getPurchaseCount()))); // tErpSupplierWarehousing.setGoodsId(tErpSupplierWarehousing1.getGoodsId()); // tErpSupplierWarehousing.setGoodsName(erpGoods.getGoodsName()); // tErpSupplierWarehousing.setPurchaseCount(inventoryGoodsDto.getInventoryCount() - inventoryGoodsDto.getNum()); // tErpSupplierWarehousing.setUnitAmount(erpGoods.getSalesAmount()); tErpSupplierWarehousing.setTotalPrice(erpGoods.getSalesAmount().multiply(new BigDecimal(inventoryGoodsDto.getInventoryCount() - inventoryGoodsDto.getNum()))); // 当前年月日时分秒 String time = DateUtils.dateTimeNow(); tErpSupplierWarehousing.setWarehouseNo("G" + time); tErpSupplierWarehousing.setType(2); tErpSupplierWarehousing.setInventoryId(tErpSupplierInventory.getId()); erpClinicWarehousingMapper.insert(tErpSupplierWarehousing); // 添加批次信息 TErpSupplierWarehousingBatch tErpSupplierWarehousingBatch1 = new TErpSupplierWarehousingBatch(); TErpClinicWarehousingBatch tErpSupplierWarehousingBatch1 = new TErpClinicWarehousingBatch(); tErpSupplierWarehousingBatch1.setWarehousingId(tErpSupplierWarehousing.getId()); tErpSupplierWarehousingBatch1.setWarehousingNumber(tErpSupplierWarehousing.getPurchaseCount()); tErpSupplierWarehousingBatch1.setWarehousingNumber(inventoryGoodsDto.getInventoryCount() - inventoryGoodsDto.getNum()); tErpSupplierWarehousingBatch1.setBatchNumber(tErpSupplierWarehousingBatch.getBatchNumber()); tErpSupplierWarehousingBatch1.setProductionDate(tErpSupplierWarehousingBatch.getProductionDate()); tErpSupplierWarehousingBatch1.setExpiryDate(tErpSupplierWarehousingBatch.getExpiryDate()); erpSupplierWarehousingBatchMapper.insert(tErpSupplierWarehousingBatch1); tErpSupplierWarehousingBatch1.setGoodsId(tErpSupplierWarehousingBatch.getGoodsId()); tErpSupplierWarehousingBatch1.setQuasiNumber(tErpSupplierWarehousingBatch.getQuasiNumber()); tErpSupplierWarehousingBatch1.setPurchaseCount(tErpSupplierWarehousingBatch.getPurchaseCount()); tErpSupplierWarehousingBatch1.setSalesAmount(tErpSupplierWarehousingBatch.getSalesAmount()); tErpSupplierWarehousingBatch1.setUnitAmount(tErpSupplierWarehousingBatch.getUnitAmount()); erpClinicWarehousingBatchMapper.insert(tErpSupplierWarehousingBatch1); // 添加盘点信息 TErpSupplierInventoryGoods tErpSupplierInventoryGoods = new TErpSupplierInventoryGoods(); TErpClinicInventoryGoods tErpSupplierInventoryGoods = new TErpClinicInventoryGoods(); tErpSupplierInventoryGoods.setInventoryId(tErpSupplierInventory.getId()); tErpSupplierInventoryGoods.setWarehousingId(tErpSupplierWarehousing.getId()); tErpSupplierInventoryGoods.setWarehousingBatchId(tErpSupplierWarehousingBatch1.getId()); tErpSupplierInventoryGoods.setInventoryCount(inventoryGoodsDto.getInventoryCount()); tErpSupplierInventoryGoods.setDamagedCount(inventoryGoodsDto.getDamagedCount()); tErpSupplierInventoryGoods.setInventoryType(1); tErpSupplierInventoryGoods.setGoodsId(tErpSupplierWarehousing1.getGoodsId()); erpSupplierInventoryGoodsMapper.insert(tErpSupplierInventoryGoods); tErpSupplierInventoryGoods.setGoodsId(tErpSupplierWarehousingBatch.getGoodsId()); erpClinicInventoryGoodsMapper.insert(tErpSupplierInventoryGoods); } else { TErpSupplierOutbound tErpSupplierOutbound = new TErpSupplierOutbound(); tErpSupplierOutbound.setWarehouseId(dto.getWarehouseId()); tErpSupplierOutbound.setSupplierId(supplierClinicId); TErpClinicOutbound tErpSupplierOutbound = new TErpClinicOutbound(); // tErpSupplierOutbound.setWarehouseId(dto.getWarehouseId()); // tErpSupplierOutbound.setSupplierId(supplierClinicId); tErpSupplierOutbound.setOutboundType(6); tErpSupplierOutbound.setOutboundNumber("G" + s); int count = inventoryGoodsDto.getNum() - inventoryGoodsDto.getInventoryCount(); tErpSupplierOutbound.setTotalMoney(erpGoods.getSalesAmount().multiply(new BigDecimal(count))); erpSupplierOutboundMapper.insert(tErpSupplierOutbound); tErpSupplierOutbound.setInventoryId(tErpSupplierInventory.getId()); erpClinicOutboundMapper.insert(tErpSupplierOutbound); TErpSupplierOutboundGoods tErpSupplierOutboundGoods = new TErpSupplierOutboundGoods(); TErpClinicOutboundGoods tErpSupplierOutboundGoods = new TErpClinicOutboundGoods(); tErpSupplierOutboundGoods.setOutboundId(tErpSupplierOutbound.getId()); tErpSupplierOutboundGoods.setWarehousingId(tErpSupplierWarehousing1.getId()); tErpSupplierOutboundGoods.setWarehousingBatchId(tErpSupplierWarehousingBatch.getId()); tErpSupplierOutboundGoods.setOutboundCount(count); tErpSupplierOutboundGoods.setTotalPrice(erpGoods.getSalesAmount().multiply(new BigDecimal(count))); erpSupplierOutboundGoodsMapper.insert(tErpSupplierOutboundGoods); erpClinicOutboundGoodsMapper.insert(tErpSupplierOutboundGoods); // 添加盘点信息 TErpSupplierInventoryGoods tErpSupplierInventoryGoods = new TErpSupplierInventoryGoods(); TErpClinicInventoryGoods tErpSupplierInventoryGoods = new TErpClinicInventoryGoods(); tErpSupplierInventoryGoods.setInventoryId(tErpSupplierInventory.getId()); tErpSupplierInventoryGoods.setWarehousingId(tErpSupplierOutbound.getId()); tErpSupplierInventoryGoods.setWarehousingBatchId(tErpSupplierOutboundGoods.getId()); tErpSupplierInventoryGoods.setInventoryCount(inventoryGoodsDto.getInventoryCount()); tErpSupplierInventoryGoods.setDamagedCount(inventoryGoodsDto.getDamagedCount()); tErpSupplierInventoryGoods.setInventoryType(2); tErpSupplierInventoryGoods.setGoodsId(tErpSupplierWarehousing1.getGoodsId()); erpSupplierInventoryGoodsMapper.insert(tErpSupplierInventoryGoods); tErpSupplierInventoryGoods.setGoodsId(tErpSupplierWarehousingBatch.getGoodsId()); erpClinicInventoryGoodsMapper.insert(tErpSupplierInventoryGoods); } } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java
@@ -124,7 +124,7 @@ } List<String> ids = list.stream().map(TErpProcurementVo::getId).collect(Collectors.toList()); List<TErpProcurementGoods> tErpProcurementGoods = erpProcurementGoodsMapper.selectList (new LambdaQueryWrapper<TErpProcurementGoods>().in(TErpProcurementGoods::getProcurementId, ids).eq(TErpProcurementGoods::getSupplierId, supplierClinicId)); (new LambdaQueryWrapper<TErpProcurementGoods>().in(TErpProcurementGoods::getProcurementId, ids)); List<TSysCommission> tSysCommissions =new ArrayList<>(); if(!tErpProcurementGoods.isEmpty()){ List<String> collect = tErpProcurementGoods.stream().map(TErpProcurementGoods::getId).collect(Collectors.toList()); @@ -240,6 +240,13 @@ tErpGoodsVO.setTypeName(tErpGoodsVO.getTypeName()); } } List<String> supplierClinicId = list.stream().filter(e->e.getGoodsSource()==1).map(TErpGoods::getSupplierClinicId).collect(Collectors.toList()); if(!supplierClinicId.isEmpty()){ List<TCrmClinic> crmClinics = crmClinicMapper.selectBatchIds(supplierClinicId); for (TErpGoods tErpGoodsVO : list) { crmClinics.stream().filter(t -> t.getId().equals(tErpGoodsVO.getSupplierClinicId())).findFirst().ifPresent(t -> tErpGoodsVO.setSupplierName(t.getClinicName())); } } pageInfo.setRecords( list); return pageInfo; } ruoyi-system/src/main/java/com/ruoyi/system/vo/OutboundGoodsDetailNextVo.java
New file @@ -0,0 +1,56 @@ package com.ruoyi.system.vo; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.system.model.TErpClinicWarehousingBatch; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; @Data @ApiModel(value = "诊所 入库商品详情二级VO") public class OutboundGoodsDetailNextVo { @ApiModelProperty("入库单号") private String warehouseNo ; @ApiModelProperty("商品名称") private String goodsName; @ApiModelProperty("商品id") private String goodsId; @ApiModelProperty("商品类型") private String typeName; @ApiModelProperty("商品类型id") private String typeId; @ApiModelProperty("国药准字号") private String quasiNumber; @ApiModelProperty("批次号") private String batchNumber; @ApiModelProperty("单位") private String unitName; @ApiModelProperty("剩余数量") private Integer surplusCount; @ApiModelProperty("单价") private BigDecimal unitAmount; @ApiModelProperty("出库数量") private Integer outboundCount; @ApiModelProperty("有效期至") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime expiryDate; @ApiModelProperty("总价") private BigDecimal totalAmount; } ruoyi-system/src/main/java/com/ruoyi/system/vo/OutboundGoodsDetailVo.java
New file @@ -0,0 +1,36 @@ package com.ruoyi.system.vo; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.system.model.TErpClinicWarehousingBatch; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; import java.util.List; @Data @ApiModel(value = "诊所 入库商品详情VO") public class OutboundGoodsDetailVo { @ApiModelProperty("出库类型 1=报损 2=到期 3=失效 4=召回 5=其他 6=盘点出库 7=购买出库") private Integer outboundType; @ApiModelProperty(value = "发起人") private String createBy; @ApiModelProperty(value = "操作时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime createTime; @ApiModelProperty(value = "盘点单号") private String inventoryNumber; @ApiModelProperty(value = "订单号") private String orderNumber; @ApiModelProperty(value = "出库商品") private List<OutboundGoodsDetailNextVo> list; } ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpClinicOutboundPageListVO.java
New file @@ -0,0 +1,43 @@ package com.ruoyi.system.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; @Data @ApiModel(value = "诊所erp出库列表VO") public class TErpClinicOutboundPageListVO { @ApiModelProperty(value = "出库id") private String id; @ApiModelProperty(value = "出库单号") private String outboundNumber; @ApiModelProperty(value = "订单编号") private String orderNumber; @ApiModelProperty("品种数") private Integer typeNum; @ApiModelProperty(value = "总价") private Double allTotalPrice; @ApiModelProperty(value = "操作人") private String userName; @ApiModelProperty(value = "出库时间") private LocalDateTime createTime; @ApiModelProperty(value = "出库类型 1=报损 2=到期 3=失效 4=召回 5=其他 6=盘点出库 7=购买出库") private Integer outboundType; } ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpClinicWarehousePageListVO.java
New file @@ -0,0 +1,42 @@ package com.ruoyi.system.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; import java.util.List; @Data @ApiModel(value = "诊所erp入库列表VO") public class TErpClinicWarehousePageListVO { @ApiModelProperty(value = "入库id") private String id; @ApiModelProperty(value = "入库单号") private String warehouseNo; private String supplierId; @ApiModelProperty(value = "供应商名称") private String supplierName; @ApiModelProperty(value = "采购单号") private String procurementCode; @ApiModelProperty("品种数") private Integer typeNum; @ApiModelProperty(value = "总价") private Double allTotalPrice; @ApiModelProperty(value = "入库时间") private LocalDateTime warehouseTime; @ApiModelProperty(value = "入库类型 1采购 2盘点") private Integer type; } ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpGoodsInventoryVO.java
@@ -34,7 +34,7 @@ @ApiModelProperty(value = "国药准字号") private String quasiNumber; @ApiModelProperty(value = "商品标识码") @ApiModelProperty(value = "商品条码") private String goodsIdCode; @ApiModelProperty(value = "批次号") @@ -60,5 +60,8 @@ private Integer goodsSource; @ApiModelProperty(value = "供应商id") private String supplierId; } ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpMaintenanceReminderDetailVo.java
@@ -24,7 +24,7 @@ @ApiModelProperty(value = "国药准字号") private String quasiNumber; @ApiModelProperty("商品标识码") @ApiModelProperty("商品条码") @TableField("goods_id_code") private String goodsIdCode; ruoyi-system/src/main/java/com/ruoyi/system/vo/WarehouseGoodsDetailVo.java
New file @@ -0,0 +1,27 @@ package com.ruoyi.system.vo; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.system.model.TErpClinicWarehousingBatch; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; import java.util.List; @Data @ApiModel(value = "诊所 入库商品详情VO") public class WarehouseGoodsDetailVo { @ApiModelProperty(value = "发起人") private String createBy; @ApiModelProperty(value = "发起时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime createTime; @ApiModelProperty(value = "盘点单号") private String inventoryNumber; @ApiModelProperty(value = "入库商品") private List<TErpClinicWarehousingBatch> list; } ruoyi-system/src/main/java/com/ruoyi/system/wxPay/config/WxConfig.java
@@ -13,7 +13,7 @@ * * @author lihen */ @Configuration //@Configuration public class WxConfig { private final WeixinPayProperties weixinPayProperties; ruoyi-system/src/main/resources/mapper/system/TErpClinicWarehousingMapper.xml
@@ -83,11 +83,11 @@ <select id="pageList" resultType="com.ruoyi.system.vo.TErpGoodsVO"> select * from ( select <include refid="Base_Column_List1"/> COALESCE(sum(t2.goods_count), 0) - COALESCE(sum(t3.outbound_count), 0) as allNum, SUM(t2.unit_amount * (t2.goods_count - COALESCE(t3.outbound_count, 0))) as allTotalPrice, COALESCE(sum(t2.purchase_count), 0) - COALESCE(sum(t3.outbound_count), 0) as allNum, SUM(t2.unit_amount * (t2.purchase_count - COALESCE(t3.outbound_count, 0))) as allTotalPrice, COALESCE(sum(t3.outbound_count), 0) as outNum from t_erp_goods t1 left join t_erp_clinic_warehousing t2 on t1.id = t2.goods_id from t_erp_goods t1 left join t_erp_clinic_warehousing_batch t2 on t1.id = t2.goods_id left join t_erp_clinic_outbound_goods t3 on t2.id = t3.warehousing_id where t1.disabled = 0 and t2.id is not null <if test="query.goodsName != null and query.goodsName != ''"> @@ -119,4 +119,43 @@ order by o.create_time desc </select> <select id="warehousePageList" resultType="com.ruoyi.system.vo.TErpClinicWarehousePageListVO"> select t1.id,t1.warehouse_no,t2.supplier_name,t3.procurement_code,t3.pay_money allTotalPrice,t1.create_time warehouseTime,t1.type from t_erp_clinic_warehousing t1 left join t_erp_procurement t3 on t1.procurement_id = t3.id left join t_crm_supplier t2 on t3.supplier_id = t2.id where t1.disabled = 0 and t1.clinic_id = #{query.supplierClinicId} <if test="query.warehouseNo != null and query.warehouseNo != ''"> and t1.warehouse_no like concat('%',#{query.warehouseNo},'%') </if> <if test="query.supplierName != null and query.supplierName != ''"> and t2.supplier_name like concat('%',#{query.supplierName},'%') </if> <if test="sTime != null"> and t1.create_time between #{sTime} and #{eTime} </if> <if test="query.type != null"> and t1.type = #{query.type} </if> order by t1.create_time desc </select> <select id="outboundPageList" resultType="com.ruoyi.system.vo.TErpClinicOutboundPageListVO"> select t1.id,t1.outbound_number,t1.order_number,t1.total_money allTotalPrice,t1.create_time ,t1.outbound_type,t2.user_name,t1.type_num from t_erp_clinic_outbound t1 left join sys_user t2 on t1.create_by = t2.user_id where t1.disabled = 0 and t1.clinic_id = #{query.supplierClinicId} <if test="query.outboundNumber != null and query.outboundNumber != ''"> and t1.outbound_number like concat('%',#{query.outboundNumber},'%') </if> <if test="sTime != null"> and t1.create_time between #{sTime} and #{eTime} </if> <if test="query.userName != null and query.userName !=''"> and t2.user_name like concat('%',#{query.userName},'%') </if> <if test="type != null"> and t1.outbound_type = #{query.type} </if> order by t1.create_time desc </select> </mapper> ruoyi-system/src/main/resources/mapper/system/TErpGoodsMapper.xml
@@ -185,7 +185,7 @@ LEFT JOIN t_erp_goods t3 on t2.goods_id = t3.id LEFT JOIN t_crm_supplier t4 on t3.supplier_clinic_id = t4.id LEFT JOIN t_erp_clinic_outbound_goods t5 on t5.warehousing_batch_id =t1.id where t2.disabled = 0 and t2.warehouse_id = #{query.warehouseId} where t2.disabled = 0 and t2.clinic_id =#{supplierClinicId} <if test="query.type != null and query.type ==1"> and #{time} > t1.expiry_date </if> ruoyi-system/src/main/resources/mapper/system/TErpProcurementMapper.xml
@@ -40,7 +40,7 @@ left JOIN t_erp_procurement_goods t2 on t1.id = t2.procurement_id LEFT JOIN t_crm_supplier t3 on t1.supplier_id = t3.id left JOIN sys_user t4 on t1.create_id = t4.user_id where t1.disabled = 0 where t1.disabled = 0 and t1.status !=1 <if test="user.roleType !=null and user.roleType==4"> and t2.supplier_id =#{supplierClinicId} </if> @@ -59,6 +59,7 @@ <if test="sTime != null"> and t1.create_time between #{sTime} and #{eTime} </if> group by t1.id </select> <select id="inventoryNotEnoughList" resultType="com.ruoyi.system.vo.TErpGoodsVO">