From 092a98a583c4fe822a3eb4c4dac086f84b16189c Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期五, 26 九月 2025 17:58:32 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-system/src/main/java/com/ruoyi/system/vo/WarehouseGoodsDetailVo.java | 27 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java | 78 + ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpClinicWarehousingMapper.java | 22 ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicWarehousing.java | 31 ruoyi-system/src/main/java/com/ruoyi/system/service/TErpProcurementService.java | 4 ruoyi-system/src/main/java/com/ruoyi/system/model/TErpGoods.java | 18 ruoyi-system/src/main/java/com/ruoyi/system/query/TErpGoodsQuery.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpGoodsInfoSaveDto.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierOutbound.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpMaintenanceReminderDetailVo.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/dto/InventoryDto.java | 1 ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpClinicWarehousePageListVO.java | 42 ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpGoodsAddDto.java | 5 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddProcurementDto.java | 5 ruoyi-system/src/main/java/com/ruoyi/system/vo/OutboundGoodsDetailNextVo.java | 56 + ruoyi-system/src/main/java/com/ruoyi/system/vo/OutboundGoodsDetailVo.java | 36 ruoyi-system/src/main/java/com/ruoyi/system/wxPay/config/WxConfig.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/dto/UpdateStatusProcurementDto.java | 38 ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpClinicGoodsUpdateDto.java | 133 +++ ruoyi-system/src/main/java/com/ruoyi/system/query/TClinicOutboundQuery.java | 25 ruoyi-system/src/main/java/com/ruoyi/system/query/TErpGoodsInventoryQuery.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpGoodsServiceImpl.java | 326 +++++++ ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicInventoryGoods.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/importExcel/TErpGoodsExcel.java | 4 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpGoodsMapper.java | 7 ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementVo.java | 4 ruoyi-system/src/main/resources/mapper/system/TErpClinicWarehousingMapper.xml | 131 ++ ruoyi-system/src/main/java/com/ruoyi/system/query/TClinicWarehouseQuery.java | 25 ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpClinicOutboundPageListVO.java | 43 ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicOutbound.java | 8 ruoyi-system/src/main/resources/mapper/system/TErpProcurementMapper.xml | 9 ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpGoodsSetCommissionDto.java | 23 ruoyi-system/src/main/java/com/ruoyi/system/dto/clinicWarehouseGoodsDto.java | 44 + ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpClinicWarehousingServiceImpl.java | 345 +++++++ ruoyi-system/src/main/java/com/ruoyi/system/dto/ClinicOutboundGoodsDto.java | 39 ruoyi-system/src/main/java/com/ruoyi/system/vo/DetailProcurementVO.java | 33 ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierWarehousingBatch.java | 2 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java | 164 +++ ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpGoodsInventoryVO.java | 8 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpClinicWarehousingController.java | 275 ++++++ ruoyi-system/src/main/java/com/ruoyi/system/service/TErpGoodsService.java | 22 ruoyi-system/src/main/java/com/ruoyi/system/query/TClinicGoodsWarehouseQuery.java | 26 ruoyi-system/src/main/java/com/ruoyi/system/vo/DetailProcurementNextVO.java | 53 + ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpClinicGoodsAddDto.java | 132 +++ ruoyi-system/src/main/resources/mapper/system/TErpGoodsMapper.xml | 86 + ruoyi-system/src/main/java/com/ruoyi/system/service/TErpClinicWarehousingService.java | 30 ruoyi-system/src/main/java/com/ruoyi/system/dto/UpdateStatusProcurementLastDto.java | 25 ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicOutboundGoods.java | 4 ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierWarehousing.java | 3 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java | 167 +++ ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysOrderController.java | 17 ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicWarehousingBatch.java | 30 52 files changed, 2,535 insertions(+), 87 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpClinicWarehousingController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpClinicWarehousingController.java index 6cc76ad..d71dad2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpClinicWarehousingController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpClinicWarehousingController.java @@ -1,8 +1,30 @@ package com.ruoyi.web.controller.api; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +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.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.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; +import java.util.stream.Collectors; /** * <p> @@ -14,8 +36,257 @@ */ @RestController @RequestMapping("/t-erp-clinic-warehousing") +@Api(tags = "诊所库存管理") public class TErpClinicWarehousingController { + private final TErpClinicWarehousingService erpClinicWarehousingService; + private final TErpGoodsService erpGoodsService; + private final TokenService tokenService; + private final TCrmClinicService crmClinicService; + private final TCrmSupplierService crmSupplierService; + + @Autowired + public TErpClinicWarehousingController(TErpClinicWarehousingService erpClinicWarehousingService, TErpGoodsService erpGoodsService, TokenService tokenService, + TCrmClinicService crmClinicService,TCrmSupplierService crmSupplierService) { + this.erpClinicWarehousingService = erpClinicWarehousingService; + this.erpGoodsService = erpGoodsService; + this.tokenService = tokenService; + this.crmClinicService = crmClinicService; + this.crmSupplierService = crmSupplierService; + + } + + + + + /** + * 获取erp问题上报管理列表 + */ + @ApiOperation(value = "展示获取库存分页列表") + @PostMapping(value = "/pageList") + public R<PageInfo<TErpGoodsVO>> pageList(@RequestBody TErpGoodsQuery query) { + + SysUser user = tokenService.getLoginUser().getUser(); + Integer roleType = user.getRoleType(); + if(roleType == 4){ + // 供应商 + TCrmSupplier crmSupplier = crmSupplierService.getOne(Wrappers.lambdaQuery(TCrmSupplier.class) + .eq(TCrmSupplier::getUserId, user.getUserId()) + .last("LIMIT 1")); + query.setSupplierClinicId(crmSupplier.getId()); + } + if(roleType == 5){ + // 诊所 + TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) + .eq(TCrmClinic::getUserId, user.getUserId()) + .last("LIMIT 1")); + query.setSupplierClinicId(crmClinic.getId()); + } + + return R.ok(erpClinicWarehousingService.pageList(query,user)); + } + + + + @ApiOperation(value = "诊所 盘点") + @PostMapping(value = "/pageInventoryList") + public R<PageInfo<PageInventoryListVo>> pageInventoryList(@RequestBody TErpInventoryQuery query) { + SysUser user = tokenService.getLoginUser().getUser(); + return R.ok(erpClinicWarehousingService.pageInventoryList(query,user)); + } + + + + + + @ApiOperation(value = "诊所 盘点详情") + @GetMapping(value = "/detailInventory/{id}") + public R<List<InventoryDetailVo>> detailInventory(@PathVariable String id) { + SysUser user = tokenService.getLoginUser().getUser(); + return R.ok(erpClinicWarehousingService.detailInventory(id,user)); + } + + + + @ApiOperation(value = "诊所 盘点 出库 商品选择") + @PostMapping(value = "/pageInventoryGoodsPageList") + public R<PageInfo<TErpGoodsInventoryVO>> pageInventoryGoodsPageList(@RequestBody @Valid TErpGoodsInventoryQuery query) { + SysUser user = tokenService.getLoginUser().getUser(); + return R.ok(erpGoodsService.pageInventoryGoodsPageList1(query,user)); + } + + + + + @ApiOperation(value = "诊所 有效期预警商品选择") + @GetMapping(value = "/pageInventoryGoodsList") + public R<List<TErpGoodsInventoryVO>> pageInventoryGoodsList(String warehouseId,@RequestParam(required = false)String batchId) { + SysUser user = tokenService.getLoginUser().getUser(); + List<TErpGoodsInventoryVO> tErpGoodsInventoryVOS = erpGoodsService.pageInventoryGoodsList1(warehouseId, user); + if(batchId!=null && !"".equals(batchId)){ + tErpGoodsInventoryVOS = tErpGoodsInventoryVOS.stream().filter(e->e.getId().equals(batchId)).collect(Collectors.toList()); + } + return R.ok(tErpGoodsInventoryVOS); + } + + + + + + @ApiOperation(value = "诊所 确认盘点") + @PostMapping(value = "/inventoryGoods") + public R<?> inventoryGoods(@RequestBody @Valid InventoryDto dto) { + SysUser user = tokenService.getLoginUser().getUser(); + erpGoodsService.inventoryGoods1(dto,user); + return R.ok(); + } + + + + + @ApiOperation(value = "诊所 有效期预警") + @PostMapping(value = "/validityPeriodWarning") + public R<PageInfo<ValidityPeriodWarningVo>> validityPeriodWarning(@RequestBody ValidityPeriodWarningQuery query) { + SysUser user = tokenService.getLoginUser().getUser(); + PageInfo<ValidityPeriodWarningVo> pageInfo =erpClinicWarehousingService.validityPeriodWarning(query,user); + return R.ok(pageInfo); + } + + + + + /** + * 获取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(); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java index 175acf9..2e488d6 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java @@ -9,16 +9,17 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.AjaxResult; +import com.ruoyi.common.core.domain.BaseModel; +import com.ruoyi.common.core.domain.BasePage; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.utils.WebUtils; import com.ruoyi.framework.web.service.TokenService; -import com.ruoyi.system.dto.TErpGoodsAddDto; -import com.ruoyi.system.dto.TErpGoodsInfoSaveDto; -import com.ruoyi.system.dto.TErpGoodsUpdateStatusDto; +import com.ruoyi.system.dto.*; import com.ruoyi.system.importExcel.TErpGoodsExcel; import com.ruoyi.system.model.*; import com.ruoyi.system.query.TErpGoodsQuery; @@ -43,6 +44,7 @@ import java.net.URLEncoder; import java.time.LocalDateTime; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -93,7 +95,7 @@ /** * 获取erp问题上报管理列表 */ - @ApiOperation(value = "供应商获取商品分页列表") + @ApiOperation(value = "供应商 诊所 获取商品分页列表") @PostMapping(value = "/pageList") public R<PageInfo<TErpGoodsVO>> pageList(@RequestBody TErpGoodsQuery query) { SysUser user = tokenService.getLoginUser().getUser(); @@ -114,6 +116,36 @@ } return R.ok(erpGoodsService.pageList(query,user)); } + /** + * 获取erp问题上报管理列表 + */ + @ApiOperation(value = "诊所 一键获取商品分页列表") + @PostMapping(value = "/pageAddList") + public R<Page<TErpGoods>> pageAddList(BasePage query) { + SysUser user = tokenService.getLoginUser().getUser(); + Integer roleType = user.getRoleType(); + String clinicSupplierId=null; + if(roleType == 5){ + // 诊所 + TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) + .eq(TCrmClinic::getUserId, user.getUserId()) + .last("LIMIT 1")); + clinicSupplierId = crmClinic.getId(); + } + Page<TErpGoods> tErpGoodsPage = new Page<>(query.getPageNum(), query.getPageSize()); + + Page<TErpGoods> page = erpGoodsService.page(tErpGoodsPage, new LambdaQueryWrapper<TErpGoods>().eq(TErpGoods::getGoodsSource, 1).eq(BaseModel::getDisabled, 0).isNotNull(TErpGoods::getPlatformCommissionPrice).last("and (NOT FIND_IN_SET(" + clinicSupplierId + ",clinic_ids) or clinic_ids is null)")); + for (TErpGoods record : page.getRecords()) { + TCrmSupplier byId = crmSupplierService.getById(record.getSupplierClinicId()); + record.setSupplierName(byId.getSupplierName()); + + + TErpGoodsType byId1 = erpGoodsTypeService.getById(record.getTypeId()); + record.setTypeName(byId1.getTypeName()); + + } + return R.ok(page); + } @@ -121,7 +153,7 @@ @PostMapping(value = "/add") public R<Boolean> add(@Validated @RequestBody TErpGoodsAddDto dto) { SysUser user = tokenService.getLoginUser().getUser(); - if (erpGoodsService.isExit(dto.getGoodsIdCode(), dto.getQuasiNumber())) { + if (erpGoodsService.isExit(dto.getGoodsIdCode(), dto.getQuasiNumber(),null)) { return R.fail("erp商品已存在"); } Integer roleType = user.getRoleType(); @@ -151,11 +183,111 @@ goods.setGoodsName(dto.getGoodsName()); return R.ok(erpGoodsService.save(goods)); } + @ApiOperation(value = "诊所添加商品") + @PostMapping(value = "/clinicAdd") + public R<Boolean> clinicAdd(@Validated @RequestBody TErpClinicGoodsAddDto dto) { + SysUser user = tokenService.getLoginUser().getUser(); + if (erpGoodsService.isExit(dto.getGoodsIdCode(), dto.getQuasiNumber(),null)) { + return R.fail("erp商品已存在"); + } + Integer roleType = user.getRoleType(); + TErpGoods goods = new TErpGoods(); + BeanUtils.copyProperties(dto,goods); + if(roleType == 5){ + // 诊所 + TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) + .eq(TCrmClinic::getUserId, user.getUserId()) + .last("LIMIT 1")); + goods.setSupplierClinicId(crmClinic.getId()); + goods.setGoodsSource(2); + } + goods.setCreateId(user.getUserId().toString()); + goods.setGoodsIdCode(dto.getGoodsIdCode()); + return R.ok(erpGoodsService.save(goods)); + } - @ApiOperation(value = "供应商删除商品") + @ApiOperation(value = "诊所编辑商品") + @PostMapping(value = "/clinicUpdate") + public R<Boolean> clinicUpdate(@Validated @RequestBody TErpClinicGoodsUpdateDto dto) { + SysUser user = tokenService.getLoginUser().getUser(); + if (erpGoodsService.isExit(dto.getGoodsIdCode(), dto.getQuasiNumber(),dto.getId())) { + return R.fail("erp商品已存在"); + } + Integer roleType = user.getRoleType(); + TErpGoods goods = new TErpGoods(); + BeanUtils.copyProperties(dto,goods); + if(roleType == 5){ + // 诊所 + TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) + .eq(TCrmClinic::getUserId, user.getUserId()) + .last("LIMIT 1")); + goods.setSupplierClinicId(crmClinic.getId()); + goods.setGoodsSource(2); + } + goods.setCreateId(user.getUserId().toString()); + goods.setGoodsIdCode(dto.getGoodsIdCode()); + goods.setId(dto.getId()); + return R.ok(erpGoodsService.updateById(goods)); + } + + @ApiOperation(value = "供应商/诊所 删除商品") @DeleteMapping(value = "/delete/{id}") public R<Boolean> delete(@PathVariable String id) { - return R.ok(erpGoodsService.removeById(id)); + TErpGoods goods = erpGoodsService.getById(id); + SysUser user = tokenService.getLoginUser().getUser(); + String cid = null; + + if(user.getRoleType() == 5){ + // 诊所 + TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) + .eq(TCrmClinic::getUserId, user.getUserId()) + .last("LIMIT 1")); + cid = crmClinic.getId(); + if(goods.getGoodsSource()==1){ + String clinicIds = goods.getClinicIds(); + String[] split = clinicIds.split(","); + // clinicIds 移除cid + ArrayList<String> strings = new ArrayList<>(); + for (String s : split) { + if(!s.equals(cid)){ + strings.add(s); + } + } + goods.setClinicIds(String.join(",",strings)); + erpGoodsService.updateById(goods); + }else { + erpGoodsService.removeById(id); + } + return R.ok(); + } + erpGoodsService.removeById(id); + return R.ok(); + } + + @ApiOperation(value = "诊所 一键添加商品") + @PostMapping(value = "/addSupplierGoods") + public R<Boolean> addSupplierGoods(String goodsIds) { + List<String> split = Arrays.asList(goodsIds.split(",")); + List<TErpGoods> list = erpGoodsService.list(new LambdaQueryWrapper<TErpGoods>().in(TErpGoods::getId, split)); + SysUser user = tokenService.getLoginUser().getUser(); + String cid = null; + + if(user.getRoleType() == 5){ + TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) + .eq(TCrmClinic::getUserId, user.getUserId()) + .last("LIMIT 1")); + cid = crmClinic.getId(); + for (TErpGoods goods : list) { + String clinicIds = goods.getClinicIds(); + List<String> split1 = Arrays.asList(clinicIds.split(",")); + if(!split1.contains(cid)){ + split1.add(cid); + goods.setClinicIds(String.join(",",split1)); + } + } + erpGoodsService.updateBatchById(list); + } + return R.ok(); } @@ -306,7 +438,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) { @@ -347,10 +479,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()); @@ -467,5 +599,20 @@ } + + + @ApiOperation(value = "平台设置分佣") + @PostMapping(value = "/setCommission") + public R<Boolean> setCommission(@RequestBody @Valid TErpGoodsSetCommissionDto dto) { + + SysUser user = tokenService.getLoginUser().getUser(); + if(user.getRoleType()==1){ + TErpGoods goods = erpGoodsService.getById(dto.getId()); + goods.setClinicPurchasePrice(BigDecimal.valueOf(dto.getClinicPurchasePrice()).setScale(2,RoundingMode.HALF_UP)); + goods.setPlatformCommissionPrice(BigDecimal.valueOf(dto.getPlatformCommissionPrice()).setScale(2,RoundingMode.HALF_UP)); + erpGoodsService.updateById( goods); + } + return R.ok(); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java index be6b761..1cf9c4e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java @@ -1,32 +1,36 @@ package com.ruoyi.web.controller.api; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.lkl.laop.sdk.request.V3LabsTransPreorderRequest; import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.core.domain.BaseModel; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.utils.DateUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.dto.AddProcurementDto; -import com.ruoyi.system.model.TCrmClinic; -import com.ruoyi.system.model.TCrmSupplier; -import com.ruoyi.system.model.TErpGoods; +import com.ruoyi.system.dto.UpdateStatusProcurementDto; +import com.ruoyi.system.dto.UpdateStatusProcurementLastDto; +import com.ruoyi.system.model.*; import com.ruoyi.system.query.TErpGoodsQuery; import com.ruoyi.system.query.TErpProcurementQuery; -import com.ruoyi.system.service.TCrmClinicService; -import com.ruoyi.system.service.TErpProcurementService; -import com.ruoyi.system.service.TErpSupplierWarehousingService; -import com.ruoyi.system.vo.TErpGoodsVO; -import com.ruoyi.system.vo.TErpProcurementDetailVo; -import com.ruoyi.system.vo.TErpProcurementVo; +import com.ruoyi.system.service.*; +import com.ruoyi.system.vo.*; import com.ruoyi.web.core.config.LakalaConfig; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * <p> @@ -45,13 +49,25 @@ private final TErpProcurementService erpProcurementService; private final TokenService tokenService; private final TCrmClinicService crmClinicService; + private final TErpProcurementGoodsService erpProcurementGoodsService; + 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) { + public TErpProcurementController(TErpProcurementService erpProcurementService, TokenService tokenService,TCrmClinicService crmClinicService,TErpProcurementGoodsService erpProcurementGoodsService + , TErpGoodsService erpGoodsService,TErpClinicWarehousingService erpClinicWarehousingService,TErpClinicWarehousingBatchService erpClinicWarehousingBatchService, + TCrmSupplierService crmSupplierService) { this.erpProcurementService = erpProcurementService; this.tokenService = tokenService; this.crmClinicService = crmClinicService; + this.erpProcurementGoodsService = erpProcurementGoodsService; + this.erpGoodsService = erpGoodsService; + this.erpClinicWarehousingService = erpClinicWarehousingService; + this.erpClinicWarehousingBatchService = erpClinicWarehousingBatchService; + this.crmSupplierService = crmSupplierService; } @@ -112,10 +128,136 @@ .last("LIMIT 1")); clinicSupplierId = crmClinic.getId(); } - return R.ok(erpProcurementService.addProcurement(clinicSupplierId,user,dtos)); + erpProcurementService.addProcurement(clinicSupplierId, user, dtos); + return R.ok(); } + + @ApiOperation(value = "采购详情") + @GetMapping(value = "/detailProcurement/{id}") + public R<DetailProcurementVO> detailProcurement(@PathVariable String id) { + SysUser user = tokenService.getLoginUser().getUser(); + Integer roleType = user.getRoleType(); + String clinicSupplierId=null; + if(roleType == 5){ + // 诊所 + TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) + .eq(TCrmClinic::getUserId, user.getUserId()) + .last("LIMIT 1")); + clinicSupplierId = crmClinic.getId(); + } + + return R.ok( erpProcurementService.detailProcurement(clinicSupplierId, user, id)); + } + @ApiOperation(value = "采购草稿") + @GetMapping(value = "/getProcurementDraft") + public R<ArrayList<DetailProcurementNextVO>> getProcurementDraft() { + SysUser user = tokenService.getLoginUser().getUser(); + Integer roleType = user.getRoleType(); + String clinicSupplierId=null; + if(roleType == 5){ + // 诊所 + TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) + .eq(TCrmClinic::getUserId, user.getUserId()) + .last("LIMIT 1")); + clinicSupplierId = crmClinic.getId(); + } + ArrayList<DetailProcurementNextVO> detailProcurementNextVOS = new ArrayList<>(); + List<TErpProcurement> list1 = erpProcurementService.list(new LambdaQueryWrapper<TErpProcurement>().eq(TErpProcurement::getStatus, 1).orderByDesc(BaseModel::getCreateTime)); + if(list1.isEmpty()){ + return R.ok(detailProcurementNextVOS); + } + String id = list1.get(0).getId(); + List<TErpProcurementGoods> list = erpProcurementGoodsService.list(new LambdaQueryWrapper<TErpProcurementGoods>().eq(TErpProcurementGoods::getProcurementId, id)); + + for (TErpProcurementGoods tErpProcurementGoods : list) { + DetailProcurementNextVO detailProcurementNextVO = new DetailProcurementNextVO(); + detailProcurementNextVO.setId(tErpProcurementGoods.getId()); + detailProcurementNextVO.setGoodsName(tErpProcurementGoods.getGoodsName()); + detailProcurementNextVO.setQuasiNumber(tErpProcurementGoods.getQuasiNumber()); + detailProcurementNextVO.setPackingUnitName(tErpProcurementGoods.getUnitName()); + detailProcurementNextVO.setSalesAmount(tErpProcurementGoods.getSalesAmount()); + detailProcurementNextVO.setNum(tErpProcurementGoods.getPurchaseCount()); + detailProcurementNextVO.setTotalPrice(tErpProcurementGoods.getTotalPrice()); + detailProcurementNextVO.setSupplierName(tErpProcurementGoods.getSupplierName()); + detailProcurementNextVO.setUnitName(tErpProcurementGoods.getUnitName()); + detailProcurementNextVO.setPurchasePrice(tErpProcurementGoods.getPurchasePrice()); + detailProcurementNextVOS.add(detailProcurementNextVO); + } + return R.ok(detailProcurementNextVOS); + } + + @ApiOperation(value = "采购详情入库") + @PostMapping(value = "/updateStatusProcurement") + public R<DetailProcurementVO> updateStatusProcurement(@RequestParam @Valid UpdateStatusProcurementLastDto dto) { + SysUser user = tokenService.getLoginUser().getUser(); + Integer roleType = user.getRoleType(); + String clinicSupplierId=null; + if(roleType == 5){ + // 诊所 + TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) + .eq(TCrmClinic::getUserId, user.getUserId()) + .last("LIMIT 1")); + clinicSupplierId = crmClinic.getId(); + } + TErpProcurement erpProcurement = erpProcurementService.getById(dto.getId()); + if(!erpProcurement.getClinicId().equals(clinicSupplierId)){ + return R.fail("无权限操作"); + } + if(erpProcurement.getStatus()!=4){ + return R.fail("目前状态无法入库"); + } + erpProcurement.setStatus(5); + erpProcurementService.updateById(erpProcurement); + + 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()); + TErpClinicWarehousingBatch tErpClinicWarehousingGoods = new TErpClinicWarehousingBatch(); + tErpClinicWarehousingGoods.setWarehousingId(tErpClinicWarehousing.getId()); + 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); + + } + return R.ok(); + } + + + + + + + + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysOrderController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysOrderController.java index 66e7184..223db89 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysOrderController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysOrderController.java @@ -126,6 +126,10 @@ String amount = String.valueOf(erpProcurement.getPayMoney().multiply(new BigDecimal("100")).intValue()); TCrmSupplier supplier = crmSupplierService.getById(erpProcurement.getSupplierId()); + String trans_type ="41"; + if("WECHAT".equals(type)){ + trans_type= "51"; + } String apiPath = "sit/api/v3/labs/trans/preorder"; @@ -144,7 +148,7 @@ "\t\t\"settle_type\": \"1\",\n" + "\t\t\"total_amount\": " + amount + ",\n" + "\t\t\"account_type\": \"" + type + "\",\n" + - "\t\t\"trans_type\": \"41\"\n" + + "\t\t\"trans_type\": \""+trans_type+"\"\n" + "\t}\n" + "}"; String authorization = getAuthorization(body); @@ -164,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); @@ -257,7 +261,7 @@ } HashMap<String, Object> map1 = new HashMap<>(); //TODO hzt - map1.put("recv_no", "822641048160MMJ"); + map1.put("recv_no", "SR2024000144253"); // 手续费 BigDecimal bigDecimal = allMoney.multiply(new BigDecimal("0.038")).setScale(2, RoundingMode.HALF_UP); payMoney = payMoney.subtract(bigDecimal); @@ -409,7 +413,6 @@ return jsonObject; } } - return null; } @@ -419,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 { // 先退分账 在退订单 @@ -468,7 +471,7 @@ // } HashMap<String, Object> map1 = new HashMap<>(); // TODO hzt - map1.put("recv_no", "dsadasda"); + map1.put("recv_no", "SR2024000144253"); map1.put("amt", erpProcurement.getMoney().multiply(BigDecimal.valueOf(100)).intValue() + ""); objects.add(map1); map.put("total_amt",erpProcurement.getMoney().multiply(BigDecimal.valueOf(100)).intValue() + ""); @@ -486,7 +489,7 @@ } catch (Exception e) { e.printStackTrace(); } - return R.fail(500, "调用支付宝支付预下单接口错误"); + return R.fail(500, "退款失败请联系平台管理员"); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddProcurementDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddProcurementDto.java index f4330ac..5b1210d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddProcurementDto.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddProcurementDto.java @@ -1,5 +1,6 @@ package com.ruoyi.system.dto; +import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -29,4 +30,8 @@ @ApiModelProperty("状态 1草稿") private Integer state; + + + private BigDecimal platformCommissionPrice; + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/ClinicOutboundGoodsDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/ClinicOutboundGoodsDto.java new file mode 100644 index 0000000..5120990 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/ClinicOutboundGoodsDto.java @@ -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; + + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/InventoryDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/InventoryDto.java index be19cd3..9e059a3 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/InventoryDto.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/InventoryDto.java @@ -13,7 +13,6 @@ public class InventoryDto { @ApiModelProperty(value = "仓库id") - @NotBlank(message = "仓库id不能为空") private String warehouseId; @ApiModelProperty(value = "商品信息") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpClinicGoodsAddDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpClinicGoodsAddDto.java new file mode 100644 index 0000000..16a0b77 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpClinicGoodsAddDto.java @@ -0,0 +1,132 @@ +package com.ruoyi.system.dto; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import com.baomidou.mybatisplus.annotation.TableField; +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; + +@Data +@ApiModel(value = "erp诊所商品添加DTO") +public class TErpClinicGoodsAddDto { + + @ApiModelProperty(value = "商品名称") + @NotBlank ( message = "商品名称不能为空") + private String goodsName; + + + @ApiModelProperty(value = "供应商名称") + @NotBlank ( message = "供应商名称不能为空") + private String supplierName; + + + @ApiModelProperty(value = "国药准字号") + @NotBlank ( message = "国药准字号不能为空") + private String quasiNumber; + + @ApiModelProperty(value = "生产厂家") + @NotBlank ( message = "生产厂家不能为空") + private String manufacturer; + + @ApiModelProperty(value = "制剂规格") + @NotBlank ( message = "制剂规格不能为空") + private String formulationSpec; + + @ApiModelProperty(value = "包装规格") + @NotBlank ( message = "包装规格不能为空") + private String packingSpec; + + + @ApiModelProperty(value = "商品类型id") + @NotBlank ( message = "商品类型id不能为空") + private String typeId; + + @ApiModelProperty(value = "商品条码") + @NotBlank ( message = "商品条码不能为空") + private String goodsIdCode; + + + @ApiModelProperty(value = "保养周期") + private String maintenanceInterval; + + @ApiModelProperty(value = "保养周期单位") + private String maintenanceIntervalUnit; + + + + @ApiModelProperty(value = "是否为处方药 1=是 2=否") + private Integer isPrescriptionDrug; + + + @ApiModelProperty(value = "商品规格") + @NotBlank ( message = "商品规格不能为空") + private String goodsSpec; + + + + @ApiModelProperty(value = "预警库存") + @NotNull(message = "预警库存不能为空") + private Integer warningInventory; + + @ApiModelProperty(value = "包装单位,单位id") + @NotBlank ( message = "包装单位,单位id不能为空") + private String packingUnitId; + + + @ApiModelProperty(value = "商品售价") + @NotNull(message = "商品售价不能为空") + private BigDecimal salesAmount; + + + + @ApiModelProperty(value = "使用说明") + private String instructionsUse; + + + + @ApiModelProperty(value = "副作用") + private String sideEffect; + + + + @ApiModelProperty(value = "拼音简码") + private String simplifiedCode; + + @ApiModelProperty(value = "剂型") + private String dosageForm; + + @ApiModelProperty(value = "用途分类") + private String usageClassification; + + @ApiModelProperty(value = "商品品牌名") + private String productBrand; + + @ApiModelProperty(value = "产地") + private String placeOfOrigin; + + @ApiModelProperty(value = "成分") + private String ingredient; + + @ApiModelProperty(value = "性状") + private String trait; + + @ApiModelProperty(value = "适应症") + private String indication; + + @ApiModelProperty(value = "禁忌") + private String taboo; + + @ApiModelProperty(value = "注意事项") + private String precautions; + + @ApiModelProperty(value = "相互作用") + private String interaction; + + + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpClinicGoodsUpdateDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpClinicGoodsUpdateDto.java new file mode 100644 index 0000000..51954a1 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpClinicGoodsUpdateDto.java @@ -0,0 +1,133 @@ +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; + +@Data +@ApiModel(value = "erp诊所商品编辑DTO") +public class TErpClinicGoodsUpdateDto { + + @ApiModelProperty(value = "商品id") + @NotNull(message = "商品id不能为空") + private String id; + @ApiModelProperty(value = "商品名称") + @NotBlank ( message = "商品名称不能为空") + private String goodsName; + + + @ApiModelProperty(value = "供应商名称") + @NotBlank ( message = "供应商名称不能为空") + private String supplierName; + + + @ApiModelProperty(value = "国药准字号") + @NotBlank ( message = "国药准字号不能为空") + private String quasiNumber; + + @ApiModelProperty(value = "生产厂家") + @NotBlank ( message = "生产厂家不能为空") + private String manufacturer; + + @ApiModelProperty(value = "制剂规格") + @NotBlank ( message = "制剂规格不能为空") + private String formulationSpec; + + @ApiModelProperty(value = "包装规格") + @NotBlank ( message = "包装规格不能为空") + private String packingSpec; + + + @ApiModelProperty(value = "商品类型id") + @NotBlank ( message = "商品类型id不能为空") + private String typeId; + + @ApiModelProperty(value = "商品条码") + @NotBlank ( message = "商品条码不能为空") + private String goodsIdCode; + + + @ApiModelProperty(value = "保养周期") + private String maintenanceInterval; + + @ApiModelProperty(value = "保养周期单位") + private String maintenanceIntervalUnit; + + + + @ApiModelProperty(value = "是否为处方药 1=是 2=否") + private Integer isPrescriptionDrug; + + + @ApiModelProperty(value = "商品规格") + @NotBlank ( message = "商品规格不能为空") + private String goodsSpec; + + + + @ApiModelProperty(value = "预警库存") + @NotNull(message = "预警库存不能为空") + private Integer warningInventory; + + @ApiModelProperty(value = "包装单位,单位id") + @NotBlank ( message = "包装单位,单位id不能为空") + private String packingUnitId; + + + @ApiModelProperty(value = "商品售价") + @NotNull(message = "商品售价不能为空") + private BigDecimal salesAmount; + + + + @ApiModelProperty(value = "使用说明") + private String instructionsUse; + + + + @ApiModelProperty(value = "副作用") + private String sideEffect; + + + + @ApiModelProperty(value = "拼音简码") + private String simplifiedCode; + + @ApiModelProperty(value = "剂型") + private String dosageForm; + + @ApiModelProperty(value = "用途分类") + private String usageClassification; + + @ApiModelProperty(value = "商品品牌名") + private String productBrand; + + @ApiModelProperty(value = "产地") + private String placeOfOrigin; + + @ApiModelProperty(value = "成分") + private String ingredient; + + @ApiModelProperty(value = "性状") + private String trait; + + @ApiModelProperty(value = "适应症") + private String indication; + + @ApiModelProperty(value = "禁忌") + private String taboo; + + @ApiModelProperty(value = "注意事项") + private String precautions; + + @ApiModelProperty(value = "相互作用") + private String interaction; + + + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpGoodsAddDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpGoodsAddDto.java index 55f8cdc..1afb318 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpGoodsAddDto.java +++ b/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 = "国药准字号不能为空") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpGoodsInfoSaveDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpGoodsInfoSaveDto.java index 11aa89f..1822bf8 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpGoodsInfoSaveDto.java +++ b/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 = "保养周期") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpGoodsSetCommissionDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpGoodsSetCommissionDto.java new file mode 100644 index 0000000..4b3e08f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpGoodsSetCommissionDto.java @@ -0,0 +1,23 @@ +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; + +@Data +@ApiModel(value = "商品设置分佣DTO") +public class TErpGoodsSetCommissionDto { + @ApiModelProperty(value = "商品id") + @NotBlank(message = "商品id不能为空") + private String id; + @ApiModelProperty(value = "采购价") + @NotNull(message = "采购价不能为空") + private Double clinicPurchasePrice; + @ApiModelProperty(value = "平台分佣金额") + @NotNull(message = "平台分佣金额不能为空") + private Double platformCommissionPrice; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/UpdateStatusProcurementDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/UpdateStatusProcurementDto.java new file mode 100644 index 0000000..67ad985 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/UpdateStatusProcurementDto.java @@ -0,0 +1,38 @@ +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.time.LocalDate; +import java.time.LocalDateTime; + +@Data +@ApiModel("诊所采购入库二级dto") +public class UpdateStatusProcurementDto { + @ApiModelProperty("采购二级id") + @NotBlank(message = "采购二级id不能为空") + private String id; + + @ApiModelProperty("数量") + @NotNull(message = "数量不能为空") + private Integer purchaseCount; + + @ApiModelProperty("批次号") + @NotBlank(message = "批次号不能为空") + private String batchNumber; + + + @ApiModelProperty(value = "生产日期") + @NotNull(message = "生产日期不能为空") + private LocalDateTime productionDate; + + @ApiModelProperty(value = "有效日期") + @NotNull(message = "有效日期不能为空") + private LocalDateTime expiryDate; + + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/UpdateStatusProcurementLastDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/UpdateStatusProcurementLastDto.java new file mode 100644 index 0000000..117b112 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/UpdateStatusProcurementLastDto.java @@ -0,0 +1,25 @@ +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.time.LocalDate; +import java.util.List; + +@Data +@ApiModel("诊所采购入库一级dto") +public class UpdateStatusProcurementLastDto { + @ApiModelProperty("采购id") + @NotBlank(message = "采购id不能为空") + private String id; + + + + @ApiModelProperty("采购二级dto") + private List<UpdateStatusProcurementDto> list; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/clinicWarehouseGoodsDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/clinicWarehouseGoodsDto.java new file mode 100644 index 0000000..4f83f55 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/clinicWarehouseGoodsDto.java @@ -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; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/importExcel/TErpGoodsExcel.java b/ruoyi-system/src/main/java/com/ruoyi/system/importExcel/TErpGoodsExcel.java index 39b3bf4..5377c5b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/importExcel/TErpGoodsExcel.java +++ b/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 = "保养周期(天)") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpClinicWarehousingMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpClinicWarehousingMapper.java index 0815625..9da2edc 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpClinicWarehousingMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpClinicWarehousingMapper.java @@ -1,7 +1,15 @@ package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +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.*; +import com.ruoyi.system.vo.*; +import org.apache.ibatis.annotations.Param; + +import java.time.LocalDateTime; +import java.util.List; /** * <p> @@ -13,4 +21,18 @@ */ public interface TErpClinicWarehousingMapper extends BaseMapper<TErpClinicWarehousing> { + List<PageInventoryListVo> pageInventoryList(@Param("pageInfo") PageInfo<PageInventoryListVo> pageInfo, @Param("query") TErpInventoryQuery query, @Param("user") SysUser user, @Param("sTime") String sTime, @Param("eTime") String eTime, @Param("supplierClinicId") String supplierClinicId); + + + PageInfo<ValidityPeriodWarningVo> validityPeriodWarning(@Param("pageInfo") PageInfo<ValidityPeriodWarningVo> pageInfo, @Param("query") ValidityPeriodWarningQuery query, @Param("user") SysUser user, @Param("nineMonthLater") LocalDateTime nineMonthLater, @Param("supplierClinicId") String supplierClinicId); + + + 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); + + + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpGoodsMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpGoodsMapper.java index 4e50f2b..c3e9b0e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpGoodsMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpGoodsMapper.java @@ -31,4 +31,11 @@ List<TErpGoodsInventoryVO> pageInventoryGoodsList(@Param("warehouseId") String warehouseId, @Param("user") SysUser user, @Param("supplierClinicId") String supplierClinicId, @Param("endDate") Date endDate); + + List<TErpGoodsInventoryVO> pageInventoryGoodsList1(@Param("warehouseId") String warehouseId, @Param("user") SysUser user, @Param("supplierClinicId") String supplierClinicId, @Param("endDate") Date endDate); + + List<TErpGoodsInventoryVO> pageInventoryGoodsPageList1(@Param("query") TErpGoodsInventoryQuery query, @Param("pageInfo") PageInfo<TErpGoodsInventoryVO> pageInfo, @Param("user") SysUser user, @Param("supplierClinicId") String supplierClinicId, @Param("endDate") Date endDate); + + + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicInventoryGoods.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicInventoryGoods.java index f6fc2b0..8b988b0 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicInventoryGoods.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicInventoryGoods.java @@ -55,5 +55,8 @@ @TableField("inventory_type") private Integer inventoryType; + @ApiModelProperty(value = "商品id") + @TableField("goods_id") + private String goodsId; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicOutbound.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicOutbound.java index 35d8ef3..2edde4f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicOutbound.java +++ b/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; + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicOutboundGoods.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicOutboundGoods.java index b23bbcf..071766c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicOutboundGoods.java +++ b/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; + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicWarehousing.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicWarehousing.java index 0e4b12f..2be7174 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicWarehousing.java +++ b/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") @@ -70,4 +53,18 @@ @TableField("warehousing_type") private Integer warehousingType; + @ApiModelProperty(value = "入库单号") + @TableField("warehouse_no") + private String warehouseNo; + + @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; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicWarehousingBatch.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicWarehousingBatch.java index a5d2717..2b7cd29 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpClinicWarehousingBatch.java +++ b/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; + + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpGoods.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpGoods.java index 88cc2f3..368a775 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpGoods.java +++ b/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 = "保养周期(天)") @@ -222,7 +222,17 @@ private String storage; + @ApiModelProperty(value = "商品条码") + private String barcode; + @ApiModelProperty(value = "诊所添加供应商") + @TableField("supplier_name") + private String supplierName; + + + @ApiModelProperty(value = "诊所id") + @TableField("clinic_ids") + private String clinicIds; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierOutbound.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierOutbound.java index a9a6af8..7c18b0f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierOutbound.java +++ b/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; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierWarehousing.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierWarehousing.java index 1b6f224..f2f717b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierWarehousing.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierWarehousing.java @@ -64,4 +64,7 @@ @ApiModelProperty(value = "入库单号") @TableField("warehouse_no") private String warehouseNo; + + + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierWarehousingBatch.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierWarehousingBatch.java index 97b84d7..0bdeaf6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierWarehousingBatch.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierWarehousingBatch.java @@ -54,5 +54,7 @@ @TableField("expiry_date") private LocalDateTime expiryDate; + private String goodsId; + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TClinicGoodsWarehouseQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TClinicGoodsWarehouseQuery.java new file mode 100644 index 0000000..b3d890f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TClinicGoodsWarehouseQuery.java @@ -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; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TClinicOutboundQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TClinicOutboundQuery.java new file mode 100644 index 0000000..9d8d33f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TClinicOutboundQuery.java @@ -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; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TClinicWarehouseQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TClinicWarehouseQuery.java new file mode 100644 index 0000000..d50d80d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TClinicWarehouseQuery.java @@ -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; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TErpGoodsInventoryQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TErpGoodsInventoryQuery.java index bf24c79..9c82ed2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/query/TErpGoodsInventoryQuery.java +++ b/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 其他不传") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TErpGoodsQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TErpGoodsQuery.java index 6d97fac..060d76c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/query/TErpGoodsQuery.java +++ b/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") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpClinicWarehousingService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpClinicWarehousingService.java index 09341a6..6df47c1 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpClinicWarehousingService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpClinicWarehousingService.java @@ -1,7 +1,18 @@ 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.model.TErpGoods; +import com.ruoyi.system.query.*; +import com.ruoyi.system.vo.*; + +import javax.validation.Valid; +import java.util.List; /** * <p> @@ -13,4 +24,23 @@ */ public interface TErpClinicWarehousingService extends IService<TErpClinicWarehousing> { + PageInfo<PageInventoryListVo> pageInventoryList(TErpInventoryQuery query, SysUser user); + + List<InventoryDetailVo> detailInventory(String id, SysUser user); + + PageInfo<ValidityPeriodWarningVo> validityPeriodWarning(ValidityPeriodWarningQuery query, SysUser user); + + 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); + + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpGoodsService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpGoodsService.java index ce1c278..e4436ef 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpGoodsService.java +++ b/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; @@ -40,7 +44,7 @@ */ List<TErpGoodsVO> listExport(TErpGoodsQuery query, SysUser user); - boolean isExit(String goodsIdCode,String quasiNumber); + boolean isExit(String goodsIdCode,String quasiNumber,String id); PageInfo<TErpGoodsInventoryVO> pageInventoryGoodsPageList(@Valid TErpGoodsInventoryQuery query, SysUser user); @@ -52,4 +56,20 @@ List<TErpGoodsInventoryVO> pageInventoryGoodsList(@Valid String warehouseId, SysUser user); + PageInfo<TErpGoodsInventoryVO> pageInventoryGoodsPageList1(@Valid TErpGoodsInventoryQuery query, SysUser user); + + void inventoryGoods1(@Valid InventoryDto dto, SysUser user); + + List<TErpGoodsInventoryVO> pageInventoryGoodsList1(String warehouseId, SysUser user); + + + Page<TErpGoods> warehouseGoodsPageList(TClinicGoodsWarehouseQuery query, SysUser user, String supplierClinicId); + + + WarehouseGoodsDetailVo warehouseGoodsDetail(String id); + + + OutboundGoodsDetailVo outboundGoodsDetail(String id); + + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpProcurementService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpProcurementService.java index 1f874a9..79afcb4 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpProcurementService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpProcurementService.java @@ -8,6 +8,7 @@ import com.ruoyi.system.model.TErpProcurement; import com.ruoyi.system.query.TErpGoodsQuery; import com.ruoyi.system.query.TErpProcurementQuery; +import com.ruoyi.system.vo.DetailProcurementVO; import com.ruoyi.system.vo.TErpGoodsVO; import com.ruoyi.system.vo.TErpProcurementDetailVo; import com.ruoyi.system.vo.TErpProcurementVo; @@ -36,6 +37,7 @@ List<TErpGoodsVO> inventoryNotEnoughList(SysUser user); - String addProcurement(String clinicSupplierId, SysUser user, @Valid List<AddProcurementDto> dtos); + void addProcurement(String clinicSupplierId, SysUser user, @Valid List<AddProcurementDto> dtos); + DetailProcurementVO detailProcurement(String clinicSupplierId, SysUser user, String id); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpClinicWarehousingServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpClinicWarehousingServiceImpl.java index 65a8f92..aafd7f6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpClinicWarehousingServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpClinicWarehousingServiceImpl.java @@ -1,10 +1,30 @@ package com.ruoyi.system.service.impl; -import com.ruoyi.system.model.TErpClinicWarehousing; -import com.ruoyi.system.mapper.TErpClinicWarehousingMapper; +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.*; import com.ruoyi.system.service.TErpClinicWarehousingService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.List; +import java.util.Map; +import java.util.stream.Collectors; /** * <p> @@ -17,4 +37,325 @@ @Service public class TErpClinicWarehousingServiceImpl extends ServiceImpl<TErpClinicWarehousingMapper, TErpClinicWarehousing> implements TErpClinicWarehousingService { + + @Resource + private TCrmClinicMapper crmClinicMapper; + + @Resource + private TErpClinicInventoryGoodsMapper erpClinicInventoryGoodsMapper; + + @Resource + private TErpGoodsMapper erpGoodsMapper; + + @Resource + private TErpClinicWarehousingMapper erpClinicWarehousingMapper; + + @Resource + private TErpClinicWarehousingBatchMapper erpClinicWarehousingBatchMapper; + + @Resource + private TErpClinicOutboundGoodsMapper erpClinicOutboundGoodsMapper; + + + @Resource + private TErpClinicOutboundMapper erpClinicOutboundMapper; + + @Resource + private TErpGoodsUnitMapper erpGoodsUnitMapper; + + + @Resource + private TErpGoodsTypeMapper erpGoodsTypeMapper; + + + + @Override + public PageInfo<PageInventoryListVo> pageInventoryList(TErpInventoryQuery query, SysUser user) { + Integer roleType = user.getRoleType(); + String supplierClinicId = null; + if(roleType == 5){ + // 诊所 + TCrmClinic crmClinic = crmClinicMapper.selectOne(Wrappers.lambdaQuery(TCrmClinic.class) + .eq(TCrmClinic::getUserId, user.getUserId()) + .last("LIMIT 1")); + supplierClinicId =crmClinic.getId(); + } + String sTime=null; + String eTime =null; + if(query.getTime()!=null && !query.getTime().isEmpty()){ + String[] split = query.getTime().split(" - "); + sTime = split[0] + " 00:00:00"; + eTime = split[1] + " 23:59:59"; + } + PageInfo<PageInventoryListVo> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<PageInventoryListVo> list = this.baseMapper.pageInventoryList(pageInfo,query,user,sTime,eTime,supplierClinicId); + if(list.isEmpty()){ + return pageInfo; + } + + + + List<String> collect = list.stream().map(PageInventoryListVo::getId).collect(Collectors.toList()); + List<TErpClinicInventoryGoods> tErpSupplierInventoryGoods = erpClinicInventoryGoodsMapper.selectList(new LambdaQueryWrapper<TErpClinicInventoryGoods>().in(TErpClinicInventoryGoods::getInventoryId,collect)); + for (PageInventoryListVo pageInventoryListVo : list) { + // 盘盈 + BigDecimal add = BigDecimal.ZERO; + + // 盘亏 + BigDecimal subtract = BigDecimal.ZERO; + List<TErpClinicInventoryGoods> tErpSupplierInventoryGoodsList = tErpSupplierInventoryGoods.stream().filter(t -> t.getInventoryId().equals(pageInventoryListVo.getId())).collect(Collectors.toList()); + for (TErpClinicInventoryGoods tErpSupplierInventoryGoods1 : tErpSupplierInventoryGoodsList) { + + + if(tErpSupplierInventoryGoods1!=null){ + // 盘盈 查入库 + if(tErpSupplierInventoryGoods1.getInventoryType()==1){ + 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 = tErpSupplierInventoryGoods1.getGoodsId(); + TErpGoods goods = erpGoodsMapper.selectById(goodsId); + int count = tErpSupplierInventoryGoods1.getInventoryCount() - tErpSupplierInventoryGoods1.getDamagedCount(); + BigDecimal multiply = goods.getSalesAmount().multiply(new BigDecimal(count)); + add = add.add(multiply); + }else { + // 盘亏 查出库 + TErpClinicOutbound tErpSupplierOutbound = erpClinicOutboundMapper.selectById(tErpSupplierInventoryGoods1.getWarehousingId()); + + 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 = tErpSupplierInventoryGoods1.getGoodsId(); + TErpGoods goods = erpGoodsMapper.selectById(goodsId); + int count = tErpSupplierInventoryGoods1.getInventoryCount() - tErpSupplierInventoryGoods1.getDamagedCount(); + BigDecimal multiply = goods.getSalesAmount().multiply(new BigDecimal(count)); + add = add.add(multiply); + } +// int sum = tErpSupplierOutboundGoods.stream().mapToInt(TErpSupplierOutboundGoods::getOutboundCount).sum(); +// String goodsId = tErpSupplierOutbound.getGoodsId(); +// TErpGoods goods = erpGoodsMapper.selectById(goodsId); +// BigDecimal multiply = goods.getSalesAmount().multiply(new BigDecimal(sum)); +// subtract = subtract.add(multiply); + } + } + } + int size = tErpSupplierInventoryGoodsList.stream().map(TErpClinicInventoryGoods::getGoodsId).collect(Collectors.toSet()).size(); + pageInventoryListVo.setNum(size); + pageInventoryListVo.setTotalPrice(add); + + } + + pageInfo.setRecords(list); + return pageInfo; + } + + @Override + public List<InventoryDetailVo> detailInventory(String id, SysUser user) { + ArrayList<InventoryDetailVo> inventoryDetailVos = new ArrayList<>(); + + List<TErpClinicInventoryGoods> tErpSupplierInventoryGoods = erpClinicInventoryGoodsMapper.selectList(new LambdaQueryWrapper<TErpClinicInventoryGoods>().eq(TErpClinicInventoryGoods::getInventoryId, id)); + if(tErpSupplierInventoryGoods!=null && !tErpSupplierInventoryGoods.isEmpty()){ + for (TErpClinicInventoryGoods tErpSupplierInventoryGood : tErpSupplierInventoryGoods) { + InventoryDetailVo inventoryDetailVo = new InventoryDetailVo(); + if(tErpSupplierInventoryGood.getInventoryType()==1){ + TErpClinicWarehousing tErpSupplierWarehousing = erpClinicWarehousingMapper.selectById(tErpSupplierInventoryGood.getWarehousingId()); + String goodsId = tErpSupplierInventoryGood.getGoodsId(); + TErpGoods goods = erpGoodsMapper.selectById(goodsId); + inventoryDetailVo.setGoodsName(goods.getGoodsName()); + TErpGoodsUnit tErpGoodsUnit = erpGoodsUnitMapper.selectById(goods.getPackingUnitId()); + inventoryDetailVo.setUnitName(tErpGoodsUnit.getUnitName()); + inventoryDetailVo.setWarehouseNo(tErpSupplierWarehousing.getWarehouseNo()); + TErpClinicWarehousingBatch tErpSupplierWarehousingBatch = erpClinicWarehousingBatchMapper.selectById(tErpSupplierInventoryGood.getWarehousingBatchId()); + inventoryDetailVo.setBatchNumber(tErpSupplierWarehousingBatch.getBatchNumber()); + + List<TErpClinicWarehousingBatch> tErpSupplierWarehousingBatches = erpClinicWarehousingBatchMapper.selectList(new LambdaQueryWrapper<TErpClinicWarehousingBatch>().eq(TErpClinicWarehousingBatch::getBatchNumber, tErpSupplierWarehousingBatch.getBatchNumber())); + int sum = tErpSupplierWarehousingBatches.stream().mapToInt(TErpClinicWarehousingBatch::getWarehousingNumber).sum(); + List<String> collect = tErpSupplierWarehousingBatches.stream().map(TErpClinicWarehousingBatch::getId).collect(Collectors.toList()); + if(!collect.isEmpty()){ + List<TErpClinicOutboundGoods> tErpSupplierOutboundGoods = erpClinicOutboundGoodsMapper.selectList(new LambdaQueryWrapper<TErpClinicOutboundGoods>().eq(TErpClinicOutboundGoods::getWarehousingBatchId, collect)); + int sum1 = tErpSupplierOutboundGoods.stream().mapToInt(TErpClinicOutboundGoods::getOutboundCount).sum(); + sum = sum-sum1; + } + + // sum = 剩余库存 + inventoryDetailVo.setNowCount(sum); + inventoryDetailVo.setInventoryCount(tErpSupplierInventoryGood.getInventoryCount()); + inventoryDetailVo.setInventoryType(tErpSupplierInventoryGood.getInventoryType()); + inventoryDetailVo.setDamagedCount(tErpSupplierInventoryGood.getDamagedCount()); + } + inventoryDetailVos.add(inventoryDetailVo); + + } + + return inventoryDetailVos; + + } + + + return Collections.emptyList(); + } + + + + @Override + public PageInfo<ValidityPeriodWarningVo> validityPeriodWarning(ValidityPeriodWarningQuery query, SysUser user) { + Integer roleType = user.getRoleType(); + String supplierClinicId = null; + if(roleType == 5){ + // 诊所 + TCrmClinic crmClinic = crmClinicMapper.selectOne(Wrappers.lambdaQuery(TCrmClinic.class) + .eq(TCrmClinic::getUserId, user.getUserId()) + .last("LIMIT 1")); + supplierClinicId =crmClinic.getId(); + } + // 获取当前时间后9个月的时间 + LocalDateTime nineMonthLater = LocalDateTime.now().plusMonths(9); + + PageInfo<ValidityPeriodWarningVo> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + + + + return this.baseMapper.validityPeriodWarning(pageInfo,query,user,nineMonthLater,supplierClinicId); + } + + @Override + public PageInfo<TErpGoodsVO> pageList(TErpGoodsQuery query, SysUser user) { + PageInfo<TErpGoodsVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<TErpGoodsVO> list = this.baseMapper.pageList(query,pageInfo,user); + if(list.isEmpty()){ + return pageInfo; + } + + + List<String> typeIds = list.stream().map(TErpGoods::getTypeId).collect(Collectors.toList()); + if(!typeIds.isEmpty()){ + List<TErpGoodsType> typeList = erpGoodsTypeMapper.selectBatchIds(typeIds); + for (TErpGoodsVO tErpGoodsVO : list) { + typeList.stream().filter(t -> t.getId().equals(tErpGoodsVO.getTypeId())).findFirst().ifPresent(t -> tErpGoodsVO.setTypeName(t.getTypeName())); + tErpGoodsVO.setTypeName(tErpGoodsVO.getTypeName()); + } + } + 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); + } + + } } + diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpGoodsServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpGoodsServiceImpl.java index b51fd6c..aa6e797 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpGoodsServiceImpl.java +++ b/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; @@ -42,25 +45,40 @@ private TErpGoodsTypeMapper erpGoodsTypeMapper; @Resource + private TErpGoodsMapper erpGoodsMapper; + + @Resource private TErpGoodsUnitMapper erpGoodsUnitMapper; @Resource private TErpSupplierInventoryMapper erpSupplierInventoryMapper; + @Resource + private TErpClinicInventoryMapper erpClinicInventoryMapper; @Resource private TErpSupplierInventoryGoodsMapper erpSupplierInventoryGoodsMapper; + @Resource + private TErpClinicInventoryGoodsMapper erpClinicInventoryGoodsMapper; @Resource private TErpSupplierWarehousingMapper erpSupplierWarehousingMapper; + @Resource + private TErpClinicWarehousingMapper erpClinicWarehousingMapper; @Resource private TErpSupplierWarehousingBatchMapper erpSupplierWarehousingBatchMapper; + @Resource + private TErpClinicWarehousingBatchMapper erpClinicWarehousingBatchMapper; @Resource private TErpSupplierOutboundMapper erpSupplierOutboundMapper; + @Resource + private TErpClinicOutboundMapper erpClinicOutboundMapper; @Resource private TErpSupplierOutboundGoodsMapper erpSupplierOutboundGoodsMapper; + @Resource + private TErpClinicOutboundGoodsMapper erpClinicOutboundGoodsMapper; @Resource private TCrmClinicMapper crmClinicMapper; @@ -120,12 +138,11 @@ } @Override - public boolean isExit(String goodsIdCode, String quasiNumber) { - Long size = this.baseMapper.selectCount(new LambdaQueryWrapper<>(TErpGoods.class).eq(TErpGoods::getGoodsIdCode, goodsIdCode).or().eq(TErpGoods::getQuasiNumber, quasiNumber)); + public boolean isExit(String goodsIdCode, String quasiNumber,String id) { + Long size = this.baseMapper.selectCount(new LambdaQueryWrapper<>(TErpGoods.class).ne(id!=null,TErpGoods::getId, id).eq(TErpGoods::getGoodsIdCode, goodsIdCode).or().eq(TErpGoods::getQuasiNumber, quasiNumber)); if (size > 0) { return true; } - return false; } @@ -153,6 +170,51 @@ PageInfo<TErpGoodsInventoryVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<TErpGoodsInventoryVO> list = this.baseMapper.pageInventoryGoodsPageList(query, pageInfo, user,supplierClinicId,endDate); + if (list.isEmpty()) { + return pageInfo; + } + List<String> typeIds = list.stream().map(TErpGoodsInventoryVO::getTypeId).collect(Collectors.toList()); + if (!typeIds.isEmpty()) { + List<TErpGoodsType> typeList = erpGoodsTypeMapper.selectBatchIds(typeIds); + for (TErpGoodsInventoryVO tErpGoodsVO : list) { + typeList.stream().filter(t -> t.getId().equals(tErpGoodsVO.getTypeId())).findFirst().ifPresent(t -> tErpGoodsVO.setTypeName(t.getTypeName())); + tErpGoodsVO.setTypeName(tErpGoodsVO.getTypeName()); + } + } + List<String> packingUnitId = list.stream().map(TErpGoodsInventoryVO::getPackingUnitId).collect(Collectors.toList()); + if (!packingUnitId.isEmpty()) { + List<TErpGoodsUnit> tErpGoodsUnits = erpGoodsUnitMapper.selectBatchIds(packingUnitId); + for (TErpGoodsInventoryVO tErpGoodsVO : list) { + tErpGoodsUnits.stream().filter(t -> t.getId().equals(tErpGoodsVO.getPackingUnitId())).findFirst().ifPresent(t -> tErpGoodsVO.setPackingUnitName(t.getUnitName())); + } + } + pageInfo.setRecords(list); + return pageInfo; + } + @Override + public PageInfo<TErpGoodsInventoryVO> pageInventoryGoodsPageList1(TErpGoodsInventoryQuery query, SysUser user) { + Integer roleType = user.getRoleType(); + String supplierClinicId = null; + if(roleType == 4){ + // 供应商 + TCrmSupplier crmSupplier = crmSupplierMapper.selectOne(Wrappers.lambdaQuery(TCrmSupplier.class) + .eq(TCrmSupplier::getUserId, user.getUserId()) + .last("LIMIT 1")); + supplierClinicId =crmSupplier.getId(); + } + if(roleType == 5){ + // 诊所 + TCrmClinic crmClinic = crmClinicMapper.selectOne(Wrappers.lambdaQuery(TCrmClinic.class) + .eq(TCrmClinic::getUserId, user.getUserId()) + .last("LIMIT 1")); + supplierClinicId =crmClinic.getId(); + } + + // 当前时间一个月后 + Date endDate = DateUtils.addMonths(DateUtils.getNowDate(), 1); + + PageInfo<TErpGoodsInventoryVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<TErpGoodsInventoryVO> list = this.baseMapper.pageInventoryGoodsPageList1(query, pageInfo, user,supplierClinicId,endDate); if (list.isEmpty()) { return pageInfo; } @@ -216,6 +278,147 @@ } } return list; + } + @Override + public List<TErpGoodsInventoryVO> pageInventoryGoodsList1(String warehouseId, SysUser user) { + Integer roleType = user.getRoleType(); + String supplierClinicId = null; + if(roleType == 4){ + // 供应商 + TCrmSupplier crmSupplier = crmSupplierMapper.selectOne(Wrappers.lambdaQuery(TCrmSupplier.class) + .eq(TCrmSupplier::getUserId, user.getUserId()) + .last("LIMIT 1")); + supplierClinicId =crmSupplier.getId(); + } + if(roleType == 5){ + // 诊所 + TCrmClinic crmClinic = crmClinicMapper.selectOne(Wrappers.lambdaQuery(TCrmClinic.class) + .eq(TCrmClinic::getUserId, user.getUserId()) + .last("LIMIT 1")); + supplierClinicId =crmClinic.getId(); + } + + // 当前时间一个月后 + Date endDate = DateUtils.addMonths(DateUtils.getNowDate(), 1); + + List<TErpGoodsInventoryVO> list = this.baseMapper.pageInventoryGoodsList1(warehouseId, user,supplierClinicId,endDate); + if (list.isEmpty()) { + return list; + } + List<String> typeIds = list.stream().map(TErpGoodsInventoryVO::getTypeId).collect(Collectors.toList()); + if (!typeIds.isEmpty()) { + List<TErpGoodsType> typeList = erpGoodsTypeMapper.selectBatchIds(typeIds); + for (TErpGoodsInventoryVO tErpGoodsVO : list) { + typeList.stream().filter(t -> t.getId().equals(tErpGoodsVO.getTypeId())).findFirst().ifPresent(t -> tErpGoodsVO.setTypeName(t.getTypeName())); + tErpGoodsVO.setTypeName(tErpGoodsVO.getTypeName()); + } + } + List<String> packingUnitId = list.stream().map(TErpGoodsInventoryVO::getPackingUnitId).collect(Collectors.toList()); + if (!packingUnitId.isEmpty()) { + List<TErpGoodsUnit> tErpGoodsUnits = erpGoodsUnitMapper.selectBatchIds(packingUnitId); + for (TErpGoodsInventoryVO tErpGoodsVO : list) { + tErpGoodsUnits.stream().filter(t -> t.getId().equals(tErpGoodsVO.getPackingUnitId())).findFirst().ifPresent(t -> tErpGoodsVO.setPackingUnitName(t.getUnitName())); + } + } + return list; + } + + @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 @@ -326,4 +529,117 @@ } + @Override + public void inventoryGoods1(InventoryDto dto, SysUser user) { + Integer roleType = user.getRoleType(); + String supplierClinicId = null; + if(roleType == 4){ + // 供应商 + TCrmSupplier crmSupplier = crmSupplierMapper.selectOne(Wrappers.lambdaQuery(TCrmSupplier.class) + .eq(TCrmSupplier::getUserId, user.getUserId()) + .last("LIMIT 1")); + supplierClinicId =crmSupplier.getId(); + } + if(roleType == 5){ + // 诊所 + TCrmClinic crmClinic = crmClinicMapper.selectOne(Wrappers.lambdaQuery(TCrmClinic.class) + .eq(TCrmClinic::getUserId, user.getUserId()) + .last("LIMIT 1")); + supplierClinicId =crmClinic.getId(); + } + TErpClinicInventory tErpSupplierInventory = new TErpClinicInventory(); + String s = DateUtils.dateTimeNow(); + tErpSupplierInventory.setInventoryNumber("P" + s); + tErpSupplierInventory.setClinicId(supplierClinicId); + erpClinicInventoryMapper.insert(tErpSupplierInventory); + + List<InventoryGoodsDto> dtos = dto.getDtos(); + for (InventoryGoodsDto inventoryGoodsDto : dtos) { + // 根据入库批次id查询入库信息 + TErpClinicWarehousing tErpSupplierWarehousing = new TErpClinicWarehousing(); + TErpClinicWarehousingBatch tErpSupplierWarehousingBatch = erpClinicWarehousingBatchMapper.selectById(inventoryGoodsDto.getId()); + String warehousingId = tErpSupplierWarehousingBatch.getWarehousingId(); + TErpClinicWarehousing tErpSupplierWarehousing1 = erpClinicWarehousingMapper.selectById(warehousingId); + 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(inventoryGoodsDto.getInventoryCount() - inventoryGoodsDto.getNum()))); + // 当前年月日时分秒 + String time = DateUtils.dateTimeNow(); + tErpSupplierWarehousing.setWarehouseNo("G" + time); + tErpSupplierWarehousing.setType(2); + tErpSupplierWarehousing.setInventoryId(tErpSupplierInventory.getId()); + erpClinicWarehousingMapper.insert(tErpSupplierWarehousing); + + // 添加批次信息 + TErpClinicWarehousingBatch tErpSupplierWarehousingBatch1 = new TErpClinicWarehousingBatch(); + tErpSupplierWarehousingBatch1.setWarehousingId(tErpSupplierWarehousing.getId()); + tErpSupplierWarehousingBatch1.setWarehousingNumber(inventoryGoodsDto.getInventoryCount() - inventoryGoodsDto.getNum()); + tErpSupplierWarehousingBatch1.setBatchNumber(tErpSupplierWarehousingBatch.getBatchNumber()); + tErpSupplierWarehousingBatch1.setProductionDate(tErpSupplierWarehousingBatch.getProductionDate()); + tErpSupplierWarehousingBatch1.setExpiryDate(tErpSupplierWarehousingBatch.getExpiryDate()); + tErpSupplierWarehousingBatch1.setGoodsId(tErpSupplierWarehousingBatch.getGoodsId()); + tErpSupplierWarehousingBatch1.setQuasiNumber(tErpSupplierWarehousingBatch.getQuasiNumber()); + tErpSupplierWarehousingBatch1.setPurchaseCount(tErpSupplierWarehousingBatch.getPurchaseCount()); + tErpSupplierWarehousingBatch1.setSalesAmount(tErpSupplierWarehousingBatch.getSalesAmount()); + tErpSupplierWarehousingBatch1.setUnitAmount(tErpSupplierWarehousingBatch.getUnitAmount()); + erpClinicWarehousingBatchMapper.insert(tErpSupplierWarehousingBatch1); + + + // 添加盘点信息 + 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(tErpSupplierWarehousingBatch.getGoodsId()); + erpClinicInventoryGoodsMapper.insert(tErpSupplierInventoryGoods); + + } else { + + + 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))); + tErpSupplierOutbound.setInventoryId(tErpSupplierInventory.getId()); + erpClinicOutboundMapper.insert(tErpSupplierOutbound); + + + 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))); + erpClinicOutboundGoodsMapper.insert(tErpSupplierOutboundGoods); + + + // 添加盘点信息 + 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(tErpSupplierWarehousingBatch.getGoodsId()); + erpClinicInventoryGoodsMapper.insert(tErpSupplierInventoryGoods); + } + } + + + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java index 99a65ec..c3de1af 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java @@ -1,6 +1,7 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.BaseModel; @@ -12,6 +13,7 @@ import com.ruoyi.system.query.TErpGoodsQuery; import com.ruoyi.system.query.TErpProcurementQuery; import com.ruoyi.system.service.TErpGoodsService; +import com.ruoyi.system.service.TErpProcurementGoodsService; import com.ruoyi.system.service.TErpProcurementService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.system.vo.*; @@ -26,7 +28,10 @@ import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.net.ssl.SSLContext; @@ -36,6 +41,7 @@ import java.io.FileInputStream; import java.io.IOException; import java.math.BigDecimal; +import java.math.RoundingMode; import java.security.PrivateKey; import java.security.cert.X509Certificate; import java.util.ArrayList; @@ -78,6 +84,9 @@ @Resource private TErpGoodsUnitMapper erpGoodsUnitMapper; + @Autowired + private TErpProcurementGoodsService erpProcurementGoodsService; + @Override @@ -115,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()); @@ -231,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; } @@ -238,18 +254,22 @@ @Override public List<TErpGoodsVO> inventoryNotEnoughList(SysUser user) { List<TErpGoodsVO> list = this.baseMapper.inventoryNotEnoughList(user); - - return null; + return list; } @Override - public String addProcurement(String clinicSupplierId, SysUser user, List<AddProcurementDto> dtos) { + @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) + public void addProcurement(String clinicSupplierId, SysUser user, List<AddProcurementDto> dtos) { List<String> goodsIds = dtos.stream().map(AddProcurementDto::getGoodsId).collect(Collectors.toList()); List<TErpGoods> tErpGoods = erpGoodsMapper.selectBatchIds(goodsIds); for (AddProcurementDto dto : dtos) { TErpGoods tErpGoodsVO = tErpGoods.stream().filter(t -> t.getId().equals(dto.getGoodsId())).findFirst().get(); + dto.setPlatformCommissionPrice(tErpGoodsVO.getPlatformCommissionPrice()); dto.setSupplierId(tErpGoodsVO.getSupplierClinicId()); - dto.setGoodsSalesAmount(tErpGoodsVO.getSalesAmount()); + dto.setGoodsSalesAmount(tErpGoodsVO.getClinicPurchasePrice()); + if(dto.getSalesAmount()==null){ + dto.setSalesAmount(tErpGoodsVO.getClinicPurchasePrice()); + } } // 供应商分组 Map<String, List<AddProcurementDto>> supplierClinicIdListMap = dtos.stream().collect(Collectors.groupingBy(AddProcurementDto::getSupplierId)); @@ -271,7 +291,10 @@ }else { tErpProcurement.setStatus(2); } - this.save(tErpProcurement); + ArrayList<TErpProcurementGoods> tErpProcurementGoods1 = new ArrayList<>(); + + BigDecimal add =BigDecimal.ZERO; + for (AddProcurementDto dto : value) { TErpProcurementGoods tErpProcurementGoods = new TErpProcurementGoods(); tErpProcurementGoods.setProcurementId(tErpProcurement.getId()); @@ -285,15 +308,56 @@ tErpProcurementGoods.setUnitName(tErpGoodsUnit.getUnitName()); tErpProcurementGoods.setPurchasePrice(dto.getGoodsSalesAmount()); tErpProcurementGoods.setSalesAmount(dto.getSalesAmount()); + tErpProcurementGoods.setTotalPrice(dto.getSalesAmount().multiply(new BigDecimal(dto.getPurchaseCount()))); tErpProcurementGoods.setPurchaseCount(dto.getPurchaseCount()); tErpProcurementGoods.setSupplierId(supplierClinicId); tErpProcurementGoods.setRecvMerchantNo(supplier.getRecvMerchantNo()); + tErpProcurementGoods.setSupplierMoney(dto.getSalesAmount().subtract(dto.getPlatformCommissionPrice())); + if(tErpProcurementGoods.getSupplierMoney().doubleValue()<0){ + throw new RuntimeException("平台抽成不能大于售卖价格"); + } + add = add.add(dto.getPlatformCommissionPrice()); + tErpProcurementGoods1.add(tErpProcurementGoods); } + BigDecimal bigDecimal = tErpProcurement.getPayMoney().multiply(BigDecimal.valueOf(0.0038)).setScale(2, RoundingMode.HALF_UP); + tErpProcurement.setMoney(add.subtract(bigDecimal)); + if(tErpProcurement.getMoney().doubleValue()<0){ + throw new RuntimeException("金额设置错误,请联系平台管理员"); + } + this.save(tErpProcurement); + tErpProcurementGoods1.forEach(e->e.setProcurementId(tErpProcurement.getId())); + erpProcurementGoodsService.saveBatch(tErpProcurementGoods1); } - return ""; + } + + @Override + public DetailProcurementVO detailProcurement(String clinicSupplierId, SysUser user, String id) { + DetailProcurementVO detailProcurementVO = new DetailProcurementVO(); + TErpProcurement tErpProcurement = this.getById(id); + detailProcurementVO.setStatus(tErpProcurement.getStatus()); + detailProcurementVO.setCreateTime(tErpProcurement.getCreateTime()); + detailProcurementVO.setSendTime(tErpProcurement.getSendTime()); + TCrmSupplier supplier = crmSupplierMapper.selectById(tErpProcurement.getSupplierId()); + detailProcurementVO.setSupplierName(supplier.getSupplierName()); + detailProcurementVO.setUserName(sysUserMapper.selectUserById(Long.valueOf(tErpProcurement.getCreateId())).getUserName()); + List<TErpProcurementGoods> list = erpProcurementGoodsService.list(new QueryWrapper<TErpProcurementGoods>().eq("procurement_id", id)); + ArrayList<DetailProcurementNextVO> detailProcurementNextVOS = new ArrayList<>(); + for (TErpProcurementGoods tErpProcurementGoods : list) { + DetailProcurementNextVO detailProcurementNextVO = new DetailProcurementNextVO(); + detailProcurementNextVO.setGoodsName(tErpProcurementGoods.getGoodsName()); + detailProcurementNextVO.setQuasiNumber(tErpProcurementGoods.getQuasiNumber()); + detailProcurementNextVO.setPackingUnitName(tErpProcurementGoods.getUnitName()); + detailProcurementNextVO.setSalesAmount(tErpProcurementGoods.getSalesAmount()); + detailProcurementNextVO.setNum(tErpProcurementGoods.getPurchaseCount()); + detailProcurementNextVO.setTotalPrice(tErpProcurement.getPayMoney()); + detailProcurementNextVO.setId(tErpProcurementGoods.getId()); + detailProcurementNextVOS.add(detailProcurementNextVO); + } + detailProcurementVO.setList(detailProcurementNextVOS); + return detailProcurementVO; } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/DetailProcurementNextVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DetailProcurementNextVO.java new file mode 100644 index 0000000..0d8bf9e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DetailProcurementNextVO.java @@ -0,0 +1,53 @@ +package com.ruoyi.system.vo; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +@ApiModel(value = "诊所采购详情二级Vo") +public class DetailProcurementNextVO { + + @ApiModelProperty(value = "采购二级id") + private String id; + + @ApiModelProperty("商品id") + private String goodsId; + + @ApiModelProperty(value = "商品名称") + private String goodsName; + + @ApiModelProperty(value = "国药准字号") + private String quasiNumber; + + @ApiModelProperty(value = "单位") + private String packingUnitName; + + @ApiModelProperty(value = "售价") + private BigDecimal salesAmount; + + @ApiModelProperty(value = "数量") + private Integer num; + + @ApiModelProperty(value = "状态") + private BigDecimal totalPrice=BigDecimal.ZERO; + + @ApiModelProperty(value = "供应商名称") + private String supplierName; + + @ApiModelProperty(value = "单位名称") + private String unitName; + + @ApiModelProperty(value = "采购价") + private BigDecimal purchasePrice; + + + + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/DetailProcurementVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DetailProcurementVO.java new file mode 100644 index 0000000..87fa093 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DetailProcurementVO.java @@ -0,0 +1,33 @@ +package com.ruoyi.system.vo; + +import com.ruoyi.system.model.TErpGoods; +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 DetailProcurementVO{ + @ApiModelProperty(value = "状态 1=草稿 2=待支付 3=待发货 4=已发货 5=已入库 6=已取消") + private Integer status; + + @ApiModelProperty(value = "供应商名称") + private String supplierName; + + @ApiModelProperty(value = "发起人") + private String userName; + + @ApiModelProperty(value = "发起时间") + private LocalDateTime createTime; + + @ApiModelProperty(value = "发货时间") + private LocalDateTime sendTime; + + @ApiModelProperty(value = "采购二级详情") + private List<DetailProcurementNextVO> list; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/OutboundGoodsDetailNextVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/OutboundGoodsDetailNextVo.java new file mode 100644 index 0000000..f2e6051 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/OutboundGoodsDetailNextVo.java @@ -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; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/OutboundGoodsDetailVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/OutboundGoodsDetailVo.java new file mode 100644 index 0000000..ff3f89a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/OutboundGoodsDetailVo.java @@ -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; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpClinicOutboundPageListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpClinicOutboundPageListVO.java new file mode 100644 index 0000000..23752d4 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpClinicOutboundPageListVO.java @@ -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; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpClinicWarehousePageListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpClinicWarehousePageListVO.java new file mode 100644 index 0000000..6dcf3ce --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpClinicWarehousePageListVO.java @@ -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; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpGoodsInventoryVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpGoodsInventoryVO.java index bc1d288..88ca654 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpGoodsInventoryVO.java +++ b/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 = "批次号") @@ -58,4 +58,10 @@ private LocalDateTime expiryDate; + private Integer goodsSource; + + @ApiModelProperty(value = "供应商id") + private String supplierId; + + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpMaintenanceReminderDetailVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpMaintenanceReminderDetailVo.java index 0eaa5d6..7f1d02e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpMaintenanceReminderDetailVo.java +++ b/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; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementVo.java index 3f3a9b5..eee3e61 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementVo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementVo.java @@ -26,6 +26,10 @@ @ApiModelProperty(value = "诊所名称") private String clinicName; + @ApiModelProperty(value = "供应商名称") + private String supplierName; + + @ApiModelProperty(value = "品种数") private Integer typeNum; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/WarehouseGoodsDetailVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/WarehouseGoodsDetailVo.java new file mode 100644 index 0000000..41ec5c2 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/WarehouseGoodsDetailVo.java @@ -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; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/wxPay/config/WxConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/wxPay/config/WxConfig.java index 39c05ea..c70a034 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/wxPay/config/WxConfig.java +++ b/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; diff --git a/ruoyi-system/src/main/resources/mapper/system/TErpClinicWarehousingMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TErpClinicWarehousingMapper.xml index 939f9e6..2b2ffd7 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TErpClinicWarehousingMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TErpClinicWarehousingMapper.xml @@ -26,5 +26,136 @@ <sql id="Base_Column_List"> id, procurement_id, clinic_id, goods_id, goods_name, supplier_name, quasi_number, sales_amount, purchase_count, total_price, warehousing_type, create_time, update_time, create_by, update_by, disabled </sql> + <select id="pageInventoryList" resultType="com.ruoyi.system.vo.PageInventoryListVo"> + select t1.id,t1.create_time,t2.user_name createBy,t3.warehouse_name + from t_erp_clinic_inventory t1 left join sys_user t2 on t1.create_id = t2.user_id + left join t_crm_warehouse t3 on t1.warehouse_id =t3.id + where t1.disabled = 0 + <if test="user.roleType !=null and user.roleType ==5"> + and t1.clinic_id = #{supplierClinicId} + </if> + <if test="query.createBy != null and query.createBy != ''"> + and t2.user_name like concat('%',#{query.createBy},'%') + </if> + <if test="sTime != null and eTime !=null "> + and t1.create_time between #{sTime} and #{eTime} + </if> + order by t1.create_time desc + </select> + + + <select id="validityPeriodWarning" resultType="com.ruoyi.system.vo.ValidityPeriodWarningVo"> + select t2.warehouse_no warehousingNo, t4.goods_name, t4.quasi_number, t1.batch_number, t1.id as batchId,t1.expiry_date, t4.id as goodsId,t5.type_name,t6.unit_name packingUnitName, + case + when t3.id is null then t1.warehousing_number + else t1.warehousing_number -t3.outbound_count + end as num + from t_erp_clinic_warehousing_batch t1 + left join t_erp_clinic_warehousing t2 on t1.warehousing_id = t2.id + LEFT JOIN t_erp_clinic_outbound_goods t3 on t3.warehousing_batch_id = t1.id + LEFT JOIN t_erp_goods t4 on t2.goods_id = t4.id + left join t_erp_goods_type t5 on t4.type_id = t5.id + left join t_erp_goods_unit t6 on t4.packing_unit_id = t6.id + where #{time} > t1.expiry_date + and (t1.warehousing_number - t3.outbound_count > 0 or t3.id is null) + <if test="user.roleType !=null and user.roleType ==5"> + and t2.clinic_id =#{supplierClinicId} + </if> + <if test="query.name != null and query.name != ''"> + and t4.goods_name like concat('%',#{query.goodsName},'%') + </if> + <if test="query.quasiNumber != null and query.quasiNumber != ''"> + and t4.quasi_number like concat('%',#{query.quasiNumber},'%') + </if> + <if test="query.batchNumber != null and query.batchNumber != ''"> + and t1.batch_number like concat('%',#{query.batchNumber},'%') + </if> + <if test="query.typeId != null and query.typeId != ''"> + and t4.type_id = #{query.typeId} + </if> + order by t1.expiry_date + + </select> + + <sql id="Base_Column_List1"> + t1.id, t1.supplier_clinic_id, t1.goods_source, t1.goods_name, t1.goods_id_code, t1.quasi_number, t1.manufacturer, t1.formulation_spec, t1.packing_spec, t1.type_id, t1.goods_yards, t1.maintenance_interval, t1.low_purchase_quantity, t1.low_unit_id, t1.is_prescription_drug, t1.goods_spec, t1.warning_inventory, t1.sales_amount, t1.packing_unit_id, t1.instructions_use, t1.side_effect, t1.clinic_purchase_price, t1.platform_commission_price, t1.create_time, t1.update_time, t1.create_by,t1.`state`, t1.update_by, t1.disabled, + </sql> + <select id="pageList" resultType="com.ruoyi.system.vo.TErpGoodsVO"> + select * from ( + select <include refid="Base_Column_List1"/> + 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_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 != ''"> + and t1.goods_name like concat('%',#{query.goodsName},'%') + </if> + <if test="query.goodsIdCode != null and query.goodsIdCode != ''"> + and t1.goods_id_code like concat('%',#{query.goodsIdCode},'%') + </if> + <if test="query.typeId != null and query.typeId != ''"> + and t1.type_id = #{query.typeId} + </if> + <if test="query.quasiNumber != null and query.quasiNumber != ''"> + and t1.quasi_number like concat('%',#{query.quasiNumber},'%') + </if> + <if test="query.state != null "> + and t1.state = #{query.state} + </if> + <if test="user.roleType != null and user.roleType == 4 "> + and t1.goods_source =1 and t1.supplier_clinic_id =#{query.supplierClinicId} + </if> + <if test="user.roleType != null and user.roleType == 5 "> + and ( ( t1.goods_source =2 and t1.supplier_clinic_id =#{query.supplierClinicId} ) or find_in_set(#{query.supplierClinicId},t1.clinic_ids) ) + </if> + GROUP BY t1.id + ) o where 1=1 + <if test="query.type != null and query.type ==1"> + and o.warning_inventory > (o.allNum-o.outNum) + </if> + 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 = #{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> diff --git a/ruoyi-system/src/main/resources/mapper/system/TErpGoodsMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TErpGoodsMapper.xml index 8cdc313..5105d6d 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TErpGoodsMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TErpGoodsMapper.xml @@ -76,7 +76,7 @@ and goods_source =1 and supplier_clinic_id = #{query.supplierClinicId} </if> <if test="user.roleType != null and user.roleType == 5 "> - and goods_source =2 and supplier_clinic_id = #{query.supplierClinicId} + and ( (goods_source =2 and supplier_clinic_id = #{query.supplierClinicId} ) or (FIND_IN_SET(#{query.supplierClinicId},clinic_ids) and state =1)) </if> order by create_time desc </select> @@ -164,6 +164,55 @@ where (o.warehousing_number -o.outbound_count) >0 order by o.create_time desc </select> + <select id="pageInventoryGoodsPageList1" resultType="com.ruoyi.system.vo.TErpGoodsInventoryVO"> + select * from ( + SELECT t1.id,t2.warehouse_no, + t3.goods_name,t3.goods_source, + t4.supplier_name, + t3.type_id, + t3.packing_unit_id, + t3.quasi_number, + t3.goods_id_code, + t1.batch_number, + coalesce(sum(t5.outbound_count),0) as outbound_count, + t1.warehousing_number, + t2.create_time, + t1.warehousing_number - coalesce(sum(t5.outbound_count),0) as num, + t2.unit_amount as sales_amount, + t1.expiry_date + from t_erp_clinic_warehousing_batch t1 + LEFT JOIN t_erp_clinic_warehousing t2 on t1.warehousing_id = t2.id + 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.clinic_id =#{supplierClinicId} + <if test="query.type != null and query.type ==1"> + and #{time} > t1.expiry_date + </if> + <if test="query.goodsName != null and query.goodsName != ''"> + and t3.goods_name like concat('%',#{query.goodsName},'%') + </if> + <if test="query.supplierName != null and query.supplierName != ''"> + and (t4.supplier_name like concat('%',#{query.supplierName},'%') or t3.supplierName like concat('%',#{query.supplierName},'%')) + </if> + + <if test="query.typeId != null and query.typeId != ''"> + and t3.type_id = #{query.typeId} + </if> + <if test="query.quasiNumber != null and query.quasiNumber != ''"> + and t3.quasi_number =#{query.quasiNumber} + </if> + <if test="query.batchNumber != null and query.batchNumber != ''"> + and t1.batch_number =#{query.batchNumber} + </if> + <if test="query.warehouseNo != null and query.warehouseNo != ''"> + and t2.warehouse_no = #{query.warehouseNo} + </if> + GROUP BY t1.id + ) as o + where (o.warehousing_number -o.outbound_count) >0 + order by o.create_time desc + </select> <select id="pageInventoryGoodsList" resultType="com.ruoyi.system.vo.TErpGoodsInventoryVO"> select * from ( SELECT t1.id,t2.warehouse_no, @@ -199,5 +248,40 @@ where (o.warehousing_number -o.outbound_count) >0 order by o.create_time desc </select> + <select id="pageInventoryGoodsList1" resultType="com.ruoyi.system.vo.TErpGoodsInventoryVO"> + select * from ( + SELECT t1.id,t2.warehouse_no, + t3.goods_name, + t4.supplier_name, + t3.type_id, + t3.packing_unit_id, + t3.quasi_number, + t3.goods_id_code, + t1.batch_number, + coalesce(sum(t5.outbound_count),0) as outbound_count, + t1.warehousing_number, + t2.create_time, + t1.warehousing_number - coalesce(sum(t5.outbound_count),0) as num, + t2.unit_amount as sales_amount, + t1.expiry_date + from t_erp_clinic_warehousing_batch t1 + LEFT JOIN t_erp_clinic_warehousing t2 on t1.warehousing_id = t2.id + 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_supplier_outbound_goods t5 on t5.warehousing_batch_id =t1.id + where t2.disabled = 0 + and #{endDate} > t1.expiry_date + <if test="user.roleType !=null and user.roleType ==4"> + and t3.supplier_clinic_id =#{supplierClinicId} and t3.goods_source=1 + </if> + <if test="user.roleType !=null and user.roleType ==5"> + and t3.supplier_clinic_id =#{supplierClinicId} and t3.goods_source=2 + </if> + + GROUP BY t1.id + ) as o + where (o.warehousing_number -o.outbound_count) >0 + order by o.create_time desc + </select> </mapper> diff --git a/ruoyi-system/src/main/resources/mapper/system/TErpProcurementMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TErpProcurementMapper.xml index cd6e62c..09453b6 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TErpProcurementMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TErpProcurementMapper.xml @@ -30,7 +30,7 @@ select t1.id, t1.procurement_code, t1.clinic_id, - t3.clinic_name, + t3.supplier_name, sum(t2.total_price) as totalPrice, t1.create_time, t2.id tErpProcurementGoodsId, @@ -38,9 +38,9 @@ t1.status from t_erp_procurement t1 left JOIN t_erp_procurement_goods t2 on t1.id = t2.procurement_id - LEFT JOIN t_crm_clinic t3 on t1.clinic_id = t3.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> @@ -48,7 +48,7 @@ and t1.procurement_code = #{query.procurementCode} </if> <if test="query.clinicName != null and query.clinicName != ''"> - and t3.clinic_name like concat('%',#{query.clinicName},'%') + and t3.supplier_name like concat('%',#{query.clinicName},'%') </if> <if test="query.userName != null and query.userName != ''"> and t4.user_name like concat('%',#{query.userName},'%') @@ -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"> -- Gitblit v1.7.1