Commit 478fb472 authored by 李驰骋's avatar 李驰骋

物料综合看板接口

parent 5dbe402e
package com.ximai.mes.kanban.dto;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class BasicRatio {
BigDecimal numerator;
BigDecimal denominator;
}
...@@ -3,11 +3,13 @@ package com.ximai.mes.kanban.dto.material; ...@@ -3,11 +3,13 @@ package com.ximai.mes.kanban.dto.material;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal; import java.math.BigDecimal;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor
public class BasicDailyData { public class BasicDailyData {
@ApiModelProperty("日") @ApiModelProperty("日")
int day; int day;
......
...@@ -17,7 +17,7 @@ public class ErpDataDto { ...@@ -17,7 +17,7 @@ public class ErpDataDto {
@ApiModelProperty("采购到货完成率") @ApiModelProperty("采购到货完成率")
BigDecimal materialDistRatio; BigDecimal materialDistRatio;
@ApiModelProperty("salesTimelyDeliveryRatio") @ApiModelProperty("销售发货及时率")
BigDecimal salesTimelyDeliveryRatio; BigDecimal salesTimelyDeliveryRatio;
@ApiModelProperty("库存趋势图") @ApiModelProperty("库存趋势图")
...@@ -40,6 +40,8 @@ public class ErpDataDto { ...@@ -40,6 +40,8 @@ public class ErpDataDto {
public static class SalesOutboundPlan{ public static class SalesOutboundPlan{
@ApiModelProperty("通知单号") @ApiModelProperty("通知单号")
String outApplyNo; String outApplyNo;
@ApiModelProperty("产品名称")
String itemName;
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty("计划出库时间") @ApiModelProperty("计划出库时间")
Date planOutDate; Date planOutDate;
......
...@@ -7,6 +7,7 @@ import com.ximai.common.utils.data.StringUtils; ...@@ -7,6 +7,7 @@ import com.ximai.common.utils.data.StringUtils;
import com.ximai.mes.cal.domain.CalPlanWorkunit; import com.ximai.mes.cal.domain.CalPlanWorkunit;
import com.ximai.mes.cal.mapper.CalPlanWorkunitMapper; import com.ximai.mes.cal.mapper.CalPlanWorkunitMapper;
import com.ximai.mes.constant.QcAbnormalTypeEnum; import com.ximai.mes.constant.QcAbnormalTypeEnum;
import com.ximai.mes.kanban.dto.BasicRatio;
import com.ximai.mes.kanban.dto.equipment.EquipmentQuery; import com.ximai.mes.kanban.dto.equipment.EquipmentQuery;
import com.ximai.mes.kanban.dto.equipment.EquipmentStatDto; import com.ximai.mes.kanban.dto.equipment.EquipmentStatDto;
import com.ximai.mes.kanban.dto.material.BasicDailyData; import com.ximai.mes.kanban.dto.material.BasicDailyData;
...@@ -24,6 +25,7 @@ import com.ximai.mes.qc.dto.QcAbnormalReportDto; ...@@ -24,6 +25,7 @@ import com.ximai.mes.qc.dto.QcAbnormalReportDto;
import com.ximai.mes.qc.dto.QcAbnormalReportStatusEnum; import com.ximai.mes.qc.dto.QcAbnormalReportStatusEnum;
import com.ximai.mes.qc.mapper.QcAbnormalReportMapper; import com.ximai.mes.qc.mapper.QcAbnormalReportMapper;
import com.ximai.mes.qc.service.IQcAbnormalReportService; import com.ximai.mes.qc.service.IQcAbnormalReportService;
import com.ximai.mes.remote.ErpKanbanService;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -47,55 +49,21 @@ public class KanbanMaterialService { ...@@ -47,55 +49,21 @@ public class KanbanMaterialService {
@Autowired @Autowired
private CalPlanWorkunitMapper calPlanWorkunitMapper; private CalPlanWorkunitMapper calPlanWorkunitMapper;
@Autowired @Autowired
private IMdWorkunitService workunitService; private ErpKanbanService erpKanbanService;
public ErpDataDto getErpData(){ public ErpDataDto getErpData(){
ErpDataDto rst = new ErpDataDto(); return erpKanbanService.getMaterialStat().getData();
rst.setMaterialDistRatio(new BigDecimal("42"));
//趋势图
ErpDataDto.InventoryTrend inventoryTrend = new ErpDataDto.InventoryTrend();
List<BasicDailyData> stockInTrend = new ArrayList<>();
LocalDateTime start = LocalDateTime.now().withDayOfMonth(1).with(LocalTime.MIN);
LocalDateTime end = start.plusMonths(1).plusDays(-1).with(LocalTime.MAX);
int dayOfMonth = end.getDayOfMonth();
for(int i=1;i<=dayOfMonth;i++){
stockInTrend.add(new BasicDailyData(i, new BigDecimal(new Random().nextInt(10))));
}
inventoryTrend.setStockInTrend(stockInTrend);
List<BasicDailyData> stockOutTrend = new ArrayList<>();
inventoryTrend.setStockOutTrend(stockOutTrend);
for(int i=1;i<=dayOfMonth;i++){
stockOutTrend.add(new BasicDailyData(i, new BigDecimal(new Random().nextInt(10))));
}
rst.setInventoryTrend(inventoryTrend);
rst.setStockInCompleteRatio(new BigDecimal("24.2"));
rst.setSalesTimelyDeliveryRatio(new BigDecimal("43.2"));
List<ErpDataDto.SalesOutboundPlan> salesOutboundPlanList = new ArrayList<>();
for(int i=0;i<8;i++){
ErpDataDto.SalesOutboundPlan plan = new ErpDataDto.SalesOutboundPlan();
plan.setPlanOutDate(new Date());
plan.setOutApplyNo("JS201232" + i);
plan.setOutQuantity(new BigDecimal(new Random().nextInt(20)));
plan.setPlanQuantity(new BigDecimal(new Random().nextInt(20)));
salesOutboundPlanList.add(plan);
}
rst.setSalesOutboundPlanList(salesOutboundPlanList);
return rst;
} }
public MesDataDto getMesData(){ public MesDataDto getMesData(){
MesDataDto rst = new MesDataDto(); MesDataDto rst = new MesDataDto();
rst.setStockInCompleteRatio(new BigDecimal("52")); LocalDateTime currMonth = LocalDateTime.now().withDayOfMonth(1).with(LocalTime.MIN);
List<MesDataDto.OrderInfoDto> orderInfoList = new ArrayList<>(); LocalDateTime nextMonth = currMonth.plusMonths(1);
for(int i=0;i<10;i++){ BasicRatio basicRatio = taskWorkunitMapper.selectStockInCompleteRatio(currMonth, nextMonth);
MesDataDto.OrderInfoDto temp = new MesDataDto.OrderInfoDto(); if(basicRatio.getDenominator()!=null&&basicRatio.getDenominator().compareTo(BigDecimal.ZERO)!=0){
temp.setItemName("测试"+i); rst.setStockInCompleteRatio(basicRatio.getNumerator().divide(basicRatio.getDenominator(), 3, BigDecimal.ROUND_DOWN).multiply(new BigDecimal("100")));
temp.setWorkorderNo("B20123212"+i);
temp.setPlanFinishDate(new Date());
temp.setFinishQuantity(new BigDecimal("200"));
temp.setPlanQuantity(new BigDecimal("300"));
orderInfoList.add(temp);
} }
List<MesDataDto.OrderInfoDto> orderInfoList = taskWorkunitMapper.selectTaskWorkUnitWithKanban(currMonth, nextMonth);
rst.setOrderInfoList(orderInfoList); rst.setOrderInfoList(orderInfoList);
return rst; return rst;
} }
......
...@@ -2,6 +2,8 @@ package com.ximai.mes.pro.mapper.task; ...@@ -2,6 +2,8 @@ package com.ximai.mes.pro.mapper.task;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ximai.mes.kanban.dto.BasicRatio;
import com.ximai.mes.kanban.dto.material.MesDataDto;
import com.ximai.mes.pro.domain.proWorkOrder.ProWorkorder; import com.ximai.mes.pro.domain.proWorkOrder.ProWorkorder;
import com.ximai.mes.pro.domain.task.ProTask; import com.ximai.mes.pro.domain.task.ProTask;
import com.ximai.mes.pro.domain.task.ProTaskWorkunit; import com.ximai.mes.pro.domain.task.ProTaskWorkunit;
...@@ -10,6 +12,8 @@ import com.ximai.mes.pro.dto.task.WorkunitProcessingDto; ...@@ -10,6 +12,8 @@ import com.ximai.mes.pro.dto.task.WorkunitProcessingDto;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
...@@ -212,4 +216,31 @@ public interface ProTaskWorkunitMapper extends BaseMapper<ProTaskWorkunit> { ...@@ -212,4 +216,31 @@ public interface ProTaskWorkunitMapper extends BaseMapper<ProTaskWorkunit> {
"${ew.customSqlSegment} ") "${ew.customSqlSegment} ")
List<ProTaskWorkunitDto> selectTaskWorkUnitWithKanban(@Param("ew") QueryWrapper<ProTaskWorkunit> query); List<ProTaskWorkunitDto> selectTaskWorkUnitWithKanban(@Param("ew") QueryWrapper<ProTaskWorkunit> query);
/**
* 物料综合看板专用
* @param startDate 开始时间
* @param endDate 结束时间
* @return
*/
@Select(value = "select t2.arrange_code as workorderNo,wo.product_name as itemName,max(t1.schedule_end_date) planFinishDate,sum(t1.quantity) planQuantity,sum(t1.quantity_produced) finishQuantity\n" +
"from pro_task_workunit t1 left join pro_task t2 on t1.task_id = t2.task_id\n" +
"left join pro_task_workorder tw on t2.task_id = tw.task_id\n" +
"left join pro_workorder wo on wo.workorder_id = tw.workorder_id\n" +
"where t1.schedule_end_date > #{startDate} and t1.schedule_end_date < #{endDate} \n" +
"and t2.is_last_process = 1 group by t2.arrange_code,wo.product_name")
List<MesDataDto.OrderInfoDto> selectTaskWorkUnitWithKanban(@Param("startDate") LocalDateTime startDate, @Param("endDate") LocalDateTime endDate);
/**
* 物料综合看板入库完成率
* @param startDate 开始时间
* @param endDate 结束时间
* @return
*/
@Select(value = "select ifnull(sum(t1.quantity),0) denominator,ifnull(sum(t1.quantity_produced),0) numerator from pro_task_workunit t1 left join pro_task t2 on t1.task_id = t2.task_id\n" +
"where t1.schedule_end_date > #{startDate} and t1.schedule_end_date < #{endDate} \n" +
"and t2.is_last_process = 1")
BasicRatio selectStockInCompleteRatio(@Param("startDate") LocalDateTime startDate, @Param("endDate") LocalDateTime endDate);
} }
package com.ximai.mes.remote;
import com.ximai.common.annotation.ApiLog;
import com.ximai.common.enums.BusinessType;
import com.ximai.common.enums.InOutType;
import com.ximai.mes.kanban.dto.material.ErpDataDto;
import com.ximai.mes.remote.dto.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import java.util.List;
/**
* erp远程调用接口
*/
@FeignClient(value = "erp-kanbanService", url = "${remote.erp.url}")
public interface ErpKanbanService {
@ApiLog(businessType = BusinessType.QUERY, inOutType = InOutType.OUT)
@ApiOperation(value = "物料看板ERP数据")
@PostMapping(value = "/materialStat/allData")
ErpResponseResult<ErpDataDto> getMaterialStat();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment