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;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BasicDailyData {
@ApiModelProperty("日")
int day;
......
......@@ -17,7 +17,7 @@ public class ErpDataDto {
@ApiModelProperty("采购到货完成率")
BigDecimal materialDistRatio;
@ApiModelProperty("salesTimelyDeliveryRatio")
@ApiModelProperty("销售发货及时率")
BigDecimal salesTimelyDeliveryRatio;
@ApiModelProperty("库存趋势图")
......@@ -40,6 +40,8 @@ public class ErpDataDto {
public static class SalesOutboundPlan{
@ApiModelProperty("通知单号")
String outApplyNo;
@ApiModelProperty("产品名称")
String itemName;
@JsonFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty("计划出库时间")
Date planOutDate;
......
......@@ -7,6 +7,7 @@ import com.ximai.common.utils.data.StringUtils;
import com.ximai.mes.cal.domain.CalPlanWorkunit;
import com.ximai.mes.cal.mapper.CalPlanWorkunitMapper;
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.EquipmentStatDto;
import com.ximai.mes.kanban.dto.material.BasicDailyData;
......@@ -24,6 +25,7 @@ import com.ximai.mes.qc.dto.QcAbnormalReportDto;
import com.ximai.mes.qc.dto.QcAbnormalReportStatusEnum;
import com.ximai.mes.qc.mapper.QcAbnormalReportMapper;
import com.ximai.mes.qc.service.IQcAbnormalReportService;
import com.ximai.mes.remote.ErpKanbanService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -47,55 +49,21 @@ public class KanbanMaterialService {
@Autowired
private CalPlanWorkunitMapper calPlanWorkunitMapper;
@Autowired
private IMdWorkunitService workunitService;
private ErpKanbanService erpKanbanService;
public ErpDataDto getErpData(){
ErpDataDto rst = new ErpDataDto();
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;
return erpKanbanService.getMaterialStat().getData();
}
public MesDataDto getMesData(){
MesDataDto rst = new MesDataDto();
rst.setStockInCompleteRatio(new BigDecimal("52"));
List<MesDataDto.OrderInfoDto> orderInfoList = new ArrayList<>();
for(int i=0;i<10;i++){
MesDataDto.OrderInfoDto temp = new MesDataDto.OrderInfoDto();
temp.setItemName("测试"+i);
temp.setWorkorderNo("B20123212"+i);
temp.setPlanFinishDate(new Date());
temp.setFinishQuantity(new BigDecimal("200"));
temp.setPlanQuantity(new BigDecimal("300"));
orderInfoList.add(temp);
LocalDateTime currMonth = LocalDateTime.now().withDayOfMonth(1).with(LocalTime.MIN);
LocalDateTime nextMonth = currMonth.plusMonths(1);
BasicRatio basicRatio = taskWorkunitMapper.selectStockInCompleteRatio(currMonth, nextMonth);
if(basicRatio.getDenominator()!=null&&basicRatio.getDenominator().compareTo(BigDecimal.ZERO)!=0){
rst.setStockInCompleteRatio(basicRatio.getNumerator().divide(basicRatio.getDenominator(), 3, BigDecimal.ROUND_DOWN).multiply(new BigDecimal("100")));
}
List<MesDataDto.OrderInfoDto> orderInfoList = taskWorkunitMapper.selectTaskWorkUnitWithKanban(currMonth, nextMonth);
rst.setOrderInfoList(orderInfoList);
return rst;
}
......
......@@ -2,6 +2,8 @@ package com.ximai.mes.pro.mapper.task;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.task.ProTask;
import com.ximai.mes.pro.domain.task.ProTaskWorkunit;
......@@ -10,6 +12,8 @@ import com.ximai.mes.pro.dto.task.WorkunitProcessingDto;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
/**
......@@ -212,4 +216,31 @@ public interface ProTaskWorkunitMapper extends BaseMapper<ProTaskWorkunit> {
"${ew.customSqlSegment} ")
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