liujie
2 天以前 6109f5e72ce85dd4c45f3cfa9ea6de0c5bb0ccab
诊所erp
10个文件已修改
1个文件已添加
302 ■■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpClinicWarehousingController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpClinicGoodsUpdateDto.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TErpGoods.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/TClinicOutboundQuery.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/TErpGoodsService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpGoodsServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/DetailProcurementNextVO.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TErpClinicWarehousingMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TErpGoodsMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpClinicWarehousingController.java
@@ -17,6 +17,7 @@
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.*;
@@ -35,6 +36,7 @@
 */
@RestController
@RequestMapping("/t-erp-clinic-warehousing")
@Api(tags = "诊所库存管理")
public class TErpClinicWarehousingController {
    private final TErpClinicWarehousingService erpClinicWarehousingService;
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java
@@ -44,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;
@@ -133,7 +134,7 @@
        }
        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(" NOT FIND_IN_SET(" + clinicSupplierId + ",clinic_ids)"));
        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());
@@ -152,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();
@@ -186,7 +187,7 @@
    @PostMapping(value = "/clinicAdd")
    public R<Boolean> clinicAdd(@Validated @RequestBody TErpClinicGoodsAddDto 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();
@@ -205,10 +206,88 @@
        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();
    }
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java
@@ -5,6 +5,7 @@
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;
@@ -16,18 +17,17 @@
import com.ruoyi.system.query.TErpGoodsQuery;
import com.ruoyi.system.query.TErpProcurementQuery;
import com.ruoyi.system.service.*;
import com.ruoyi.system.vo.DetailProcurementVO;
import com.ruoyi.system.vo.TErpGoodsVO;
import com.ruoyi.system.vo.TErpProcurementDetailVo;
import com.ruoyi.system.vo.TErpProcurementVo;
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;
@@ -151,6 +151,43 @@
        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")
ruoyi-system/src/main/java/com/ruoyi/system/dto/TErpClinicGoodsUpdateDto.java
New file
@@ -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;
}
ruoyi-system/src/main/java/com/ruoyi/system/model/TErpGoods.java
@@ -230,5 +230,9 @@
    private String supplierName;
    @ApiModelProperty(value = "诊所id")
    @TableField("clinic_ids")
    private String clinicIds;
}
ruoyi-system/src/main/java/com/ruoyi/system/query/TClinicOutboundQuery.java
@@ -6,7 +6,7 @@
import lombok.Data;
@Data
@ApiModel(value = "erp诊所入库查询参数query")
@ApiModel(value = "erp诊所出库查询参数query")
public class TClinicOutboundQuery extends BasePage {
    @ApiModelProperty(value = "出库单号")
ruoyi-system/src/main/java/com/ruoyi/system/service/TErpGoodsService.java
@@ -44,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);
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpGoodsServiceImpl.java
@@ -138,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;
    }
ruoyi-system/src/main/java/com/ruoyi/system/vo/DetailProcurementNextVO.java
@@ -16,6 +16,10 @@
    @ApiModelProperty(value = "采购二级id")
    private String id;
    @ApiModelProperty("商品id")
    private String goodsId;
    @ApiModelProperty(value = "商品名称")
    private String goodsName;
    @ApiModelProperty(value = "国药准字号")
@@ -24,7 +28,7 @@
    @ApiModelProperty(value = "单位")
    private String packingUnitName;
    @ApiModelProperty(value = "商品售价")
    @ApiModelProperty(value = "售价")
    private BigDecimal salesAmount;
    @ApiModelProperty(value = "数量")
@@ -33,6 +37,16 @@
    @ApiModelProperty(value = "状态")
    private BigDecimal totalPrice=BigDecimal.ZERO;
    @ApiModelProperty(value = "供应商名称")
    private String supplierName;
    @ApiModelProperty(value = "单位名称")
    private String unitName;
    @ApiModelProperty(value = "采购价")
    private BigDecimal purchasePrice;
    
ruoyi-system/src/main/resources/mapper/system/TErpClinicWarehousingMapper.xml
@@ -123,7 +123,7 @@
        select t1.id,t1.warehouse_no,t2.supplier_name,t3.procurement_code,t3.pay_money allTotalPrice,t1.create_time warehouseTime,t1.type
        from t_erp_clinic_warehousing t1 left join t_erp_procurement t3 on t1.procurement_id = t3.id
        left join t_crm_supplier t2 on t3.supplier_id = t2.id
        where t1.disabled = 0 and t1.clinic_id = #{query.supplierClinicId}
        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>
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} ) or FIND_IN_SET(#{query.supplierClinicId},clinic_ids) )
            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>