You need to sign in or sign up before continuing.
Commit 00385c94 by 李小惠

修改盘点接口

parent 2961ed93
......@@ -3,6 +3,7 @@ package com.junmp.jyzb.api.bean.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
......@@ -14,4 +15,6 @@ public class ViewEquipmentDto implements Serializable {
private String sizeName;
private String typeId;
private String typeName;
private Integer property;
private BigDecimal price;
}
\ No newline at end of file
......@@ -23,4 +23,5 @@ public class WarrantyDataDto {
private Integer property;
private Long orgId;
private String orgName;
private Integer stockNumber;
}
......@@ -111,7 +111,8 @@ BussinessInventoryController {
@ApiOperation("确认结果/结束盘点")
public ApiRes<Boolean> UseOrFinished (@RequestBody UploadInventoryReq req){
//判断是否有工作流id,如果有则将状态进行修改
return ApiRes.success(BussinessInventoryService.UseOrFinished(req));
// return ApiRes.success(BussinessInventoryService.UseOrFinished(req));
return ApiRes.success(BussinessInventoryService.UseOrFinishedRebuild(req));
}
@PostMapping(path="/GetInfoByEpcs",name="根据EPC列表换取详细信息#logType=30")
......
......@@ -98,7 +98,8 @@ public class OrderController {
@PostMapping(path="/Accounting",name="记账#logType=30")
@ApiOperation("记账")
public ApiRes<Boolean> Accounting(@RequestBody @Validated(ValidationApi.delete.class) UpdateOrderReq req){
boolean accounting = orderMainService.Accounting(req);
// boolean accounting = orderMainService.Accounting(req);
boolean accounting = orderMainService.testAccounting(req);
System.out.println("accounting = " + accounting);
return ApiRes.success(accounting);
}
......@@ -116,22 +117,6 @@ public class OrderController {
return ApiRes.success(orderMainService.ShowAccountingPage(req));
}
//单据打印
// @PostMapping("OrderPrinting")
// @ApiOperation("单据打印")
// public ApiRes<Boolean> OrderPrinting(@RequestBody Object req){
// try {
// printerService.printObject(myObject); // 打印对象属性
// return ResponseEntity.ok("Printing request sent to the printer");
// } catch (PrintException e) {
// e.printStackTrace();
// return ResponseEntity.status(500).body("Error occurred while printing");
// }
// }
//入库单导出
@PostMapping(path="/InOrderExport",name="入库单导出#enable")
@ApiOperation("入库单导出")
......
......@@ -286,13 +286,6 @@ public class TjController {
}
// @PostMapping("test")
// public ApiRes<List<TjOrgEqsDto>> test(@RequestBody InventoryReq req){
// return ApiRes.success(tjService.test(req));
// }
//----------------------------- 大屏数据接口-----------------------------
//1。装备近30天使用次数top5
......
......@@ -29,7 +29,7 @@ public class BussinessDetail implements Serializable {
private Long id;
/**
* 工作流id
* 主单id
*/
@TableField(value = "inventory_id")
private Long inventoryId;
......@@ -39,61 +39,68 @@ public class BussinessDetail implements Serializable {
@TableField(value = "group_id")
private String groupId;
/**
* 工作流id
* 类型id
*/
@TableField(value = "type_id")
private String typeId;
/**
* 单据业务类型
* 类型名称
*/
@TableField(value = "type_name")
private String typeName;
/**
* 是否已人工改账,0未改,1已改,如果人工添加数量为0,则生成时属于已改状态
*/
@TableField(value = "has_count")
private Integer hasCount;
/**
* 单据编号
* 号型id
*/
@TableField(value = "size_id")
private String sizeId;
/**
* 年度
* 号型名称
*/
@TableField(value = "size_name")
private String sizeName;
/**
*
* 在库数(包含报废区)
*/
@TableField(value = "stock_number")
private Integer stockNumber;
/**
*
* 在库金额
*/
@TableField(value = "stock_price")
private BigDecimal stockPrice;
/**
* 单价
*/
@TableField(value = "price")
private BigDecimal price;
/**
*
* 修正后的在库金额
*/
@TableField(value = "fix_price")
private BigDecimal fixPrice;
/**
* 申请时间
* 修正后的在库数量
*/
@TableField(value = "fix_number")
private Integer fixNumber;
/**
* 仓库名称
* 金额差距数量
*/
@TableField(value = "num")
private Integer num;
/**
* 仓库名称
* 状态.0正常,1盈余,2亏损
*/
@TableField(value = "state")
private String state;
......
......@@ -3,6 +3,7 @@ package com.junmp.jyzb.entity;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import lombok.AllArgsConstructor;
......@@ -134,6 +135,11 @@ public class WarehouseInventory implements Serializable {
@TableField(exist = false)
private Integer shelfRange;
/**
* 装备状态,broken即为报废状态
*/
@TableField(exist = false)
private String state;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
......
......@@ -26,74 +26,39 @@ public interface EquipmentCountSummaryMapper extends BaseMapper<EquipmentCountSu
TjOrgCountDto TjOrgCount(@Param("orgId") String orgId,
@Param("typeIdsList") List<String> typeIdsList,
@Param("sizeNameList") List<String> sizeNameList,
@Param("year")Integer year,
@Param("typeParentId")String typeParentId,
@Param("monthList") List<Integer> monthList,
@Param("typeName") String typeName);
// List<TjOrgCountDto> TjOrgCount1(@Param("orgId") String orgId,
// @Param("typeIdsList") List<String> typeIdsList,
// @Param("sizeNameList") List<String> sizeNameList,
// @Param("year")Integer year,
// @Param("typeParentId")String typeParentId,
// @Param("monthList") List<Integer> monthList);
@Param("typeName") String typeName,
@Param("startTime") String startTime,
@Param("endTime") String endTime);
TjOrgCountDto TjOrgCountleve4(@Param("orgId") Long orgId,
@Param("typeIdsList") List<String> typeIdsList,
@Param("sizeNameList") List<String> sizeNameList,
@Param("year") Integer year,
@Param("typeParentId")String typeParentId,
@Param("monthList") List<Integer> monthList,
@Param("levelFlag")Integer levelFlag,
@Param("typeName") String typeName);
@Param("typeName") String typeName,
@Param("startTime") String startTime,
@Param("endTime") String endTime);
TjOrgCountDto TjOrgCountSelf(@Param("orgId") Long orgId,
@Param("typeIdsList") List<String> typeIdsList,
@Param("sizeNameList") List<String> sizeNameList,
@Param("year") Integer year,
@Param("typeParentId")String typeParentId,
@Param("monthList") List<Integer> monthList,
@Param("typeName") String typeName);
@Param("typeName") String typeName,
@Param("startTime") String startTime,
@Param("endTime") String endTime);
List<TjOrgCountDto> TjOrgCountTotalNum(@Param("orgId") Long orgId,
@Param("typeIdsList") List<String> typeIdsList,
@Param("sizeNameList") List<String> sizeNameList,
@Param("year") Integer year,
@Param("typeParentId")String typeParentId,
@Param("monthList") List<Integer> monthList,
@Param("levelNum")Integer levelNum,
@Param("level")Integer level,
@Param("column")String column,
@Param("order")String order,
@Param("levelFlag")Integer levelFlag,
@Param("typeName") String typeName);
List<TjOrgCountDto> TjOrgCountTotalDetail(@Param("orgId") Long orgId,
@Param("typeIdsList") List<String> typeIdsList,
@Param("sizeNameList") List<String> sizeNameList,
@Param("year") Integer year,
@Param("typeParentId")String typeParentId,
@Param("monthList") List<Integer> monthList,
@Param("levelNum")Integer levelNum,
@Param("level")Integer level,
@Param("column")String column,
@Param("order")String order,
@Param("typeName") String typeName);
// List<TjOrgCountDto> TjOrgCountDetail(@Param("orgId") Long orgId,
// @Param("typeIdsList") List<String> typeIdsList,
// @Param("sizeNameList") List<String> sizeNameList,
// @Param("year") Integer year,
// @Param("typeParentId")String typeParentId,
// @Param("monthList") List<Integer> monthList,
// @Param("levelNum")Integer levelNum,
// @Param("level")Integer level,
// @Param("column")String column,
// @Param("order")String order,
// @Param("typeName") String typeName);
FinalTjOrgCountDto TjOrgCountSum(@Param("orgId") Long orgId,
@Param("sizeNameList") List<String> sizeNameList,
@Param("typeIdsList") List<String> typeIdsList,
@Param("year")Integer year,
@Param("typeName") String typeName);
@Param("typeName") String typeName,
@Param("startTime") String startTime,
@Param("endTime") String endTime);
List<TjOrgCountDto> TjOrgCountByType(@Param("req") TjOrgCountReq req);
......
......@@ -19,6 +19,7 @@ import com.junmp.jyzb.api.bean.req.PrintReq.GetPrintListReq;
import com.junmp.jyzb.api.bean.vo.InventoryVo;
import com.junmp.jyzb.entity.Inventory;
import com.junmp.jyzb.entity.InventorySummary;
import com.junmp.jyzb.entity.WarehouseInventory;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
......@@ -159,5 +160,5 @@ public interface InventoryMapper extends BaseMapper<Inventory> {
List<Inventory> getInfoList(@Param("list") List<Object[]> itemList);
List<WarehouseInventory> getInvListByWarehouse(@Param("warehouseId") String warehouseId);
}
\ No newline at end of file
......@@ -111,8 +111,6 @@ public interface InventorySummaryMapper extends BaseMapper<InventorySummary> {
void setWarrantyGroupAction(@Param("orgId") Long orgId);
void updateSummaryInsImport(@Param("orgId") Long orgId,@Param("locationId") String locationId);
void deleteByOrgId(@Param("orgId") Long orgId,@Param("locationId") String locationId);
void UpdateSummaryDestoryNumber();
......
......@@ -20,16 +20,6 @@ public interface PriceSumSummaryMapper extends BaseMapper<PriceSumSummary> {
@Param("sizeNameList")List<String> sizeNameList,
@Param("typeName") String typeName);
// List<TjOrgPriceDto> TjOrgPriceDetail(@Param("orgId") Long orgId,
// @Param("year") Integer year,
// @Param("typeIdsList") List<String> typeIdsList,
// @Param("sizeNameList") List<String> sizeNameList,
// @Param("column") String column,
// @Param("order") String order,
// @Param("typeName") String typeName);
void setSizeName(@Param("sizeId") String id, @Param("sizeName") String name);
void setTypeName(@Param("typeId") String id, @Param("typeName") String name);
......@@ -48,12 +38,6 @@ public interface PriceSumSummaryMapper extends BaseMapper<PriceSumSummary> {
@Param("typeIdsList") List<String> typeIdsList,
@Param("sizeNameList")List<String> sizeNameList,
@Param("typeName") String typeName);
List<TjOrgPriceDto> TjOrgPriceTotalNum(@Param("orgId") Long orgId,
@Param("year") Integer year,
@Param("typeIdsList") List<String> typeIdsList,
@Param("sizeNameList")List<String> sizeNameList,
@Param("levelNum")Integer levelNum,
@Param("level")Integer level);
List<TjOrgPriceDto> getTotalPriceDetail(@Param("orgId") Long orgId,
@Param("year") Integer year,
......
package com.junmp.jyzb.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.junmp.jyzb.api.bean.dto.tjDto.WarrantyDataDto;
import com.junmp.jyzb.api.bean.req.WarrantyReq;
import com.junmp.jyzb.entity.VieWarrantyGroup;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
......@@ -13,4 +16,6 @@ public interface VieWarrantyGroupMapper extends BaseMapper<VieWarrantyGroup> {
List<VieWarrantyGroup> selectByTerms(@Param("list") List<VieWarrantyGroup> valuesList);
List<VieWarrantyGroup> getExpireGroupList();
Page<WarrantyDataDto> WarrantyData(@Param("page") Page<WarrantyDataDto> defaultPage,@Param("req") WarrantyReq req);
}
\ No newline at end of file
package com.junmp.jyzb.rabbitmq;
import com.alibaba.fastjson.JSON;
import com.junmp.jyzb.api.bean.query.inAndOutRecordReq.CabinetLogsRecordReq;
import com.junmp.jyzb.service.InventorySummaryService;
import com.junmp.v2.log.api.LogRecordApi;
import com.junmp.v2.log.api.bean.dto.LogRecordDto;
import com.junmp.v2.log.api.constant.LogConstant;
import com.junmp.v2.log.api.enums.LogTypeEnum;
import com.junmp.v2.log.api.factory.LogRecordFactory;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.messaging.handler.annotation.Header;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
/**
* 单警柜出入库记录上报并且记录到数据库中
*/
@Component
public class CabinetLogReceiver {
@Resource
private InventorySummaryService inventorySummaryService;
/**
* 日志记录的api
*/
@Resource
private LogRecordApi logRecordApi;
@RabbitListener(queues = "CabinetLogsRecord")//监听队列名
private void a(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag){
// 创建日志对象
LogRecordDto logRecordDTO = LogRecordFactory.createLogRecord(LogConstant.LOG_DEFAULT_NAME, "CabinetLogsRecord");
logRecordDTO.setLogType(LogTypeEnum.OPT_LOG.getCode());
logRecordDTO.setHttpMethod("RabbitMQ");
logRecordDTO.setLogContent("CabinetLogsRecord");
logRecordDTO.setRequestParams(msg);
logRecordDTO.setLogType(30);
logRecordDTO.setRequestUrl("queues = \"CabinetLogsRecord\"");
try {
// 手动确认消息
channel.basicAck(deliveryTag, false);
CabinetLogsRecordReq req = JSON.parseObject(msg, CabinetLogsRecordReq.class);
//将消息进行消费
Boolean result = inventorySummaryService.cabinetInOutRecords(req);
logRecordDTO.setRequestResult(result.toString());
logRecordApi.addAsync(logRecordDTO);
} catch (Exception e) {
try {
channel.basicNack(deliveryTag, false, true);
logRecordDTO.setRequestResult(e.getMessage().toString());
logRecordApi.addAsync(logRecordDTO);
} catch (IOException ex) {
logRecordDTO.setRequestResult(ex.getMessage().toString());
logRecordApi.addAsync(logRecordDTO);
throw new RuntimeException(ex);
}
}
}
}
package com.junmp.jyzb.rabbitmq;
import com.alibaba.fastjson.JSON;
import com.junmp.jyzb.api.bean.query.inAndOutRecordReq.CabinetLogsRecordReq;
import com.junmp.jyzb.service.LogSummaryService;
import com.junmp.v2.log.api.LogRecordApi;
import com.junmp.v2.log.api.bean.dto.LogRecordDto;
import com.junmp.v2.log.api.constant.LogConstant;
import com.junmp.v2.log.api.enums.LogTypeEnum;
import com.junmp.v2.log.api.factory.LogRecordFactory;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.messaging.handler.annotation.Header;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
/**
* 单警柜上报出入库记录监听消息队列
*/
@Component
public class OutInLogsByCabinetReceiver {
@Resource
private LogSummaryService logSummaryService;
/**
* 日志记录的api
*/
@Resource
private LogRecordApi logRecordApi;
@RabbitListener(queues = "CabinetLogsRecord")//监听队列名
private void a(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag){
// 创建日志对象
LogRecordDto logRecordDTO = LogRecordFactory.createLogRecord(LogConstant.LOG_DEFAULT_NAME, "CabinetLogsRecord");
logRecordDTO.setLogType(LogTypeEnum.OPT_LOG.getCode());
logRecordDTO.setHttpMethod("RabbitMQ");
logRecordDTO.setLogContent("CabinetLogsRecord");
logRecordDTO.setRequestParams(msg);
logRecordDTO.setLogType(30);
logRecordDTO.setRequestUrl("queues = \"CabinetLogsRecord\"");
try {
System.out.println("msg = " + msg);
// 手动确认消息
channel.basicAck(deliveryTag, false);
CabinetLogsRecordReq req = JSON.parseObject(msg, CabinetLogsRecordReq.class);
//将消息进行消费
Boolean result = logSummaryService.processOutInRecords(req);
logRecordDTO.setRequestResult(result.toString());
logRecordApi.addAsync(logRecordDTO);
} catch (Exception e) {
// 处理消息过程中发生异常,拒绝消息并将其重新放回队列ms
try {
channel.basicNack(deliveryTag, false, true);
logRecordDTO.setRequestResult(e.getMessage().toString());
logRecordApi.addAsync(logRecordDTO);
} catch (IOException ex) {
logRecordDTO.setRequestResult(ex.getMessage().toString());
logRecordApi.addAsync(logRecordDTO);
throw new RuntimeException(ex);
}
}
}
}
......@@ -28,4 +28,6 @@ public interface BussinessInventoryService extends IService<BussinessInventory>
Boolean UploadStock(UploadInventoryReq req);
Boolean UpdateDetail(UpdateDetailReq req);
Boolean UseOrFinished(UploadInventoryReq req);
Boolean UseOrFinishedRebuild(UploadInventoryReq req);
}
......@@ -25,9 +25,6 @@ public interface InventorySummaryService extends IService<InventorySummary> {
InventorySummary getOne(InventorySumReq req);
//处理单警柜返回单据结果
Boolean cabinetInOutRecords(CabinetLogsRecordReq req);
//根据组织机构id/单警柜id/仓库id查询出库存汇总数量以及金额
List<InventorySummary> getTotalNumberAndPrice(InventorySumReq req);
......@@ -52,8 +49,6 @@ public interface InventorySummaryService extends IService<InventorySummary> {
void setWarrantyGroupAction(Long orgId);
void updateSummaryInsImport(Long orgId, String warehouseId);
void UpdateSummaryNumber();
void clearMysql();
......
......@@ -27,9 +27,6 @@ public interface LogSummaryService extends IService<LogSummary> {
//本地主机返回出入库结果
Boolean processInventoryRecords(OutInLogsReq req);
//单警柜返回出入库结果
Boolean processOutInRecords(CabinetLogsRecordReq req);
PageResult<LogSummary> ShowInOutRecords(LogSummaryReq req);
LogSummaryDto ShowInOutRecordsByItemsCount(LogSummaryReq req);
......
......@@ -493,11 +493,10 @@ public class BusFormServiceImpl extends ServiceImpl<BusFormMapper, BusForm> impl
String detailList = busForm.getDetailList();
List<BussinessOrderDetialReq> list = JSONArray.parseArray(detailList, BussinessOrderDetialReq.class);
//更新inventory表的表达式
LambdaUpdateWrapper<Inventory> updateStateWrapper = Wrappers.lambdaUpdate();
List<Object[]> searchItem=new ArrayList<>();
for (BussinessOrderDetialReq detialReq:list) {
//我先去数据库查询summary表中的数据
Object[] item=new Object[]{busForm.getOrgId(),detialReq.getLocationId(),detialReq.getTypeId(),detialReq.getSizeId(),detialReq.getPrice(),detialReq.getProperty()};
Object[] item=new Object[]{busForm.getOrgId(),detialReq.getLocationId(),detialReq.getTypeId(),detialReq.getSizeId(),detialReq.getPrice(),0};
searchItem.add(item);
}
......@@ -517,7 +516,7 @@ public class BusFormServiceImpl extends ServiceImpl<BusFormMapper, BusForm> impl
for (InventorySummary is:inventorySummaryList) {
if (detialReq.getLocationId().equals(is.getLocationId()) && detialReq.getTypeId().equals(is.getTypeId())
&& detialReq.getSizeId().equals(is.getSizeId()) && detialReq.getPrice().compareTo(is.getUnitPrice())==0
&& detialReq.getProperty()==is.getProperty()){
&& Objects.equals(detialReq.getProperty(), is.getProperty())){
//如果数量相同则直接将全部在库数的装备表中的该仓库的装备状态全部设置为报废,并且修改库存汇总表中的数据
//将库存的报废数量根据单据重新进行计算
Integer brokenNum=detialReq.getPlanNum()+is.getBrokenNumber();
......@@ -570,7 +569,7 @@ public class BusFormServiceImpl extends ServiceImpl<BusFormMapper, BusForm> impl
inventoryService.updateBatchById(updateInvList);
//重新计算过质保数
String key=detialReq.getOrgId()+ detialReq.getLocationId()+detialReq.getTypeId()+detialReq.getSizeId();
String key=detialReq.getOrgId()+ detialReq.getLocationId()+detialReq.getTypeId()+detialReq.getSizeId()+detialReq.getPrice();
if (map.containsKey(key)){
VieWarrantyGroup vieWarrantyGroup = map.get(key);
vieWarrantyGroup.setCountOfItems(vieWarrantyGroup.getCountOfItems()+oldPlanNum);
......@@ -584,6 +583,7 @@ public class BusFormServiceImpl extends ServiceImpl<BusFormMapper, BusForm> impl
vieWarrantyGroup.setOrgName(detialReq.getOrgName());
vieWarrantyGroup.setOrgId(detialReq.getOrgId().toString());
vieWarrantyGroup.setCountOfItems(oldPlanNum);
vieWarrantyGroup.setPrice(detialReq.getPrice());
vieWarrantyGroup.setLocationId(detialReq.getLocationId());
vieWarrantyGroup.setLocationName(detialReq.getLocationName());
map.put(key,vieWarrantyGroup);
......@@ -597,7 +597,8 @@ public class BusFormServiceImpl extends ServiceImpl<BusFormMapper, BusForm> impl
for (VieWarrantyGroup invSum:valuesList) {
for (VieWarrantyGroup warrantyInv:warrantyList) {
if (invSum.getLocationId().equals(warrantyInv.getLocationId()) && invSum.getTypeId().equals(warrantyInv.getTypeId())
&& invSum.getSizeId().equals(warrantyInv.getSizeId()) && invSum.getOrgId().equals(warrantyInv.getOrgId())){
&& invSum.getSizeId().equals(warrantyInv.getSizeId()) && invSum.getOrgId().equals(warrantyInv.getOrgId())
&& invSum.getPrice().compareTo(warrantyInv.getPrice())==0){
warrantyInv.setCountOfItems(warrantyInv.getCountOfItems()-invSum.getCountOfItems());
break;
}
......@@ -840,10 +841,10 @@ public class BusFormServiceImpl extends ServiceImpl<BusFormMapper, BusForm> impl
List<Object[]> upperSearchItem=new ArrayList<>();
for (BussinessOrderDetialReq detialReq:list) {
//我先去数据库查询summary表中的数据
Object[] item=new Object[]{busForm.getOrgId(),detialReq.getLocationId(),detialReq.getTypeId(),detialReq.getSizeId(),detialReq.getPrice(),detialReq.getProperty()};
Object[] item=new Object[]{busForm.getOrgId(),detialReq.getLocationId(),detialReq.getTypeId(),detialReq.getSizeId(),detialReq.getPrice(),0};
searchItem.add(item);
Object[] upperItem=new Object[]{Long.valueOf(busForm.getSupplierId()),busForm.getWarehouseId(),detialReq.getTypeId(),detialReq.getSizeId(),detialReq.getPrice(),detialReq.getProperty()};
Object[] upperItem=new Object[]{Long.valueOf(busForm.getSupplierId()),busForm.getWarehouseId(),detialReq.getTypeId(),detialReq.getSizeId(),detialReq.getPrice(),0};
upperSearchItem.add(upperItem);
}
......@@ -868,8 +869,7 @@ public class BusFormServiceImpl extends ServiceImpl<BusFormMapper, BusForm> impl
Boolean flag=false;
for (InventorySummary is:upperInvSumList) {
if (busForm.getWarehouseId().equals(is.getLocationId()) && detialReq.getTypeId().equals(is.getTypeId())
&& detialReq.getSizeId().equals(is.getSizeId()) && detialReq.getPrice().compareTo(is.getUnitPrice())==0
&& detialReq.getProperty()==is.getProperty()){
&& detialReq.getSizeId().equals(is.getSizeId()) && detialReq.getPrice().compareTo(is.getUnitPrice())==0){
//如果数量相同则直接将全部在库数的装备表中的该仓库的装备状态全部设置为报废,并且修改库存汇总表中的数据
//将库存的报废数量根据单据重新进行计算
flag=true;
......@@ -895,12 +895,12 @@ public class BusFormServiceImpl extends ServiceImpl<BusFormMapper, BusForm> impl
InventorySummary inventorySummary=inventorySummaryService.createInventorySummary(Long.valueOf(busForm.getSupplierId()),
busForm.getSupplierName(),pubOrg.getOrgCode(),detialReq.getTypeId(),detialReq.getTypeName(),detialReq.getSizeId(),detialReq.getSizeName(),
busForm.getWarehouseId(),warehouse.getName(),0,0,detialReq.getPrice(),
0,0,detialReq.getProperty(),0,0,0,detialReq.getPlanNum(),"0");
0,0,0,0,0,0,detialReq.getPlanNum(),"0");
upperAddSumList.add(inventorySummary);
}
//重新计算过质保数汇总
String key=busForm.getSupplierId()+busForm.getWarehouseId()+detialReq.getTypeId()+detialReq.getSizeId();
String key=busForm.getSupplierId()+busForm.getWarehouseId()+detialReq.getTypeId()+detialReq.getSizeId()+detialReq.getPrice();
if (map.containsKey(key)){
VieWarrantyGroup vieWarrantyGroup = map.get(key);
vieWarrantyGroup.setCountOfItems(vieWarrantyGroup.getCountOfItems()+oldPlanNum);
......@@ -914,6 +914,7 @@ public class BusFormServiceImpl extends ServiceImpl<BusFormMapper, BusForm> impl
vieWarrantyGroup.setOrgName(busForm.getSupplierName());
vieWarrantyGroup.setOrgId(busForm.getSupplierId());
vieWarrantyGroup.setCountOfItems(oldPlanNum);
vieWarrantyGroup.setPrice(detialReq.getPrice());
vieWarrantyGroup.setLocationId(busForm.getWarehouseId());
vieWarrantyGroup.setLocationName(warehouse.getName());
map.put(key,vieWarrantyGroup);
......@@ -932,8 +933,7 @@ public class BusFormServiceImpl extends ServiceImpl<BusFormMapper, BusForm> impl
for (BussinessOrderDetialReq detialReq:list) {
for (InventorySummary is : inventorySummaryList) {
if (detialReq.getLocationId().equals(is.getLocationId()) && detialReq.getTypeId().equals(is.getTypeId())
&& detialReq.getSizeId().equals(is.getSizeId()) && detialReq.getPrice().compareTo(is.getUnitPrice()) == 0
&& detialReq.getProperty() == is.getProperty()) {
&& detialReq.getSizeId().equals(is.getSizeId()) && detialReq.getPrice().compareTo(is.getUnitPrice()) == 0) {
//直接减库存
is.setStockNumber(Math.max(is.getStockNumber() - detialReq.getPlanNum(), 0));
is.setStockNumberPrice(is.getPrice().multiply(BigDecimal.valueOf(is.getStockNumber())));
......@@ -964,8 +964,7 @@ public class BusFormServiceImpl extends ServiceImpl<BusFormMapper, BusForm> impl
for (Inventory inv : inventoryList) {
if (detialReq.getPlanNum() > 0) {
if (detialReq.getLocationId().equals(inv.getLocationId()) && detialReq.getTypeId().equals(inv.getTypeId())
&& detialReq.getSizeId().equals(inv.getSizeId()) && detialReq.getPrice().compareTo(inv.getPrice()) == 0
&& detialReq.getProperty().equals(inv.getProperty())) {
&& detialReq.getSizeId().equals(inv.getSizeId()) && detialReq.getPrice().compareTo(inv.getPrice()) == 0) {
detialReq.setPlanNum(detialReq.getPlanNum() - 1);
inv.setState("broken");
inv.setOrgId(Long.valueOf(busForm.getSupplierId()));
......
......@@ -382,7 +382,7 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
pubOrg.getOrgName(),pubOrg.getOrgCode(),inv.getTypeId(),inv.getTypeName(),inv.getSizeId(),
inv.getSizeName(),inv.getLocationId(),inv.getLocationName(),inv.getStockNum(),
inv.getOutBoundNum(),inv.getPrice(),inv.getStockExpireNum()+inv.getOutboundExpireNum(),
0,ObjectUtil.isNull(inv.getProperty())?0:inv.getProperty(),0,0,
0,0,0,0,
0,0,"0");
addSumList.add(inventorySummary);
}
......@@ -1022,118 +1022,6 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
@Override
// public Boolean EqsBindOrUnbindCabinet(PoliceEquipmentDetailReq req) {
// PubOrg pubOrg = pubOrgService.PubOrgCodeExist(req.getOrgCode());
// Cabinet cabinet=cabinetBoxService.getCabByBoxId(req.getLocationId());
// //1.获取该箱门下面的所有装备信息
// List<PoliceEquipmentDetail> list = policeEquipmentDetailService.list(new LambdaQueryWrapper<PoliceEquipmentDetail>()
// .eq(PoliceEquipmentDetail::getLocationId, req.getLocationId()));
//
// //2.获取判断该箱门中是否存在epc,将不存在的epc的locationId设置为空
// List<InventoryReq> epcList = req.getEpcList();
// if (CollectionUtil.isNotEmpty(epcList)){
// List<String> collect = epcList.stream().map(InventoryReq::getEpc).collect(Collectors.toList());
// List<Inventory> inventoryList = inventoryMapper.selectEqcs(collect);
// epcList.forEach(s -> {
// Optional<Inventory> inv = inventoryList.stream().filter(a -> a.getEpc().equals(s.getEpc())).findFirst();
// if(inv.isPresent()){
// s.setPrice(inv.get().getPrice());
// s.setProperty(inv.get().getProperty());
// s.setWarrantyPeriod(inv.get().getWarrantyPeriod());
// s.setProductionDate(inv.get().getProductionDate());
// }
// });
// }
// List<PoliceEquipmentDetail> invList=new ArrayList<>();
// List<PoliceEquipmentDetail> deleteList = new ArrayList<>();
// List<PoliceEquipmentDetail> addList = new ArrayList<>();
// //如果箱门中没有数据,那么直接就将装备和箱门关系解除(如果该装备也没有人员绑定,那么直接删除)
//
// if (list.size() > 0) {
// if (epcList.size() > 0) {
// for (PoliceEquipmentDetail detail:list) {
// boolean flag=false;
// for (InventoryReq detailReq:epcList) {
// if (detailReq.getEpc().equals(detail.getEpc())){
// flag=true;
// }
// break;
// }
// if (!flag){
// deleteList.add(detail);
// }
// }
// } else {
// deleteList.addAll(list);
// }
// } else {
// for (InventoryReq detailReq : epcList) {
// PoliceEquipmentDetail equipmentDetail = new PoliceEquipmentDetail();
// BeanPlusUtil.copyProperties(detailReq, equipmentDetail);
// equipmentDetail.setOrgId(pubOrg.getOrgId().toString());
// equipmentDetail.setLocationId(req.getLocationId());
// equipmentDetail.setDevSn(req.getDevSn());
// equipmentDetail.setCreateTime(DateTimeUtil.getCurrentDateTime());
// equipmentDetail.setUpdateTime(DateTimeUtil.getCurrentDateTime());
// addList.add(equipmentDetail);
// }
// }
// if (addList.size()>0){
// policeEquipmentDetailService.saveBatch(addList);
// }
// if (deleteList.size()>0){
// policeEquipmentDetailService.removeBatchByIds(deleteList);
// }
//
// //3.将inventory重新进行汇总
// if (deleteList.size()>0){
// List<String> collect = deleteList.stream().map(PoliceEquipmentDetail::getEpc).collect(Collectors.toList());
// update(new LambdaUpdateWrapper<Inventory>().set(Inventory::getLocationId,null)
// .set(Inventory::getLocationType,null)
// .in(Inventory::getEpc,collect));
// warehouseInventoryService.update(new LambdaUpdateWrapper<WarehouseInventory>()
// .set(WarehouseInventory::getLocationId,null)
// .set(WarehouseInventory::getLocationName,null)
// .set(WarehouseInventory::getLocationType,null)
// .in(WarehouseInventory::getEpc,collect));
// }
// if (addList.size()>0){
// List<String> collect = addList.stream().map(PoliceEquipmentDetail::getEpc).collect(Collectors.toList());
//
// update(new LambdaUpdateWrapper<Inventory>().set(Inventory::getLocationId,req.getLocationId())
// .set(Inventory::getLocationType,1)
// .in(Inventory::getEpc,collect));
// warehouseInventoryService.update(new LambdaUpdateWrapper<WarehouseInventory>()
// .set(WarehouseInventory::getLocationId,req.getLocationId())
// .set(WarehouseInventory::getLocationName,null)
// .set(WarehouseInventory::getLocationType,1)
// .in(WarehouseInventory::getEpc,collect));
//
// }
// //4.比较inventorySummary中的数据,如果不存在直接删除,如果存在数量不对进行更新操作,如果库存没有,库存进行新增操作
// //我还是得进行数据汇总
// invList.addAll(deleteList);
// invList.addAll(addList);
// Map<String,List<Object[]>> invSummaryMap=new HashMap<>();
// for (PoliceEquipmentDetail detail:invList) {
// String key= detail.getOrgId()+cabinet.getId()+detail.getTypeId()+detail.getSizeId()+detail.getProperty();
// if (!invSummaryMap.containsKey(key)){
// List<Object[]> searchItem = invSummaryMap.get(key);
// Object[] item=new Object[]{detail.getOrgId(),cabinet.getId(),detail.getTypeId(),detail.getSizeId(),detail.getProperty()};
// searchItem.add(item);
// invSummaryMap.put(key,searchItem);
// }
// }
// Collection<List<Object[]>> values = invSummaryMap.values();
// List<Object[]> searchItem = values.stream()
// .flatMap(Collection::stream)
// .collect(Collectors.toList());
//
// List<InventorySummary> inventorySummaryList = inventorySummaryMapper.selectSum(searchItem);
//
// return null;
// }
@Transactional
public String EqsBindOrUnbindCabinet(PoliceEquipmentDetailReq req) {
PubOrg pubOrg = pubOrgService.PubOrgCodeExist(req.getOrgCode());
......@@ -1153,10 +1041,6 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
public List<Inventory> EqsBindOrUnBind(List<String> epcList, Cabinet cabinet, PubOrg pubOrg, CabinetBox cabinetBox,Policeman policeman) {
List<Inventory> returnList=new ArrayList<>();
//获取到该单警柜下面是否存在装备,如果存在且已经解绑,那么该单警柜的装备的出库状态就设置出库,在库数减少,出库数增加
// List<Inventory> list = list(new LambdaQueryWrapper<Inventory>()
// .eq(Inventory::getLocationId, cabinetBox.getId())
// .eq(Inventory::getLocationType, 1)
// .eq(Inventory::getEqsBindState,1));
List<Inventory> list=inventoryMapper.getInvByCabinetBox(cabinetBox.getId());
//解绑的装备epc
......
......@@ -4,16 +4,16 @@ import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.junmpProcess.mapper.OrgUserMapper;
import com.junmp.jyzb.api.bean.dto.InventorySumDto;
import com.junmp.jyzb.api.bean.dto.TypeSizeDto;
import com.junmp.jyzb.api.bean.query.inAndOutRecordReq.CabinetLogsRecordReq;
import com.junmp.jyzb.api.bean.query.InventorySumReq;
import com.junmp.jyzb.api.bean.query.SelectTotalNumReq;
import com.junmp.jyzb.api.bean.query.inAndOutRecordReq.CabinetLogsRecordReq;
import com.junmp.jyzb.api.bean.vo.InvSumVo;
import com.junmp.jyzb.api.bean.vo.InventorySumVo;
import com.junmp.jyzb.api.exception.enums.CabinetExceptionEnum;
import com.junmp.jyzb.entity.*;
import com.junmp.jyzb.mapper.InventorySummaryMapper;
import com.junmp.jyzb.service.*;
import com.junmp.jyzb.utils.DateTimeUtil;
import com.junmp.v2.common.exception.base.ServiceException;
......@@ -24,17 +24,18 @@ import com.junmp.v2.db.api.factory.PageResultFactory;
import com.junmp.v2.db.api.page.PageResult;
import com.junmp.v2.dict.entity.SysDictItem;
import com.junmp.v2.dict.service.SysDictItemService;
import com.junmp.v2.message.api.MessageApi;
import com.junmp.v2.office.api.OfficeExcelApi;
import com.junmp.v2.office.api.bean.ExcelExportParam;
import org.springframework.stereotype.Service;
import com.junmp.jyzb.mapper.InventorySummaryMapper;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class InventorySummaryServiceImpl extends ServiceImpl<InventorySummaryMapper, InventorySummary> implements InventorySummaryService {
......@@ -46,19 +47,11 @@ public class InventorySummaryServiceImpl extends ServiceImpl<InventorySummaryMa
private OrderMainService orderMainService;
@Resource
private InventoryService inventoryService;
@Resource
private InventorySummaryMapper inventorySummaryMapper;
@Resource
private EquipmentSizeService equipmentSizeService;
@Resource
private OrderDetailService orderDetailService;
@Resource
private WarehouseService warehouseService;
@Resource
private LogSummaryService logSummaryService;
......@@ -76,18 +69,7 @@ public class InventorySummaryServiceImpl extends ServiceImpl<InventorySummaryMa
private EquipmentTypeService equipmentTypeService;
@Resource
private BusFormService busFormService;
@Resource
private MessageApi messageApi;
@Resource
private OrgUserMapper orgUserMapper;
@Resource
private OfficeExcelApi officeExcelApi;
@Resource
private InventorySummaryService inventorySummaryService;
......@@ -239,33 +221,6 @@ public class InventorySummaryServiceImpl extends ServiceImpl<InventorySummaryMa
return one;
}
//单警柜返回数据
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean cabinetInOutRecords(CabinetLogsRecordReq req) {
//批量修改装备信息
// List<InventoryReq> inventoryList = req.getInventoryList();
boolean a=true;
// List<Inventory> inventoryLogsList=new ArrayList<>();
// for (InventoryReq inventoryReq:inventoryList) {
// Inventory inventory = new Inventory();
// BeanPlusUtil.copyProperties(inventoryReq,inventory);
// boolean result = inventoryService.saveOrUpdate(inventory);
// inventoryLogsList.add(inventory);
// if (!result){
// a=false;
// break;
// }
// }
//修改summary表中数据
// boolean b = updateSummaryInsByCabinet(req.getLocationId());
//添加日志记录、
// Boolean c = insertCabinetLog(req,inventoryLogsList);
return (a );
}
public boolean updateSummaryInsByCabinet(String locationId){
//查询字典表中的临近报废天数
SysDictItem sysDictItem = sysDictItemService.getOne(new LambdaQueryWrapper<SysDictItem>()
......@@ -547,11 +502,6 @@ public class InventorySummaryServiceImpl extends ServiceImpl<InventorySummaryMa
}
@Override
public void updateSummaryInsImport(Long orgId,String locationId) {
inventorySummaryMapper.updateSummaryInsImport(orgId,locationId);
}
//更新summary表的expire_number字段及金额,broken_number字段及金额,destruction_number字段及金额
@Override
public void UpdateSummaryNumber() {
......
......@@ -351,11 +351,7 @@ public class LogSummaryServiceImpl extends ServiceImpl<LogSummaryMapper, LogSumm
return a && b && c && c1 && d;
}
@Override
public Boolean processOutInRecords(CabinetLogsRecordReq req) {
//根据单警柜
return null;
}
@Override
public PageResult<LogSummary> ShowInOutRecords(LogSummaryReq req) {
......@@ -532,13 +528,13 @@ public class LogSummaryServiceImpl extends ServiceImpl<LogSummaryMapper, LogSumm
inventorySummary=inventorySummaryService.createInventorySummary(outDto.getOrgId(),outDto.getOrgName(),outDto.getOrgCode(),
outDto.getTypeId(),outDto.getTypeName(),outDto.getSizeId(),outDto.getSizeName(),
outDto.getLocationId(),outDto.getLocationName(),outDto.getNumber(),0,
outDto.getPrice(),0,0,outDto.getProperty(),0,0,0,0,"0");
outDto.getPrice(),0,0,0,0,0,0,0,"0");
}else {
inventorySummary=inventorySummaryService.createInventorySummary(outDto.getOrgId(),outDto.getOrgName(),outDto.getOrgCode(),
outDto.getTypeId(),outDto.getTypeName(),outDto.getSizeId(),outDto.getSizeName(),
outDto.getLocationId(),outDto.getLocationName(),0,outDto.getNumber(),
outDto.getPrice(),0,0,outDto.getProperty(),outDto.getNumber(),outDto.getNumber(),0,0,"0");
outDto.getPrice(),0,0,0,outDto.getNumber(),outDto.getNumber(),0,0,"0");
}
addList.add(inventorySummary);
......@@ -634,7 +630,6 @@ public class LogSummaryServiceImpl extends ServiceImpl<LogSummaryMapper, LogSumm
}
//存放logdetail信息
LogDetail logDetail = new LogDetail();
LogDetail logDetailQuick=new LogDetail();
BeanPlusUtil.copyProperties(detailLogReq, logDetail);
logDetail.setSummaryId(logSummary.getId());
logDetail.setOrgId(logSummary.getOrgId());
......@@ -677,7 +672,7 @@ public class LogSummaryServiceImpl extends ServiceImpl<LogSummaryMapper, LogSumm
boolean b = orderLogService.saveBatch(orderLogList);
}
//修改inventory表中的数据(如果不为空则表示不是采购单或者已经将采购单的信息过滤掉
//修改inventory表中的数据(判断是否记账
if (inventoryList.size()>0){
if (ObjectUtil.isNotNull(ordermain) && (ObjectUtil.isNull(ordermain.getManualState()) || ordermain.getManualState()!=1)){
......
......@@ -10,7 +10,6 @@ import com.junmp.jyzb.entity.VieDestoryGroup;
import com.junmp.jyzb.entity.VieWarrantyGroup;
import com.junmp.jyzb.mapper.VieWarrantyGroupMapper;
import com.junmp.jyzb.service.VieWarrantyGroupService;
import com.junmp.v2.common.util.BeanPlusUtil;
import com.junmp.v2.db.api.factory.PageFactory;
import com.junmp.v2.db.api.factory.PageResultFactory;
import com.junmp.v2.db.api.page.PageResult;
......@@ -18,31 +17,24 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
@Service
@Slf4j
public class VieWarrantyGroupServiceImpl extends ServiceImpl<VieWarrantyGroupMapper, VieWarrantyGroup> implements VieWarrantyGroupService {
@Resource
private VieWarrantyGroupMapper vieWarrantyGroupMapper;
@Override
public PageResult<WarrantyDataDto> WarrantyData(WarrantyReq req) {
if(req.getWarrantyType().equals("0")||req.getWarrantyType().equals("1"))
if(req.getWarrantyType().equals("0"))
{
LambdaQueryWrapper<VieWarrantyGroup> wrapper = createWrapper(req);
Page<VieWarrantyGroup> page = page(PageFactory.getDefaultPage(req.getPageNo(), req.getPageSize()), wrapper);
List<VieWarrantyGroup> records = page.getRecords();
long size = list(wrapper).size();
List<WarrantyDataDto> collect = records.parallelStream()
.map(vieWarrantyGroup -> {
WarrantyDataDto warrantyDataDto = new WarrantyDataDto();
BeanPlusUtil.copyProperties(vieWarrantyGroup, warrantyDataDto);
return warrantyDataDto;
}).collect(Collectors.toList());
Page<WarrantyDataDto> page1 = PageFactory.getDefaultPage(req.getPageNo(), req.getPageSize());
page1.setRecords(collect);
page1.setTotal(size);
return PageResultFactory.createPageResult(page1);
// LambdaQueryWrapper<WarrantyDataDto> wrapper = createWrapper(req);
// Page<WarrantyDataDto> page = page(PageFactory.getDefaultPage(req.getPageNo(), req.getPageSize()), wrapper);
Page<WarrantyDataDto> page=vieWarrantyGroupMapper.WarrantyData(PageFactory.getDefaultPage(req.getPageNo(), req.getPageSize()),req);
return PageResultFactory.createPageResult(page);
}
else return PageResultFactory.createPageResult(PageFactory.getDefaultPage(req.getPageNo(), req.getPageSize()));
......@@ -60,11 +52,6 @@ public class VieWarrantyGroupServiceImpl extends ServiceImpl<VieWarrantyGroupMap
wrapper.eq(ObjectUtil.isNotEmpty(req.getSizeId()), VieWarrantyGroup::getSizeId, req.getSizeId());
wrapper.eq(ObjectUtil.isNotEmpty(req.getTypeId()), VieWarrantyGroup::getTypeId, req.getTypeId());
wrapper.eq(ObjectUtil.isNotEmpty(req.getTypeName()), VieWarrantyGroup::getTypeName, req.getTypeName());
wrapper.eq(ObjectUtil.isNotEmpty(req.getWarrantyType()), VieWarrantyGroup::getWarrantyType, req.getWarrantyType());
if (ObjectUtil.isNotEmpty(req.getWarrantyDays())) {
int warrantyDays = Integer.parseInt(req.getWarrantyDays());
wrapper.le(VieWarrantyGroup::getDays, warrantyDays);
}
boolean flag=req.getOrder().equals("asc");
wrapper.orderBy(ObjectUtil.isEmpty(req.getWarrantyDays()),flag,VieWarrantyGroup::getDays);
wrapper.orderBy(ObjectUtil.isNotEmpty(req.getWarrantyDays()),flag,VieWarrantyGroup::getCountOfItems);
......
......@@ -96,7 +96,7 @@ public class InvExpireMsg implements JobAction {
List<VieWarrantyGroup> orgInvList = existOrgInvMap.get(existUserOrgMap.get(userId).toString());
if (orgInvList.size()>=2){
VieWarrantyGroup vieWarrantyGroup1 = orgInvList.get(0);
VieWarrantyGroup vieWarrantyGroup2 = orgInvList.get(0);
VieWarrantyGroup vieWarrantyGroup2 = orgInvList.get(1);
sysMessage.setMsgContent(vieWarrantyGroup1.getTypeName()+","+vieWarrantyGroup2.getTypeName()+" 等装备过期,请及时进行报废处理");
}else {
VieWarrantyGroup vieWarrantyGroup1 = orgInvList.get(0);
......@@ -135,7 +135,7 @@ public class InvExpireMsg implements JobAction {
sendReq.setBizId(null);
if (orgInvList.size()>=2){
VieWarrantyGroup vieWarrantyGroup1 = orgInvList.get(0);
VieWarrantyGroup vieWarrantyGroup2 = orgInvList.get(0);
VieWarrantyGroup vieWarrantyGroup2 = orgInvList.get(1);
sendReq.setMsgContent(vieWarrantyGroup1.getTypeName()+","+vieWarrantyGroup2.getTypeName()+" 等装备过期,请及时进行报废处理");
}else {
VieWarrantyGroup vieWarrantyGroup1 = orgInvList.get(0);
......
package com.junmp.jyzb.task;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.junmp.jyzb.entity.OrderMain;
import com.junmp.jyzb.mapper.InventoryMapper;
import com.junmp.jyzb.service.OrderMainService;
import com.junmp.jyzb.utils.DateTimeUtil;
import com.junmp.v2.db.api.factory.PageFactory;
import com.junmp.v2.dict.service.SysDictItemService;
import com.junmp.v2.job.api.JobAction;
import com.junmp.v2.message.api.MessageApi;
import com.junmp.v2.message.api.bean.req.MessageReq;
import com.junmp.v2.message.api.bean.req.MessageSendReq;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.*;
/**
* @author lxh
* @description 超期未归还消息提醒
* @since 2023/9/1 10:50
* @param
* @return
**/
@Slf4j
@Component
public class InvOverDueMsg implements JobAction {
@Resource
private OrderMainService orderMainService;
@Resource
private MessageApi messageApi;
@Resource
private InventoryMapper inventoryMapper;
@Resource
private SysDictItemService sysDictItemService;
@Override
public void action() {
//获取超期物资
//先查询出 出入库单据为领用单的数据
LambdaQueryWrapper<OrderMain> wrapper = new LambdaQueryWrapper<OrderMain>()
.eq(OrderMain::getBussinessType, "use")
.eq(OrderMain::getOrderType,"out");
int pageSize =1000;
int currentPage=1;
long termCount= orderMainService.count(wrapper);
List<OrderMain> list=new ArrayList<>();
if (termCount>0) {
// 分页查询
while ((currentPage - 1) * pageSize < termCount) {
List<OrderMain> orderMainList = processPageData(currentPage, pageSize);
currentPage++;
list.addAll(orderMainList);
}
}
//将消息进行推送
//我需要将orgId进行查询并去重
Set<Long> uniqueOrgIDs = new HashSet<>();
for (OrderMain orderMain:list) {
uniqueOrgIDs.add(orderMain.getStartOrgId());
}
List<Long> uniqueOrgIDsList = new ArrayList<>(uniqueOrgIDs);
//查询组织机构下面的所有仓管员的useId
// List<InvExpireReq> userIdsList=inventoryMapper.selectUserListByOrgs(uniqueOrgIDsList);
//并且查询出该领用单的领用人,再将消息推送给领用人
List<String> userIdsList=new ArrayList<>();
for (OrderMain orderMain:list) {
// if (!ObjectUtil.isNull(orderMain.getReturnDate())){
// int i = orderMain.getReturnDate().compareTo(DateTimeUtil.getCurrentDateTime());
// }
if (!ObjectUtil.isNull(orderMain.getReturnDate())
&& orderMain.getReturnDate().getTime()<DateTimeUtil.getCurrentDateTime().getTime() ){
MessageSendReq sendReq = new MessageSendReq();
sendReq.setReceiveUserIds(orderMain.getReturnUserId());
sendReq.setMsgTitle("物资超期提醒");
sendReq.setBizType("超期提醒");
//设置业务类型
// SysDictItem one = sysDictItemService.getOne(new LambdaQueryWrapper<SysDictItem>()
// .eq(SysDictItem::getDictItemId, "over_due"));
// sendReq.setBizType(one.getItemValue());
sendReq.setMsgContent("单据id为:"+orderMain.getId()+"的领用单已超期,请及时查看处理");
sendReq.setPriority("0");
sendReq.setSendTime(DateTime.now());
messageApi.sendMessageNoToken(sendReq);
userIdsList.add(orderMain.getReturnUserId());
}
}
/*推送发送未读数量*/
for(String userIds:userIdsList){
MessageReq req1 = new MessageReq();
req1.setReadFlag(0);
req1.setReceiveUserId(Long.parseLong(userIds));
Integer count1 = messageApi.queryCount(req1);
messageApi.pushMsgToUser(userIds,count1);
}
}
// 处理每页数据
private List<OrderMain> processPageData(long pageSize, long currentPage) {
//获取对应的借用单据数据
Date currentDateTime = DateTimeUtil.getCurrentDateTime();
LambdaQueryWrapper<OrderMain> wrapper = new LambdaQueryWrapper<OrderMain>()
.eq(OrderMain::getBussinessType, "use")
.eq(OrderMain::getOrderType,"out")
.lt(OrderMain::getReturnDate,currentDateTime)
.isNotNull(OrderMain::getReturnDate);
List<OrderMain> records = orderMainService.page(PageFactory.getDefaultPage(pageSize, currentPage),wrapper).getRecords();
return records;
}
}
package com.junmp.jyzb.task;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.junmp.jyzb.entity.InventorySummary;
import com.junmp.jyzb.service.EquipmentTypeService;
import com.junmp.jyzb.service.InventorySummaryService;
import com.junmp.v2.db.api.factory.PageFactory;
import com.junmp.v2.dict.entity.SysDictItem;
import com.junmp.v2.dict.service.SysDictItemService;
import com.junmp.v2.job.api.JobAction;
import com.junmp.v2.message.api.MessageApi;
import com.junmp.v2.message.api.bean.req.MessageReq;
import com.junmp.v2.message.api.bean.req.MessageSendReq;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author lxh
* @description 物资低于阈值消息提醒
* @since 2023/9/1 11:05
* @param
* @return
**/
@Slf4j
@Component
public class InvThresholdMsg implements JobAction {
@Resource
private InventorySummaryService inventorySummaryService;
@Resource
private EquipmentTypeService equipmentTypeService;
@Resource
private MessageApi messageApi;
@Resource
private SysDictItemService sysDictItemService;
@Override
public void action() {
//获取装备信息汇总,并且判断装备的汇总数量是否低于装备阈值,如果低于装备阈值,则进行消息提醒
//所有待判断的物资
LambdaQueryWrapper<InventorySummary> wrapper = new LambdaQueryWrapper<InventorySummary>()
.eq(InventorySummary::getLocationType, 0)
.groupBy(InventorySummary::getOrgId);
//分页参数
int pageSize=1000;
int currentPage=1;
//获取装备的所有库存数量
long termCount= inventorySummaryService.count(wrapper);
List<InventorySummary> list=new ArrayList<>();
if (termCount>0) {
// 分页查询
while ((currentPage - 1) * pageSize < termCount) {
List<InventorySummary> inventorySummaryList = processPageData(currentPage, pageSize);
currentPage++;
list.addAll(inventorySummaryList);
}
}
//低于阈值的数据查询出来之后,将数据进行消息推送提醒
//直接对list进行处理操作推送消息即可
for (InventorySummary inventorySummary:list) {
MessageSendReq sendReq = new MessageSendReq();
sendReq.setSendUserId("1000");
sendReq.setReceiveUserIds("1000");
sendReq.setMsgTitle("物资低于阈值");
//设置业务类型
SysDictItem one = sysDictItemService.getOne(new LambdaQueryWrapper<SysDictItem>()
.eq(SysDictItem::getItemText, "threshold"));
sendReq.setBizType(one.getItemValue());
sendReq.setMsgContent(inventorySummary.getLocationName()+"仓库下的"+inventorySummary.getTypeName()+"号型为"+inventorySummary.getSizeName()+"的物资低于阈值");
sendReq.setPriority("0");
sendReq.setSendTime(DateTime.now());
messageApi.sendMessageNoToken(sendReq);
}
messageApi.queryCount(new MessageReq());
/*推送发送未读数量*/
List<Long> userIdList=new ArrayList<>();
userIdList.add(1000L);
for(Long userId :userIdList){
MessageReq req1 = new MessageReq();
req1.setReadFlag(0);
req1.setReceiveUserId(userId);
Integer count1 = messageApi.queryCount(req1);
messageApi.pushMsgToUser(String.valueOf(userId),count1);
}
}
// 处理每页数据
private List<InventorySummary> processPageData(long pageSize, long currentPage) {
//得到全局默认值(随机处理数据表中的一条数据为默认值)
Integer threshold = equipmentTypeService.getById(100001).getThreshold();
//查询inventory_summary表中的threshold字段是否存在值,
// 如果存在则用summary表中的字段进行比较物资阈值,如果不存在则默认使用全局物资阈值进行比较
Page<InventorySummary> page = inventorySummaryService.page(PageFactory.getDefaultPage(pageSize, currentPage));
List<InventorySummary> records = page.getRecords();
//使用自定义物资阈值进行比较
List<InventorySummary> collect1 = records.stream()
.filter(data -> data.getNumber() <= data.getThreshold() && ObjectUtil.isNotNull(data.getThreshold()))
.collect(Collectors.toList());
//使用全局物资阈值进行比较
List<InventorySummary> collect2 = records.stream()
.filter(data -> data.getNumber() <= threshold && ObjectUtil.isNull(data.getThreshold()))
.collect(Collectors.toList());
//将数据存储到一个list中
List<InventorySummary> inventorySummaryList=new ArrayList<>();
inventorySummaryList.addAll(collect1);
inventorySummaryList.addAll(collect2);
return inventorySummaryList;
}
}
......@@ -189,4 +189,14 @@ public class DateTimeUtil {
return time;
}
/**
* 获取当前年月的最后一天(如2025-09,返回2025-09-30 23:59:59)
*/
public static String getLastDayOfMonth(String yearMonth) {
LocalDate date = LocalDate.parse(yearMonth + "-01");
LocalDate lastDay = date.withDayOfMonth(date.lengthOfMonth());
LocalDateTime localDateTime = lastDay.atTime(23, 59, 59);
return localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
}
\ No newline at end of file
......@@ -58,16 +58,16 @@
</select>
<select id="GetViewEquipment" resultType="com.junmp.jyzb.api.bean.dto.ViewEquipmentDto">
SELECT
*
FROM
view_equipment
WHERE
epc IN
select t.*,es.name as size_name,et.name as type_name,t.property,t.price FROM
(select epc,size_id,type_id,price,property
FROM base_inventory
where epc in
<foreach collection="epcList " item="item" open="(" separator="," close=")">
#{item}
</foreach>
)as t
left join base_equipment_type as et on t.type_id=et.id
left join base_equipment_size as es on t.size_id=es.id
</select>
......@@ -830,7 +830,6 @@
and wi.type_id='${item[2]}'
and wi.size_id='${item[3]}'
and i.price='${item[4]}'
and i.property='${item[5]}'
</foreach>
)
and wi.location_type=0
......@@ -1222,6 +1221,12 @@ select x.*,base_cabinet_box.cabinet_id as bind_cabinet_id from
limit ${item[4]}
</foreach>
</select>
<select id="getInvListByWarehouse" resultType="com.junmp.jyzb.entity.WarehouseInventory">
select t.*,i.state FROM
(select * FROM base_warehouse_inventory as wi where location_id=#{warehouseId} and location_state="in")
as t
left join base_inventory as i on t.epc=i.epc
</select>
</mapper>
\ No newline at end of file
......@@ -423,58 +423,6 @@
<insert id="useViewOrgIdInLevel">
{CALL view_orgIdInLevel(#{sql,mode=IN},#{orgId,mode=IN})}
</insert>
<insert id="updateSummaryInsImport">
INSERT INTO base_inventory_summary (valuekey, org_id_int,property, org_name, org_code, type_id, type_name, size_id, size_name, location_type, location_id, location_name, number, unit_price, price, stock_number, outbound_number, destruction_number, expire_number, broken_number, fix_number, use_number)
select
CONCAT(
COALESCE(t.org_code, '--0000'),
COALESCE(t.location_id, '--0000'),
COALESCE(t.type_id, '--0000'),
COALESCE(t.size_id, '--0000'),
COALESCE(t.unit_price, '--0000'),
COALESCE(t.property, '--0')
) as valuekey,
t.org_id_int,t.property,t.org_name,t.org_code,t.type_id,t.type_name,t.size_id,t.size_name,t.location_type,t.location_id,max(t.location_name) as location_name,sum(t.number) as number,t.unit_price,sum(t.price)as price,sum(t.stock_number)as stock_number,sum(t.outbound_number)as outbound_number,
sum(t.destruction_number)as destruction_number,sum(t.expire_number)as expire_number,sum(t.broken_number)as broken_number,sum(t.fix_number)as fix_number,sum(t.use_number)as use_number FROM (
SELECT
bi.org_id_int as org_id_int,
COALESCE(bi.property, 0) as property,
po.org_name as org_name,
po.org_code as org_code,
bi.type_id as type_id,
t.name as type_name,
bi.size_id as size_id,
s.name as size_name,
COALESCE(bcb.cabinet_id, bw.id) as location_id,
COALESCE(MAX(bc.name), MAX(bw.name)) as location_name,
bi.location_type as location_type,
SUM(CASE WHEN bi.location_type=0 and location_state = "in" and bi.state !="broken" THEN 1
when bi.location_type=1 and location_state="in" then 1 ELSE 0 END) + SUM(CASE WHEN location_state = "out" and bi.state != "destory" THEN 1 ELSE 0 END)+sum(case when bi.location_type=0 and bi.state = "broken" and bi.location_state = "in" then 1 else 0 end) as number,
bi.price as unit_price,
(SUM(CASE WHEN bi.location_type=0 and location_state = "in" and bi.state !="broken" THEN 1
when bi.location_type=1 and location_state="in" then 1 ELSE 0 END) + SUM(CASE WHEN location_state = "out" and bi.state != "destory" THEN 1 ELSE 0 END)+sum(case when bi.location_type=0 and bi.state = "broken" and bi.location_state = "in" then 1 else 0 end))*bi.price as price,
SUM(CASE WHEN bi.location_type=0 and location_state = "in" and bi.state !="broken" THEN 1
when bi.location_type=1 and location_state="in" then 1 ELSE 0 END) AS stock_number,
SUM(CASE WHEN location_state = "out" and bi.state != "destory" THEN 1 ELSE 0 END) AS outbound_number,
sum(case when bi.state = "destory" then 1 else 0 end) as destruction_number,
sum(case when bi.warranty_period = 0 then 0 when DATE_ADD(bi.production_date, INTERVAL bi.warranty_period MONTH) &lt; NOW() and bi.state!="broken" then 1 else 0 end) as expire_number,
sum(case when bi.location_type=0 and bi.state = "broken" and bi.location_state = "in" then 1 else 0 end) as broken_number,
sum(case when bi.state = "repair" and bi.location_state = "out" then 1 else 0 end) as fix_number,
sum(case when bi.bussiness_state = "use" and bi.location_state = "out" then 1 else 0 end) as use_number
FROM base_inventory bi
LEFT JOIN base_cabinet_box bcb ON bi.location_id = bcb.id and bi.location_type=1
LEFT JOIN base_cabinet bc ON bcb.cabinet_id = bc.id
LEFT JOIN base_warehouse bw ON bi.location_id = bw.id AND bi.location_type = 0
JOIN base_equipment_type t ON t.id = bi.type_id
JOIN base_equipment_size s ON s.id = bi.size_id
JOIN pub_org po ON bi.org_id_int = po.org_id
and po.org_id=#{orgId}
where bi.location_id=#{locationId}
GROUP BY bi.org_id_int, location_id, type_id, size_id, bi.price, bi.location_type,bi.property
ORDER BY org_id_int, location_id) as t
GROUP BY t.org_id_int,t.location_id,t.type_id,t.size_id,t.location_type,t.unit_price,t.property
</insert>
<select id="getTotalData" parameterType="java.lang.String" resultType="java.lang.String">
SELECT
......
......@@ -26,7 +26,7 @@
<select id="selectByTerms" resultType="com.junmp.jyzb.entity.VieWarrantyGroup">
select * from vie_warranty_group where (
<foreach collection="list" item="item" separator="or">
org_id =#{item.orgId} and size_id =#{item.sizeId} and type_id=#{item.typeId} and location_id= #{item.locationId}
org_id =#{item.orgId} and size_id =#{item.sizeId} and type_id=#{item.typeId} and location_id= #{item.locationId} and price = #{item.price}
</foreach>
) and warranty_type=0
</select>
......@@ -47,4 +47,51 @@
type_id
ORDER BY org_id;
</select>
<select id="WarrantyData" resultType="com.junmp.jyzb.api.bean.dto.tjDto.WarrantyDataDto">
select a.*,ins.stock_number FROM(SELECT
vw.id,
MAX(vw.size_name) AS size_name,
MAX(vw.type_name) AS type_name,
vw.size_id,
vw.type_id,
vw.location_id,
MAX(vw.location_name) as location_name,
vw.location_type,
vw.warranty_type,
MAX(vw.org_name) AS org_name,
vw.org_id,
sum(count_of_items) as count_of_items,
vw.price,
sum(price) as total_price,
vw.property
FROM
vie_warranty_group vw
<where>
<if test="req.orgId != null">
AND vw.org_id = #{req.orgId}
</if>
<if test="req.sizeId != null">
AND vw.size_id = #{req.sizeId}
</if>
<if test="req.typeId != null">
AND vw.type_id = #{req.typeId}
</if>
<if test="req.typeName != null and req.typeName != ''">
AND vw.type_name like concat('%',#{req.typeName},'%')
</if>
</where>
GROUP BY
vw.id,
vw.size_id,
vw.type_id,
vw.warranty_type,
vw.location_id,
vw.org_id,
vw.location_type,
vw.price,
vw.property) as a
inner join base_inventory_summary as ins on a.org_id=ins.org_id_int and a.location_id=ins.location_id and a.type_id=ins.type_id and a.size_id=ins.size_id and a.price=ins.unit_price and a.property=ins.property
and ins.stock_number>0
order by a.org_id,a.type_id,a.count_of_items
</select>
</mapper>
......@@ -58,16 +58,16 @@
</select>
<select id="GetViewEquipment" resultType="com.junmp.jyzb.api.bean.dto.ViewEquipmentDto">
SELECT
*
FROM
view_equipment
WHERE
epc IN
select t.*,es.name as size_name,et.name as type_name,t.property,t.price FROM
(select epc,size_id,type_id,price,property
FROM base_inventory
where epc in
<foreach collection="epcList " item="item" open="(" separator="," close=")">
#{item}
</foreach>
)as t
left join base_equipment_type as et on t.type_id=et.id
left join base_equipment_size as es on t.size_id=es.id
</select>
......@@ -1222,6 +1222,12 @@ select x.*,base_cabinet_box.cabinet_id as bind_cabinet_id from
limit ${item[4]}
</foreach>
</select>
<select id="getInvListByWarehouse" resultType="com.junmp.jyzb.entity.WarehouseInventory">
select t.*,i.state FROM
(select * FROM base_warehouse_inventory as wi where location_id=#{warehouseId} and location_state="in")
as t
left join base_inventory as i on t.epc=i.epc
</select>
</mapper>
\ No newline at end of file
......@@ -423,58 +423,6 @@
<insert id="useViewOrgIdInLevel">
{CALL view_orgIdInLevel(#{sql,mode=IN},#{orgId,mode=IN})}
</insert>
<insert id="updateSummaryInsImport">
INSERT INTO base_inventory_summary (valuekey, org_id_int,property, org_name, org_code, type_id, type_name, size_id, size_name, location_type, location_id, location_name, number, unit_price, price, stock_number, outbound_number, destruction_number, expire_number, broken_number, fix_number, use_number)
select
CONCAT(
COALESCE(t.org_code, '--0000'),
COALESCE(t.location_id, '--0000'),
COALESCE(t.type_id, '--0000'),
COALESCE(t.size_id, '--0000'),
COALESCE(t.unit_price, '--0000'),
COALESCE(t.property, '--0')
) as valuekey,
t.org_id_int,t.property,t.org_name,t.org_code,t.type_id,t.type_name,t.size_id,t.size_name,t.location_type,t.location_id,max(t.location_name) as location_name,sum(t.number) as number,t.unit_price,sum(t.price)as price,sum(t.stock_number)as stock_number,sum(t.outbound_number)as outbound_number,
sum(t.destruction_number)as destruction_number,sum(t.expire_number)as expire_number,sum(t.broken_number)as broken_number,sum(t.fix_number)as fix_number,sum(t.use_number)as use_number FROM (
SELECT
bi.org_id_int as org_id_int,
COALESCE(bi.property, 0) as property,
po.org_name as org_name,
po.org_code as org_code,
bi.type_id as type_id,
t.name as type_name,
bi.size_id as size_id,
s.name as size_name,
COALESCE(bcb.cabinet_id, bw.id) as location_id,
COALESCE(MAX(bc.name), MAX(bw.name)) as location_name,
bi.location_type as location_type,
SUM(CASE WHEN bi.location_type=0 and location_state = "in" and bi.state !="broken" THEN 1
when bi.location_type=1 and location_state="in" then 1 ELSE 0 END) + SUM(CASE WHEN location_state = "out" and bi.state != "destory" THEN 1 ELSE 0 END)+sum(case when bi.location_type=0 and bi.state = "broken" and bi.location_state = "in" then 1 else 0 end) as number,
bi.price as unit_price,
(SUM(CASE WHEN bi.location_type=0 and location_state = "in" and bi.state !="broken" THEN 1
when bi.location_type=1 and location_state="in" then 1 ELSE 0 END) + SUM(CASE WHEN location_state = "out" and bi.state != "destory" THEN 1 ELSE 0 END)+sum(case when bi.location_type=0 and bi.state = "broken" and bi.location_state = "in" then 1 else 0 end))*bi.price as price,
SUM(CASE WHEN bi.location_type=0 and location_state = "in" and bi.state !="broken" THEN 1
when bi.location_type=1 and location_state="in" then 1 ELSE 0 END) AS stock_number,
SUM(CASE WHEN location_state = "out" and bi.state != "destory" THEN 1 ELSE 0 END) AS outbound_number,
sum(case when bi.state = "destory" then 1 else 0 end) as destruction_number,
sum(case when bi.warranty_period = 0 then 0 when DATE_ADD(bi.production_date, INTERVAL bi.warranty_period MONTH) &lt; NOW() and bi.state!="broken" then 1 else 0 end) as expire_number,
sum(case when bi.location_type=0 and bi.state = "broken" and bi.location_state = "in" then 1 else 0 end) as broken_number,
sum(case when bi.state = "repair" and bi.location_state = "out" then 1 else 0 end) as fix_number,
sum(case when bi.bussiness_state = "use" and bi.location_state = "out" then 1 else 0 end) as use_number
FROM base_inventory bi
LEFT JOIN base_cabinet_box bcb ON bi.location_id = bcb.id and bi.location_type=1
LEFT JOIN base_cabinet bc ON bcb.cabinet_id = bc.id
LEFT JOIN base_warehouse bw ON bi.location_id = bw.id AND bi.location_type = 0
JOIN base_equipment_type t ON t.id = bi.type_id
JOIN base_equipment_size s ON s.id = bi.size_id
JOIN pub_org po ON bi.org_id_int = po.org_id
and po.org_id=#{orgId}
where bi.location_id=#{locationId}
GROUP BY bi.org_id_int, location_id, type_id, size_id, bi.price, bi.location_type,bi.property
ORDER BY org_id_int, location_id) as t
GROUP BY t.org_id_int,t.location_id,t.type_id,t.size_id,t.location_type,t.unit_price,t.property
</insert>
<select id="getTotalData" parameterType="java.lang.String" resultType="java.lang.String">
SELECT
......
......@@ -47,4 +47,51 @@
type_id
ORDER BY org_id;
</select>
<select id="WarrantyData" resultType="com.junmp.jyzb.api.bean.dto.tjDto.WarrantyDataDto">
select a.*,ins.stock_number FROM(SELECT
vw.id,
MAX(vw.size_name) AS size_name,
MAX(vw.type_name) AS type_name,
vw.size_id,
vw.type_id,
vw.location_id,
MAX(vw.location_name) as location_name,
vw.location_type,
vw.warranty_type,
MAX(vw.org_name) AS org_name,
vw.org_id,
sum(count_of_items) as count_of_items,
vw.price,
sum(price) as total_price,
vw.property
FROM
vie_warranty_group vw
<where>
<if test="req.orgId != null">
AND vw.org_id = #{req.orgId}
</if>
<if test="req.sizeId != null">
AND vw.size_id = #{req.sizeId}
</if>
<if test="req.typeId != null">
AND vw.type_id = #{req.typeId}
</if>
<if test="req.typeName != null and req.typeName != ''">
AND vw.type_name like concat('%',#{req.typeName},'%')
</if>
</where>
GROUP BY
vw.id,
vw.size_id,
vw.type_id,
vw.warranty_type,
vw.location_id,
vw.org_id,
vw.location_type,
vw.price,
vw.property) as a
inner join base_inventory_summary as ins on a.org_id=ins.org_id_int and a.location_id=ins.location_id and a.type_id=ins.type_id and a.size_id=ins.size_id and a.price=ins.unit_price and a.property=ins.property
and ins.stock_number>0
order by a.org_id,a.type_id,a.count_of_items
</select>
</mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论