fix task plan

plp
chenshuichuan 2 years ago
parent d6a173c070
commit 4b163dfb55

@ -51,6 +51,7 @@ CREATE TABLE `mes_energy_device_check_record`
(
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
`device_id` bigint NOT NULL COMMENT '能源设备Id',
`device_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '设备类型',
`last_check_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '上次抄表时间',
`last_check_value` decimal(24, 6) DEFAULT NULL COMMENT '上次抄表值',
`check_value` decimal(24, 6) DEFAULT NULL COMMENT '抄表值',
@ -70,3 +71,5 @@ CREATE TABLE `mes_energy_device_check_record`
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT ='抄表记录';

@ -20,6 +20,8 @@ public class EnergyDeviceCheckRecordPageReqVO extends PageParam {
@Schema(description = "能源设备Id", example = "17334")
private Long deviceId;
@Schema(description = "设备类型", example = "1")
private String deviceType;
@Schema(description = "抄表时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)

@ -16,7 +16,9 @@ public class EnergyDeviceCheckRecordRespVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "13646")
@ExcelProperty("ID")
private Long id;
@Schema(description = "设备类型", example = "1")
@ExcelProperty("设备类型")
private String deviceType;
@Schema(description = "能源设备Id", requiredMode = Schema.RequiredMode.REQUIRED, example = "17334")
@ExcelProperty("能源设备Id")
private Long deviceId;

@ -13,7 +13,8 @@ public class EnergyDeviceCheckRecordSaveReqVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "13646")
private Long id;
@Schema(description = "设备类型", example = "1")
private String deviceType;
@Schema(description = "能源设备Id", requiredMode = Schema.RequiredMode.REQUIRED, example = "17334")
@NotNull(message = "能源设备Id不能为空")
private Long deviceId;

@ -6,6 +6,8 @@ import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.PlanRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.task.vo.TaskPlanParam;
import cn.iocoder.yudao.module.mes.dal.dataobject.plan.PlanDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.task.TaskDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.task.TaskDetailDO;
import cn.iocoder.yudao.module.mes.dal.mysql.plan.PlanMapper;
import cn.iocoder.yudao.module.mes.service.bom.BomService;
import cn.iocoder.yudao.module.mes.service.itemrequisition.ItemAnalysisService;
import cn.iocoder.yudao.module.mes.service.itemrequisition.entity.ItemRequisitionAndStock;
@ -38,6 +40,8 @@ public class TaskItemNeedController {
@Resource
private PlanService planService;
@Resource
private PlanMapper planMapper;
@Resource
private ErpProductService productService;
@Resource
private BomService bomService;
@ -130,4 +134,33 @@ public class TaskItemNeedController {
else return dateTimes[index];
}
/**
* taskId id
* ,ProductsOfPlan
*
**/
@GetMapping("/generate-plan/byTaskDetail")
@Operation(summary = "对生产任务单进行计划")
public CommonResult<List<PlanRespVO>> generatePlanByTaskDetail(@Valid TaskPlanParam planParam) {
if(planParam.getPlanDate() != null){
//对得到的日期做一下排序,防止拿到的是乱序日期
Arrays.sort(planParam.getPlanDate(), Comparator.naturalOrder());
}
TaskDetailDO detailDO = taskService.getTaskDetail(planParam.getTaskId());
//已经计划数 planMapper.selectSumTaskDetail(detailDO.getId(),null);
Long number = planParam.getPlanNumber();
if(number==null)number = detailDO.getNumber();
//生成计划
List<PlanDO> planList = taskService.generatePlan3(detailDO.getTaskId(),detailDO.getId(),
detailDO.getProductId(), number, planParam.getProductsOfPlan());
//计划排日期
int dateCount = 0;
for (int i = 0; i < planList.size(); i++) {
planList.get(i).setPlanEndTime(getNextDate(dateCount, planParam.getPlanDate()));
planList.get(i).setPlanStartTime(getNextDate(dateCount, planParam.getPlanDate()));
dateCount++;
}
return success(planService.buildVOList(planList));
}
}

@ -38,6 +38,10 @@ public class TaskDetailRespVO {
@ExcelProperty("数量")
private Long number;
@Schema(description = "已计划", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("已计划数量")
private Long planNumber;
@Schema(description = "打包要求(每包/个)", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("打包要求(每包/个)")
private Long packageSize;

@ -20,7 +20,8 @@ public class TaskPlanParam {
private int sizeOfPlan;
@Schema(description = "计划产品数")
private int productsOfPlan;
@Schema(description = "需要计划的数")
private Long planNumber ;
@Schema(description = "日期")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)

@ -33,6 +33,8 @@ public class EnergyDeviceCheckRecordDO extends BaseDO {
* Id
*/
private Long deviceId;
//@Schema(description = "设备类型", example = "1")
private String deviceType;
/**
*
*/

@ -98,5 +98,16 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
@Update("UPDATE mes_plan SET status = #{status} WHERE id = #{id}")
void updateStatus(@Param("id") Long id, @Param("status") Integer status);
default Long selectSumTaskDetail(Long taskDetailId, List<Integer> statusList) {
// SQL sum 查询
List<Map<String, Object>> result = selectMaps(new QueryWrapper<PlanDO>()
.select("SUM(plan_number) AS sumCount")
.in(statusList != null && statusList.size() > 0, "status", statusList)
.eq(taskDetailId != null, "task_detail_id", taskDetailId));
// 获得数量
if (CollUtil.isEmpty(result)) {
return 0L;
}
return MapUtil.getLong(result.get(0), "sumCount", 0L);
}
}

@ -64,7 +64,7 @@ public class BomServiceImpl implements BomService {
if (createReqVO.getIsEnable()) {
BomDO temp = bomMapper.selectByProductId(createReqVO.getProductId());
if (temp != null) {
throw exception(new ErrorCode(500, "每个产品启用的BOM只能有一个请先禁用改产品其他BOM"));
throw exception(BOM_EXISTS);
}
}
// 插入

@ -43,8 +43,9 @@ public class EnergyDeviceCheckRecordServiceImpl implements EnergyDeviceCheckReco
EnergyDeviceCheckRecordDO energyDeviceCheckRecord = BeanUtils.toBean(createReqVO, EnergyDeviceCheckRecordDO.class);
energyDeviceCheckRecord.setLastCheckTime(energyDeviceDO.getLastCheckTime());
energyDeviceCheckRecord.setLastCheckValue(energyDeviceDO.getLastCheckValue());
BigDecimal diff = energyDeviceCheckRecord.getCheckValue().subtract(energyDeviceDO.getLastCheckValue()).abs();
energyDeviceCheckRecord.setDeviceType(energyDeviceDO.getDeviceType());
BigDecimal last = energyDeviceDO.getLastCheckValue()==null? BigDecimal.ZERO : energyDeviceDO.getLastCheckValue();
BigDecimal diff = energyDeviceCheckRecord.getCheckValue().subtract(last).abs();
energyDeviceCheckRecord.setDiffValue(diff);
energyDeviceCheckRecordMapper.insert(energyDeviceCheckRecord);

@ -15,6 +15,9 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.ENERGY_DEVICE_CHECK_RECORD_NOT_EXISTS;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.ENERGY_DEVICE_NOT_EXISTS;
@ -87,8 +90,26 @@ public class EnergyDeviceServiceImpl implements EnergyDeviceService {
}
@Override
@Transactional(rollbackFor = Exception.class)
public Long createEnergyDeviceCheckRecord(EnergyDeviceCheckRecordDO energyDeviceCheckRecord) {
if(energyDeviceCheckRecord.getCheckTime()==null)
energyDeviceCheckRecord.setCheckTime(LocalDateTime.now());
EnergyDeviceDO energyDeviceDO = energyDeviceMapper.selectById(energyDeviceCheckRecord.getDeviceId());
// 插入
;
energyDeviceCheckRecord.setLastCheckTime(energyDeviceDO.getLastCheckTime());
energyDeviceCheckRecord.setLastCheckValue(energyDeviceDO.getLastCheckValue());
energyDeviceCheckRecord.setDeviceType(energyDeviceDO.getDeviceType());
BigDecimal last = energyDeviceDO.getLastCheckValue()==null? BigDecimal.ZERO : energyDeviceDO.getLastCheckValue();
BigDecimal diff = energyDeviceCheckRecord.getCheckValue().subtract(last).abs();
energyDeviceCheckRecord.setDiffValue(diff);
energyDeviceCheckRecordMapper.insert(energyDeviceCheckRecord);
energyDeviceDO.setLastCheckTime(energyDeviceCheckRecord.getCheckTime());
energyDeviceDO.setLastCheckValue(energyDeviceCheckRecord.getCheckValue());
energyDeviceMapper.updateById(energyDeviceDO);
// 返回
return energyDeviceCheckRecord.getId();
}

@ -160,4 +160,8 @@ public interface TaskService {
*/
List<PlanDO> generatePlan2(Long taskId, Long productId, Long totalNumber, int productsOfPlan);
/**
* ididplanDO
* */
List<PlanDO> generatePlan3(Long taskId,Long taskDetailId, Long productId, Long totalNumber, int productsOfPlan);
}

@ -197,12 +197,18 @@ public class TaskServiceImpl implements TaskService {
Map<Long, ErpProductUnitDO> unitMap = productUnitService.getProductUnitMap(
convertSet(list, TaskDetailDO::getUnitId));
return BeanUtils.toBean(list, TaskDetailRespVO.class, item -> {
List<TaskDetailRespVO> resList = BeanUtils.toBean(list, TaskDetailRespVO.class, item -> {
MapUtils.findAndThen(map, item.getProductId(),
product -> item.setProductName(product.getName()));
MapUtils.findAndThen(unitMap, item.getUnitId(),
unit -> item.setUnitName(unit.getName()));
});
for (TaskDetailRespVO respVO : resList) {
Long number = planMapper.selectSumTaskDetail(respVO.getId(),null);
respVO.setPlanNumber(number);
}
return resList;
}
@Override
@ -275,5 +281,22 @@ public class TaskServiceImpl implements TaskService {
}
return list;
}
//根据生产任务单明细生成排产计划
@Override
public List<PlanDO> generatePlan3(Long taskId,Long taskDetailId, Long productId, Long totalNumber, int productsOfPlan) {
List<PlanDO> list = new ArrayList<>();
for (; totalNumber > 0; ) {
PlanDO planDO = new PlanDO().setTaskId(taskId).setTaskDetailId(taskDetailId).setProductId(productId).setFinishNumber(0L)
.setIsEnable(true).setStatus(PlanStatusEnum..getValue());
//剩下的不一定满productsOfPlan
if (totalNumber - productsOfPlan >= 0)
planDO.setPlanNumber((long) productsOfPlan);
else planDO.setPlanNumber((long) totalNumber);
totalNumber = totalNumber - productsOfPlan;
planDO.setCode(noRedisDAO.generate3(MesNoRedisDAO.PLAN_NO_PREFIX));
planDO.setPriorityNum(1L);
list.add(planDO);
}
return list;
}
}
Loading…
Cancel
Save