|
@@ -8,15 +8,16 @@ import com.rongwe.scentity.domian.*;
|
|
|
import com.rongwe.scentity.vo.CheckTemplateItemsVo;
|
|
|
import com.rongwe.scentity.vo.CheckTemplateVo;
|
|
|
import com.rongwei.commonservice.serial.service.CommonDictService;
|
|
|
-import com.rongwei.commonservice.serial.service.SysSerialNumberService;
|
|
|
-import com.rongwei.rwadmincommon.system.dao.SysUserDao;
|
|
|
import com.rongwei.rwadmincommon.system.domain.SysDictDo;
|
|
|
+import com.rongwei.rwadmincommon.system.vo.SysUserVo;
|
|
|
import com.rongwei.rwcommon.base.BaseDo;
|
|
|
+import com.rongwei.rwcommon.base.R;
|
|
|
import com.rongwei.rwcommon.utils.SecurityUtil;
|
|
|
import com.rongwei.rwcommon.utils.StringUtils;
|
|
|
import com.rongwei.rwcommon.vo.generalsql.GeneralApiParameter;
|
|
|
import com.rongwei.rwcommon.vo.generalsql.SlaveDMLVo;
|
|
|
import com.rongwei.safecommon.utils.JSCommonUtils;
|
|
|
+import com.rongwei.sfcommon.sys.dao.AspShiftTimeDao;
|
|
|
import com.rongwei.sfcommon.sys.dao.CheckTemplateDao;
|
|
|
import com.rongwei.sfcommon.sys.service.*;
|
|
|
import com.rongwei.sfcommon.utils.MlConstants;
|
|
@@ -28,10 +29,12 @@ import org.springframework.stereotype.Service;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
+import static com.rongwei.safecommon.utils.JSCommonUtils.parameterCheck;
|
|
|
import static com.rongwei.safecommon.utils.JSCommonUtils.streamCodeGeneration;
|
|
|
import static com.rongwei.safecommon.utils.SaveConstans.NotifyContent.INSPECTION_CONTENT;
|
|
|
import static com.rongwei.safecommon.utils.SaveConstans.NotifyTitle.INSPECTION_TITLE;
|
|
|
import static com.rongwei.safecommon.utils.SaveConstans.NotifyType.INSPECTION;
|
|
|
+import static com.rongwei.sfcommon.utils.MlConstants.*;
|
|
|
|
|
|
@Service("checkTemplateService")
|
|
|
public class CheckTemplateServiceImpl extends ServiceImpl<CheckTemplateDao, CheckTemplateDo> implements CheckTemplateService {
|
|
@@ -50,14 +53,15 @@ public class CheckTemplateServiceImpl extends ServiceImpl<CheckTemplateDao, Chec
|
|
|
add("november");
|
|
|
add("december");
|
|
|
}};
|
|
|
+ public static final HashMap<String, Object> SHIFT_TIME_QUERY = new HashMap<String, Object>() {{
|
|
|
+ put("DELETED", "0");
|
|
|
+ }};
|
|
|
private static final Logger logger = LoggerFactory.getLogger(CheckTemplateServiceImpl.class);
|
|
|
@Autowired
|
|
|
private CheckTemplateItemsService checkTemplateItemsService;
|
|
|
@Autowired
|
|
|
private CommonDictService commonDictService;
|
|
|
@Autowired
|
|
|
- private SysSerialNumberService sysSerialNumberService;
|
|
|
- @Autowired
|
|
|
private CheckItemsService checkItemsService;
|
|
|
@Autowired
|
|
|
private CheckItemsDutyuserService checkItemsDutyuserService;
|
|
@@ -68,7 +72,11 @@ public class CheckTemplateServiceImpl extends ServiceImpl<CheckTemplateDao, Chec
|
|
|
@Autowired
|
|
|
private CheckItemContentService checkItemContentService;
|
|
|
@Autowired
|
|
|
- private SysUserDao sysUserDao;
|
|
|
+ private AspShiftTimeDao aspShiftTimeDao;
|
|
|
+ @Autowired
|
|
|
+ private ThemeCheckItemService themeCheckItemService;
|
|
|
+ @Autowired
|
|
|
+ private ThemeCheckContentService themeCheckContentService;
|
|
|
|
|
|
/**
|
|
|
* 通用Map转自定义业务实体类
|
|
@@ -128,6 +136,7 @@ public class CheckTemplateServiceImpl extends ServiceImpl<CheckTemplateDao, Chec
|
|
|
/**
|
|
|
* 定时调度(每天)创建点检任务
|
|
|
*/
|
|
|
+ @Deprecated
|
|
|
public void pointCheckCreate(Map<String, Object> map) {
|
|
|
logger.info("点检定时任务生成开始.....");
|
|
|
if (map == null) {
|
|
@@ -205,15 +214,15 @@ public class CheckTemplateServiceImpl extends ServiceImpl<CheckTemplateDao, Chec
|
|
|
}
|
|
|
|
|
|
// 白班
|
|
|
- if (MlConstants.CHECK_SHIFT_EVERY_SHIFT.equals(shift) || MlConstants.CHECK_SHIFT_EVERY_DAY_SHIFT.equals(shift)) {
|
|
|
+ if (CHECK_SHIFT_EVERY_SHIFT.equals(shift) || MlConstants.CHECK_SHIFT_EVERY_DAY_SHIFT.equals(shift)) {
|
|
|
addCheckItems(dayItems, shiftcount, checkTemplateItem);
|
|
|
}
|
|
|
// 夜班
|
|
|
- if (MlConstants.CHECK_SHIFT_EVERY_SHIFT.equals(shift) || MlConstants.CHECK_SHIFT_EVERY_NIGHT_SHIFT.equals(shift)) {
|
|
|
+ if (CHECK_SHIFT_EVERY_SHIFT.equals(shift) || CHECK_SHIFT_EVERY_NIGHT_SHIFT.equals(shift)) {
|
|
|
addCheckItems(nightItems, shiftcount, checkTemplateItem);
|
|
|
}
|
|
|
// 中班
|
|
|
- if (MlConstants.CHECK_SHIFT_EVERY_SHIFT.equals(shift) || MlConstants.CHECK_SHIFT_EVERY_MIDDLE_SHIFT.equals(shift)) {
|
|
|
+ if (CHECK_SHIFT_EVERY_SHIFT.equals(shift) || CHECK_SHIFT_EVERY_MIDDLE_SHIFT.equals(shift)) {
|
|
|
addCheckItems(middleItems, shiftcount, checkTemplateItem);
|
|
|
}
|
|
|
// 长白班 每班数据不需要生成长白班
|
|
@@ -226,9 +235,9 @@ public class CheckTemplateServiceImpl extends ServiceImpl<CheckTemplateDao, Chec
|
|
|
// 白班任务
|
|
|
createPointCheckByTemplate(checkTemplate, dayItems, MlConstants.CHECK_SHIFT_EVERY_DAY_SHIFT);
|
|
|
// 中班任务
|
|
|
- createPointCheckByTemplate(checkTemplate, middleItems, MlConstants.CHECK_SHIFT_EVERY_MIDDLE_SHIFT);
|
|
|
+ createPointCheckByTemplate(checkTemplate, middleItems, CHECK_SHIFT_EVERY_MIDDLE_SHIFT);
|
|
|
// 夜班任务
|
|
|
- createPointCheckByTemplate(checkTemplate, nightItems, MlConstants.CHECK_SHIFT_EVERY_NIGHT_SHIFT);
|
|
|
+ createPointCheckByTemplate(checkTemplate, nightItems, CHECK_SHIFT_EVERY_NIGHT_SHIFT);
|
|
|
// 长白班任务
|
|
|
createPointCheckByTemplate(checkTemplate, changbaiClassItems, MlConstants.CHECK_SHIFT_EVERY_CHANGBAI_CLASS_SHIFT);
|
|
|
}
|
|
@@ -240,9 +249,12 @@ public class CheckTemplateServiceImpl extends ServiceImpl<CheckTemplateDao, Chec
|
|
|
* @return 是否可以生成任务
|
|
|
*/
|
|
|
private boolean isNowCreateByFrequency(String frequency) {
|
|
|
+ if (StringUtils.isBlank(frequency)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
boolean isCreate = true;
|
|
|
String[] frequencys = frequency.split("/");
|
|
|
- if (frequencys != null && frequencys.length > 0) {
|
|
|
+ if (frequencys.length > 0) {
|
|
|
// 每天
|
|
|
if ("day".equals(frequencys[0])) {
|
|
|
isCreate = true;
|
|
@@ -484,4 +496,148 @@ public class CheckTemplateServiceImpl extends ServiceImpl<CheckTemplateDao, Chec
|
|
|
this.updateById(checkTemplate);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据模板ID创建计划
|
|
|
+ *
|
|
|
+ * @param id
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public R createCheckPlanByTempId(String id) {
|
|
|
+ CheckTemplateDo checkTemplateDo = this.getById(id);
|
|
|
+ parameterCheck(() -> checkTemplateDo == null, "检查模板不存在", "检查模板不存在");
|
|
|
+ // 生产检查任务
|
|
|
+ assembleCheckPlan(Collections.singletonList(checkTemplateDo), true);
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void assembleCheckPlan(List<CheckTemplateDo> checkTemplateDos, boolean singleExecution) {
|
|
|
+ // 各班次需要生产任务的模板信息
|
|
|
+ Map<String, List<CheckTemplateDo>> shiftTypeAndTempMap = new HashMap<>();
|
|
|
+ if (!singleExecution) {
|
|
|
+ // 获取本次可以生成计划的模板信息
|
|
|
+ checkTemplateDos = checkTemplateDos.stream().filter(data -> isNowCreateByFrequency(data.getFrequency())).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ // 获取工作时间信息
|
|
|
+ List<AspShiftTimeDo> aspShiftTimeDos = aspShiftTimeDao.selectByMap(SHIFT_TIME_QUERY);
|
|
|
+
|
|
|
+ log.debug("本次需要生成");
|
|
|
+ checkTemplateDos.forEach(tempDao -> {
|
|
|
+ if (tempDao.getShift().contains(CHECK_SHIFT_EVERY_DAY_SHIFT)) {
|
|
|
+ shiftTypeAndTempMap.computeIfAbsent(CHECK_SHIFT_EVERY_DAY_SHIFT, k -> new ArrayList<>()).add(tempDao);
|
|
|
+ } else if (tempDao.getShift().contains(CHECK_SHIFT_EVERY_MIDDLE_SHIFT)) {
|
|
|
+ // 中班
|
|
|
+ shiftTypeAndTempMap.computeIfAbsent(CHECK_SHIFT_EVERY_MIDDLE_SHIFT, k -> new ArrayList<>()).add(tempDao);
|
|
|
+ } else if (tempDao.getShift().contains(CHECK_SHIFT_EVERY_NIGHT_SHIFT)) {
|
|
|
+ // 夜班
|
|
|
+ shiftTypeAndTempMap.computeIfAbsent(CHECK_SHIFT_EVERY_NIGHT_SHIFT, k -> new ArrayList<>()).add(tempDao);
|
|
|
+ } else if (tempDao.getShift().contains(CHECK_SHIFT_EVERY_CHANGBAI_CLASS_SHIFT)) {
|
|
|
+ // 长白班
|
|
|
+ shiftTypeAndTempMap.computeIfAbsent(CHECK_SHIFT_EVERY_CHANGBAI_CLASS_SHIFT, k -> new ArrayList<>()).add(tempDao);
|
|
|
+ } else if (tempDao.getShift().contains(CHECK_SHIFT_EVERY_SHIFT)) {
|
|
|
+ // 每班
|
|
|
+ shiftTypeAndTempMap.computeIfAbsent(CHECK_SHIFT_EVERY_DAY_SHIFT, k -> new ArrayList<>()).add(tempDao);
|
|
|
+ shiftTypeAndTempMap.computeIfAbsent(CHECK_SHIFT_EVERY_MIDDLE_SHIFT, k -> new ArrayList<>()).add(tempDao);
|
|
|
+ shiftTypeAndTempMap.computeIfAbsent(CHECK_SHIFT_EVERY_NIGHT_SHIFT, k -> new ArrayList<>()).add(tempDao);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // 获取检查模板ID
|
|
|
+ List<String> tempId = checkTemplateDos.stream().map(CheckTemplateDo::getId).collect(Collectors.toList());
|
|
|
+ // 获取模板对应的检查项
|
|
|
+ List<CheckTemplateItemsDo> templateItemsDos = checkTemplateItemsService.list(new LambdaQueryWrapper<CheckTemplateItemsDo>()
|
|
|
+ .in(CheckTemplateItemsDo::getChecktemplateid, tempId)
|
|
|
+ .eq(BaseDo::getDeleted, "0"));
|
|
|
+ SysUserVo currentUser = JSCommonUtils.getCurrentUser();
|
|
|
+ // 获取当前时间的0点0分0秒
|
|
|
+ Calendar startCalendar = Calendar.getInstance();
|
|
|
+ startCalendar.setTime(new Date());
|
|
|
+ startCalendar.set(Calendar.HOUR_OF_DAY, 0);
|
|
|
+ startCalendar.set(Calendar.MINUTE, 0);
|
|
|
+ startCalendar.set(Calendar.SECOND, 1);
|
|
|
+ Calendar endCalendar = Calendar.getInstance();
|
|
|
+ endCalendar.setTime(new Date());
|
|
|
+ // 获取当前时间的23点59分59秒
|
|
|
+ endCalendar.set(Calendar.HOUR_OF_DAY, 23);
|
|
|
+ endCalendar.set(Calendar.MINUTE, 59);
|
|
|
+ endCalendar.set(Calendar.SECOND, 59);
|
|
|
+ endCalendar.set(Calendar.MILLISECOND, 999);
|
|
|
+ // 检查任务
|
|
|
+ List<ThemeCheckItemDo> themeCheckItemSaveDos = new ArrayList<>();
|
|
|
+ // 检查任务对应的检查项
|
|
|
+ List<ThemeCheckContentDo> themeCheckContentDos = new ArrayList<>();
|
|
|
+ ThemeCheckItemDo checkItemDo;
|
|
|
+ ThemeCheckContentDo themeCheckContentDo;
|
|
|
+ Date startTime = startCalendar.getTime();
|
|
|
+ Date endTime = endCalendar.getTime();
|
|
|
+ // 模板对应的检查项
|
|
|
+ List<CheckTemplateItemsDo> items;
|
|
|
+ for (Map.Entry<String, List<CheckTemplateDo>> entry : shiftTypeAndTempMap.entrySet()) {
|
|
|
+ String k = entry.getKey();
|
|
|
+ AspShiftTimeDo aspShiftTimeDo = aspShiftTimeDos.stream().filter(info -> k.equals(info.getShift())).findFirst().orElse(null);
|
|
|
+ basedOnShiftGenerateTime(aspShiftTimeDo, startTime, endTime);
|
|
|
+ for (CheckTemplateDo checkTemplateDo : entry.getValue()) {
|
|
|
+ checkItemDo = new ThemeCheckItemDo();
|
|
|
+ checkItemDo.setId(SecurityUtil.getUUID());
|
|
|
+ JSCommonUtils.setBaseDetail(checkItemDo, currentUser);
|
|
|
+ checkItemDo.setThemechecknum(JSCommonUtils.streamCodeGeneration("asp_theme_check_item_number",
|
|
|
+ "SC@{date:yyyyMM}@{serialNumber:#000000}", "date:yyyyMM", ""));
|
|
|
+ checkItemDo.setThemecheckid(checkTemplateDo.getId());
|
|
|
+ checkItemDo.setThemecheckname(checkTemplateDo.getTemplatename());
|
|
|
+ checkItemDo.setPlanstarttime(startTime);
|
|
|
+ checkItemDo.setPlanendtime(endTime);
|
|
|
+ checkItemDo.setChecktype(checkTemplateDo.getTemplatetype());
|
|
|
+ checkItemDo.setTenantid(checkTemplateDo.getTenantid());
|
|
|
+ // TODO:XH add 2024/8/16 暂不止如何处理
|
|
|
+// checkItemDo.setChecker();
|
|
|
+// checkItemDo.setCheckerid();
|
|
|
+ // TODO:XH add 2024/8/16 检查区域暂不处理
|
|
|
+// checkItemDo.setThemecheckworkspartid();
|
|
|
+// checkItemDo.setCheckworkspart();
|
|
|
+ checkItemDo.setCheckresult("20");
|
|
|
+ checkItemDo.setCheckstatus(THEME_CHECK_STATUS_WAIT);
|
|
|
+ themeCheckItemSaveDos.add(checkItemDo);
|
|
|
+ items = templateItemsDos.stream().filter(data -> checkTemplateDo.getId().equals(data.getChecktemplateid())).collect(Collectors.toList());
|
|
|
+ for (int i = 0; i < items.size(); i++) {
|
|
|
+ themeCheckContentDo = new ThemeCheckContentDo();
|
|
|
+ themeCheckContentDo.setItemsort(i+1);
|
|
|
+ themeCheckContentDo.setTenantid(checkTemplateDo.getTenantid());
|
|
|
+ themeCheckContentDo.setId(SecurityUtil.getUUID());
|
|
|
+ themeCheckContentDo.setThemecheckitemid(checkItemDo.getId());
|
|
|
+ JSCommonUtils.setBaseDetail(themeCheckContentDo, currentUser);
|
|
|
+ themeCheckContentDo.setCheckposition(items.get(i).getCheckposition());
|
|
|
+ themeCheckContentDo.setCheckmethod(items.get(i).getChecktype());
|
|
|
+ themeCheckContentDo.setCheckcontent(items.get(i).getCheckcontent());
|
|
|
+ themeCheckContentDo.setManagement(items.get(i).getManagement());
|
|
|
+ themeCheckContentDos.add(themeCheckContentDo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 数据存表
|
|
|
+ JSCommonUtils.batchChunk(themeCheckItemSaveDos, themeCheckItemService::saveBatch, 20);
|
|
|
+ JSCommonUtils.batchChunk(themeCheckContentDos, themeCheckContentService::saveBatch, 20);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void basedOnShiftGenerateTime(AspShiftTimeDo aspShiftTimeDo,
|
|
|
+ Date startTime, Date endTime) {
|
|
|
+ if (aspShiftTimeDo == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ String starttime = aspShiftTimeDo.getStarttime();
|
|
|
+ String endtime = aspShiftTimeDo.getEndtime();
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(new Date());
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(starttime.split(":")[0]));
|
|
|
+ calendar.set(Calendar.MINUTE, Integer.parseInt(starttime.split(":")[1]));
|
|
|
+ calendar.set(Calendar.SECOND, Integer.parseInt(starttime.split(":")[2]));
|
|
|
+ startTime = calendar.getTime();
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(endtime.split(":")[0]));
|
|
|
+ calendar.set(Calendar.MINUTE, Integer.parseInt(endtime.split(":")[1]));
|
|
|
+ calendar.set(Calendar.SECOND, Integer.parseInt(endtime.split(":")[2]));
|
|
|
+ endTime = calendar.getTime();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|