ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java
@@ -1,21 +1,32 @@ package com.ruoyi.web.controller.api; 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.R; import com.ruoyi.common.core.domain.entity.SysUser; 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.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.web.core.config.LakalaConfig; 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; /** * <p> @@ -33,11 +44,14 @@ private final TErpProcurementService erpProcurementService; private final TokenService tokenService; private final TCrmClinicService crmClinicService; @Autowired public TErpProcurementController(TErpProcurementService erpProcurementService, TokenService tokenService) { public TErpProcurementController(TErpProcurementService erpProcurementService, TokenService tokenService,TCrmClinicService crmClinicService) { this.erpProcurementService = erpProcurementService; this.tokenService = tokenService; this.crmClinicService = crmClinicService; } @@ -61,5 +75,47 @@ return R.ok(erpProcurementService.detail(id,user,goodsName)); } /** * 获取erp问题上报管理列表 */ @ApiOperation(value = "采购获取商品分页列表") @PostMapping(value = "/pageGoodsPageList") public R<PageInfo<TErpGoods>> pageList(@RequestBody TErpGoodsQuery query) { SysUser user = tokenService.getLoginUser().getUser(); return R.ok(erpProcurementService.pageGoodsPageList(query,user)); } /** * 获取erp问题上报管理列表 */ @ApiOperation(value = "采购获取库存不足列表") @PostMapping(value = "/inventoryNotEnoughList") public R<List<TErpGoodsVO>> inventoryNotEnoughList() { SysUser user = tokenService.getLoginUser().getUser(); return R.ok(erpProcurementService.inventoryNotEnoughList(user)); } @ApiOperation(value = "添加采购") @PostMapping(value = "/addProcurement") public R<String> addProcurement(@RequestBody @Valid List<AddProcurementDto> dtos) { 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.addProcurement(clinicSupplierId,user,dtos)); } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpSupplierWarehousingController.java
@@ -65,10 +65,6 @@ @ApiOperation(value = "供应商获取库存分页列表") @PostMapping(value = "/pageList") public R<PageInfo<TErpGoodsVO>> pageList(@RequestBody TErpGoodsQuery query) { V3LabsTransPreorderRequest request = new V3LabsTransPreorderRequest(); request.setLklAppId(LakalaConfig.appId); request.setMerchantNo(LakalaConfig.MerchantNo); request.setTermNo(LakalaConfig.TermNo); SysUser user = tokenService.getLoginUser().getUser(); Integer roleType = user.getRoleType(); @@ -161,11 +157,11 @@ } @ApiOperation(value = "有效期预警商品选择") @GetMapping(value = "/pageInventoryGoodsList") public R<List<TErpGoodsInventoryVO>> pageInventoryGoodsList(@RequestParam String warehouseId,@RequestParam(required = false)String batchNumber) { public R<List<TErpGoodsInventoryVO>> pageInventoryGoodsList(@RequestParam String warehouseId,@RequestParam(required = false)String batchId) { SysUser user = tokenService.getLoginUser().getUser(); List<TErpGoodsInventoryVO> tErpGoodsInventoryVOS = erpGoodsService.pageInventoryGoodsList(warehouseId, user); if(batchNumber!=null && !"".equals(batchNumber)){ tErpGoodsInventoryVOS = tErpGoodsInventoryVOS.stream().filter(e->e.getBatchNumber().equals(batchNumber)).collect(Collectors.toList()); if(batchId!=null && !"".equals(batchId)){ tErpGoodsInventoryVOS = tErpGoodsInventoryVOS.stream().filter(e->e.getId().equals(batchId)).collect(Collectors.toList()); } return R.ok(tErpGoodsInventoryVOS); } ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java
@@ -10,16 +10,16 @@ @Component public class TaskUtil { @Scheduled(cron = "0 0 0 * * ?") public void dayOfProportionBill() { try { } catch (Exception e) { e.printStackTrace(); } } // @Scheduled(cron = "0 0 0 * * ?") // public void dayOfProportionBill() { // try { // // // // } catch (Exception e) { // e.printStackTrace(); // } // } } ruoyi-system/src/main/java/com/ruoyi/system/dto/AddProcurementDto.java
New file @@ -0,0 +1,32 @@ package com.ruoyi.system.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; import java.math.BigDecimal; @Data @ApiModel("添加采购Dto") public class AddProcurementDto { @ApiModelProperty("商品id") @NotBlank(message = "商品id不能为空") private String goodsId; @ApiModelProperty("售价") private BigDecimal salesAmount; @ApiModelProperty("采购数量") @NotBlank(message = "采购数量不能为空") private Integer purchaseCount; private String supplierId; private BigDecimal goodsSalesAmount; @ApiModelProperty("状态 1草稿") private Integer state; } ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpProcurementMapper.java
@@ -4,7 +4,9 @@ import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.system.model.TErpProcurement; import com.ruoyi.system.query.TErpGoodsQuery; import com.ruoyi.system.query.TErpProcurementQuery; import com.ruoyi.system.vo.TErpGoodsVO; import com.ruoyi.system.vo.TErpProcurementVo; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,8 @@ List<TErpProcurementVo> pageList(@Param("query") TErpProcurementQuery query, @Param("pageInfo") PageInfo<TErpProcurementVo> pageInfo, @Param("user") SysUser user, @Param("sTime") String sTime, @Param("eTime") String eTime, @Param("supplierClinicId") String supplierClinicId); List<TErpGoodsVO> inventoryNotEnoughList(@Param("user") SysUser user); } ruoyi-system/src/main/java/com/ruoyi/system/service/TErpProcurementService.java
@@ -3,11 +3,17 @@ 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.AddProcurementDto; import com.ruoyi.system.model.TErpGoods; import com.ruoyi.system.model.TErpProcurement; import com.ruoyi.system.query.TErpGoodsQuery; import com.ruoyi.system.query.TErpProcurementQuery; import com.ruoyi.system.vo.TErpGoodsVO; import com.ruoyi.system.vo.TErpProcurementDetailVo; import com.ruoyi.system.vo.TErpProcurementVo; import javax.validation.Valid; import java.util.List; /** * <p> @@ -25,5 +31,11 @@ TErpProcurementDetailVo detail(String id, SysUser user, String goodsName); PageInfo<TErpGoods> pageGoodsPageList(TErpGoodsQuery query, SysUser user); List<TErpGoodsVO> inventoryNotEnoughList(SysUser user); String addProcurement(String clinicSupplierId, SysUser user, @Valid List<AddProcurementDto> dtos); } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpGoodsServiceImpl.java
@@ -304,7 +304,7 @@ TErpSupplierOutboundGoods tErpSupplierOutboundGoods = new TErpSupplierOutboundGoods(); tErpSupplierOutboundGoods.setOutboundId(tErpSupplierOutbound.getId()); tErpSupplierOutboundGoods.setWarehousingId(tErpSupplierWarehousing.getId()); tErpSupplierOutboundGoods.setWarehousingId(tErpSupplierWarehousing1.getId()); tErpSupplierOutboundGoods.setWarehousingBatchId(tErpSupplierWarehousingBatch.getId()); tErpSupplierOutboundGoods.setOutboundCount(count); tErpSupplierOutboundGoods.setTotalPrice(erpGoods.getSalesAmount().multiply(new BigDecimal(count))); ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java
@@ -3,17 +3,18 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; 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.system.dto.AddProcurementDto; import com.ruoyi.system.mapper.*; import com.ruoyi.system.model.*; import com.ruoyi.system.query.TErpGoodsQuery; import com.ruoyi.system.query.TErpProcurementQuery; import com.ruoyi.system.service.TErpGoodsService; import com.ruoyi.system.service.TErpProcurementService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.system.vo.TErpProcurementDetailNextVo; import com.ruoyi.system.vo.TErpProcurementDetailVo; import com.ruoyi.system.vo.TErpProcurementVo; import com.ruoyi.system.vo.ValidityPeriodWarningVo; import com.ruoyi.system.vo.*; import lombok.SneakyThrows; import org.apache.commons.io.IOUtils; import org.apache.http.HttpResponse; @@ -39,6 +40,7 @@ import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** @@ -66,6 +68,15 @@ @Resource private SysUserMapper sysUserMapper; @Resource private TErpGoodsMapper erpGoodsMapper; @Resource private TErpGoodsTypeMapper erpGoodsTypeMapper; @Resource private TErpGoodsUnitMapper erpGoodsUnitMapper; @@ -206,4 +217,83 @@ return tErpProcurementVo; } @Override public PageInfo<TErpGoods> pageGoodsPageList(TErpGoodsQuery query, SysUser user) { PageInfo<TErpGoods> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); PageInfo<TErpGoods> p =erpGoodsMapper.selectPage(pageInfo,new LambdaQueryWrapper<TErpGoods>().eq(TErpGoods::getGoodsSource,1).isNotNull(TErpGoods::getClinicPurchasePrice).orderByDesc(BaseModel::getCreateTime)); List<TErpGoods> list = p.getRecords(); List<String> typeIds = list.stream().map(TErpGoods::getTypeId).collect(Collectors.toList()); if(!typeIds.isEmpty()){ List<TErpGoodsType> typeList = erpGoodsTypeMapper.selectBatchIds(typeIds); for (TErpGoods 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 List<TErpGoodsVO> inventoryNotEnoughList(SysUser user) { List<TErpGoodsVO> list = this.baseMapper.inventoryNotEnoughList(user); return null; } @Override public String 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.setSupplierId(tErpGoodsVO.getSupplierClinicId()); dto.setGoodsSalesAmount(tErpGoodsVO.getSalesAmount()); } // 供应商分组 Map<String, List<AddProcurementDto>> supplierClinicIdListMap = dtos.stream().collect(Collectors.groupingBy(AddProcurementDto::getSupplierId)); for (Map.Entry<String, List<AddProcurementDto>> entry : supplierClinicIdListMap.entrySet()) { String supplierClinicId = entry.getKey(); TCrmSupplier supplier = crmSupplierMapper.selectById(supplierClinicId); List<AddProcurementDto> value = entry.getValue(); TErpProcurement tErpProcurement = new TErpProcurement(); tErpProcurement.setClinicId(clinicSupplierId); tErpProcurement.setProcurementCode("C"+DateUtils.dateTimeNow()); tErpProcurement.setSupplierId(supplierClinicId); tErpProcurement.setTermNo(supplier.getTermNo()); tErpProcurement.setMerchantNo(supplier.getRecvMerchantNo()); tErpProcurement.setPayMoney(value.stream().map(AddProcurementDto::getSalesAmount).reduce(BigDecimal.ZERO, BigDecimal::add)); AddProcurementDto addProcurementDto = value.get(0); if(addProcurementDto.getState()!=null && addProcurementDto.getState()==1){ tErpProcurement.setStatus(1); }else { tErpProcurement.setStatus(2); } this.save(tErpProcurement); for (AddProcurementDto dto : value) { TErpProcurementGoods tErpProcurementGoods = new TErpProcurementGoods(); tErpProcurementGoods.setProcurementId(tErpProcurement.getId()); TErpGoods goods = tErpGoods.stream().filter(e -> e.getId().equals(dto.getGoodsId())).findFirst().get(); tErpProcurementGoods.setGoodsId(dto.getGoodsId()); tErpProcurementGoods.setGoodsName(goods.getGoodsName()); tErpProcurementGoods.setSupplierName(supplier.getSupplierName()); tErpProcurementGoods.setQuasiNumber(goods.getQuasiNumber()); TErpGoodsUnit tErpGoodsUnit = erpGoodsUnitMapper.selectById(goods.getPackingUnitId()); tErpProcurementGoods.setUnitName(tErpGoodsUnit.getUnitName()); tErpProcurementGoods.setPurchasePrice(dto.getGoodsSalesAmount()); tErpProcurementGoods.setSalesAmount(dto.getSalesAmount()); tErpProcurementGoods.setPurchaseCount(dto.getPurchaseCount()); tErpProcurementGoods.setSupplierId(supplierClinicId); tErpProcurementGoods.setRecvMerchantNo(supplier.getRecvMerchantNo()); } } return ""; } } ruoyi-system/src/main/java/com/ruoyi/system/task/utils/TaskUtil.java
@@ -1,57 +1,57 @@ package com.ruoyi.system.task.utils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.uuid.UUID; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.temporal.ChronoUnit; import java.util.List; /** * @author zhibing.pu * @date 2023/7/11 8:39 */ @Component public class TaskUtil { @Autowired RedisCache redisCache; // 用于更新违约金账单 // 每分钟执行一次的定时任务 @Scheduled(cron = "0 0 0 * * ?") public void dayOfProportionBill() { try { } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { // LocalDateTime now = LocalDateTime.now().minusMonths(1).withDayOfMonth(31); // System.err.println(now); // LocalDateTime now2 = now.plusMonths(1); // System.err.println(now2); //package com.ruoyi.system.task.utils; // // LocalDateTime now1 = LocalDateTime.now(); // long days = ChronoUnit.DAYS.between(now, now1); // long days2 = ChronoUnit.DAYS.between(now.plusDays(1), now1); // // System.err.println(days); // System.err.println(days2); // LocalDateTime endTime = now.with(TemporalAdjusters.lastDayOfMonth()).withSecond(59).withHour(23).withMinute(59); //import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; //import com.ruoyi.common.constant.CacheConstants; //import com.ruoyi.common.core.redis.RedisCache; //import com.ruoyi.common.utils.uuid.UUID; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.scheduling.annotation.Scheduled; //import org.springframework.stereotype.Component; // // System.err.println(endTime); } } //import java.math.BigDecimal; //import java.time.LocalDate; //import java.time.LocalDateTime; //import java.time.LocalTime; //import java.time.temporal.ChronoUnit; //import java.util.List; // ///** // * @author zhibing.pu // * @date 2023/7/11 8:39 // */ //@Component //public class TaskUtil { // @Autowired // RedisCache redisCache; // // 用于更新违约金账单 // // 每分钟执行一次的定时任务 // // @Scheduled(cron = "0 0 0 * * ?") // public void dayOfProportionBill() { // try { // } catch (Exception e) { // e.printStackTrace(); // } // } // // public static void main(String[] args) { // //// LocalDateTime now = LocalDateTime.now().minusMonths(1).withDayOfMonth(31); //// System.err.println(now); //// LocalDateTime now2 = now.plusMonths(1); //// System.err.println(now2); //// //// LocalDateTime now1 = LocalDateTime.now(); //// long days = ChronoUnit.DAYS.between(now, now1); //// long days2 = ChronoUnit.DAYS.between(now.plusDays(1), now1); //// //// System.err.println(days); //// System.err.println(days2); //// LocalDateTime endTime = now.with(TemporalAdjusters.lastDayOfMonth()).withSecond(59).withHour(23).withMinute(59); //// //// System.err.println(endTime); // // } // //} ruoyi-system/src/main/java/com/ruoyi/system/vo/ValidityPeriodWarningVo.java
@@ -33,6 +33,10 @@ private String batchNumber; @ApiModelProperty(value = "批次号Id") private String batchId; @ApiModelProperty(value = "有效日期") private LocalDateTime expiryDate; ruoyi-system/src/main/java/com/ruoyi/system/wxPay/config/WxConfig.java
@@ -13,7 +13,7 @@ * * @author lihen */ @Configuration //@Configuration public class WxConfig { private final WeixinPayProperties weixinPayProperties; ruoyi-system/src/main/resources/mapper/system/TErpGoodsMapper.xml
@@ -186,7 +186,7 @@ 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 t2.warehouse_id = #{warehouseId} and #{time} > t1.expiry_date 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> ruoyi-system/src/main/resources/mapper/system/TErpProcurementMapper.xml
@@ -22,6 +22,9 @@ <sql id="Base_Column_List"> id, clinic_id, procurement_code, pay_money, pay_number, pay_transaction_id, status, create_time, update_time, create_by, update_by, disabled </sql> <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.TErpProcurementVo"> select t1.id, @@ -57,7 +60,21 @@ and t1.create_time between #{sTime} and #{eTime} </if> </select> <select id="inventoryNotEnoughList" resultType="com.ruoyi.system.vo.TErpGoodsVO"> select * from ( select <include refid="Base_Column_List1"/> COALESCE(sum(t2.goods_count), 0) - COALESCE(sum(t3.outbound_count), 0) as allNum, SUM(t2.unit_amount * (t2.goods_count - COALESCE(t3.outbound_count, 0))) as allTotalPrice, COALESCE(sum(t3.outbound_count), 0) as outNum from t_erp_goods t1 left join t_erp_supplier_warehousing t2 on t1.id = t2.goods_id left join t_erp_supplier_outbound_goods t3 on t2.id = t3.warehousing_id where t1.disabled = 0 and t2.id is not null and t1.goods_source =1 and t1.clinic_purchase_price is not null GROUP BY t1.id ) o where 1=1 and o.warning_inventory > (o.allNum-o.outNum) order by o.create_time desc </select> </mapper> ruoyi-system/src/main/resources/mapper/system/TErpSupplierWarehousingMapper.xml
@@ -108,7 +108,7 @@ <select id="validityPeriodWarning" resultType="com.ruoyi.system.vo.ValidityPeriodWarningVo"> select t2.warehouse_id,t2.warehouse_no warehousingNo, t4.goods_name, t4.quasi_number, t1.batch_number, t1.expiry_date, t4.id as goodsId,t5.type_name,t6.unit_name packingUnitName, select t2.warehouse_id,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