Commit 4cfe91ee authored by litengwei's avatar litengwei

bug修改

parent c4f913a7
......@@ -24,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
......@@ -146,6 +147,7 @@ public class PlanController extends AbstractBaseController {
@RequestMapping(value = "/addPlan", produces = "application/json;charset=UTF-8", method = RequestMethod.POST)
public CommonResponse checkPlanAdd(@ApiParam(value = "巡检计划", required = true) @RequestBody Plan param) {
try {
String userId = RequestContext.getExeUserId();
if (param.getDayRate() == 1) {
long dayBeginTime = param.getDayBegin().getTime();
long dayEndTime = param.getDayEnd().getTime();
......@@ -159,25 +161,25 @@ public class PlanController extends AbstractBaseController {
HashMap<String, Object> map = new HashMap<>();
map.put("org_code", loginOrgCode);
List<String> userGroupIds = Objects.nonNull(param.getUserGroupId()) ? Arrays.asList(param.getUserGroupId().split(",")) : Collections.emptyList();
StringBuilder userIdSB = new StringBuilder(), userDeptSB = new StringBuilder(), userNameSB = new StringBuilder();
ResponseModel<List<UserDetailsDto>> response;
for (String userGroupId : userGroupIds) {
response = tzsFeign.getGroupAndPersonInfo(Long.valueOf(userGroupId));
if (response.getStatus() == 200) {
List<UserDetailsDto> resultList = response.getResult();
for (UserDetailsDto udd : resultList) {
userIdSB.append(",").append(udd.getUserId());
userDeptSB.append(",").append(udd.getUserId()).append("@").append(udd.getUnitOrgCode()).append("@").append(udd.getUnitName());
userNameSB.append(",").append(udd.getUserName());
}
}
}
String userId = StringUtils.hasText(userIdSB) ? userIdSB.substring(1) : "";
String userDept = StringUtils.hasText(userDeptSB) ? userDeptSB.substring(1) : "";
String userName = StringUtils.hasText(userNameSB) ? userNameSB.substring(1) : "";
param.setUserId(userId);
param.setUserDept(userDept);
// List<String> userGroupIds = Objects.nonNull(param.getUserGroupId()) ? Arrays.asList(param.getUserGroupId().split(",")) : Collections.emptyList();
// StringBuilder userIdSB = new StringBuilder(), userDeptSB = new StringBuilder(), userNameSB = new StringBuilder();
// ResponseModel<List<UserDetailsDto>> response;
// for (String userGroupId : userGroupIds) {
// response = tzsFeign.getGroupAndPersonInfo(Long.valueOf(userGroupId));
// if (response.getStatus() == 200) {
// List<UserDetailsDto> resultList = response.getResult();
// for (UserDetailsDto udd : resultList) {
// userIdSB.append(",").append(udd.getUserId());
// userDeptSB.append(",").append(udd.getUserId()).append("@").append(udd.getUnitOrgCode()).append("@").append(udd.getUnitName());
// userNameSB.append(",").append(udd.getUserName());
// }
// }
// }
// String userId = StringUtils.hasText(userIdSB) ? userIdSB.substring(1) : "";
// String userDept = StringUtils.hasText(userDeptSB) ? userDeptSB.substring(1) : "";
// String userName = StringUtils.hasText(userNameSB) ? userNameSB.substring(1) : "";
// param.setUserId(userId);
// param.setUserDept(userDept);
param.setBizOrgCode(loginOrgCode);
param.setBizOrgName(getCompanyName(reginParams));
......
......@@ -53,9 +53,9 @@ public class PlanServiceImpl implements IPlanService {
String org_code = map.get("org_code") == null ? "":map.get("org_code").toString();
String user_id = map.get("user_id")== null ? "":map.get("user_id").toString();
if(StringUtil.isNotEmpty(map.get("dept_id"))){
param.setDeptId(map.get("dept_id").toString());
}
// if(StringUtil.isNotEmpty(map.get("dept_id"))){
// param.setDeptId(map.get("dept_id").toString());
// }
param.setOrgCode(org_code);
param.setStatus(Byte.parseByte(XJConstant.PLAN_STATUS_START));
param.setNextGenDate(DateUtil.getIntervalDate(new Date(),0));
......
......@@ -717,156 +717,155 @@ public class PlanTaskServiceImpl implements IPlanTaskService {
paramMap.put("id", plan.getId());
paramMap.put("next_gen_date", DateUtil.formatDatrToStr(now, "yyyy-MM-dd"));
planMapper.updPlanStatusOrGenDate(paramMap);// 更新下次任务生成日期
}
// Toke toke = remoteSecurityService.getServerToken();
Map<String, String> deptMap = new HashMap<>();
try {
String isFixDate = plan.getIsFixedDate();// 是否固定日期
List<Long> pointIdList = iRoutePointDao.queryRoutePointIds(plan.getRouteId());
int pointNum = iRoutePointDao.countRoutePoint(plan.getRouteId());
long batchNo = now.getTime();
Set<String> departmentIds = new HashSet<>();
List<String> depts = Arrays.asList(plan.getUserDept().split(","));
depts.stream().forEach(dept -> {
deptMap.put(dept.substring(0, dept.indexOf("@")), dept.substring(dept.indexOf("@") + 1));
});
for (String entry : deptMap.keySet()) {
String entryValue = deptMap.get(entry);
departmentIds.add(entryValue);
}
} else {
Map<String, String> deptMap = new HashMap<>();
try {
String isFixDate = plan.getIsFixedDate();// 是否固定日期
List<Long> pointIdList = iRoutePointDao.queryRoutePointIds(plan.getRouteId());
int pointNum = iRoutePointDao.countRoutePoint(plan.getRouteId());
long batchNo = now.getTime();
Set<String> departmentIds = new HashSet<>();
List<String> depts = Arrays.asList(plan.getUserDept().split(","));
depts.stream().forEach(dept -> {
deptMap.put(dept.substring(0, dept.indexOf("@")), dept.substring(dept.indexOf("@") + 1));
});
for (String entry : deptMap.keySet()) {
String entryValue = deptMap.get(entry);
departmentIds.add(entryValue);
}
StringBuffer departmentIdBuffer = new StringBuffer();
Iterator<String> it = departmentIds.iterator();
while (it.hasNext()) {
departmentIdBuffer.append(it.next()).append(",");
}
StringBuffer departmentIdBuffer = new StringBuffer();
Iterator<String> it = departmentIds.iterator();
while (it.hasNext()) {
departmentIdBuffer.append(it.next()).append(",");
}
List<PlanTask> planTaskList = new ArrayList<>();
List<PlanTaskDetail> planTaskDetailListSync = new ArrayList<>();
PlanTask planTask = new PlanTask();
List<PlanTask> taskList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String startTime = list.get(i).get("BEGIN_TIME").toString();
String endTime = list.get(i).get("END_TIME").toString();
String userId = list.get(i).get("USER_ID") == null ? "-1" : list.get(i).get("USER_ID").toString();
String userDept = list.get(i).get("USER_DEPT") == null ? "-1" : list.get(i).get("USER_DEPT").toString();
String userName = list.get(i).get("USER_NAME") == null ? "-1" : String.valueOf(list.get(i).get("USER_NAME"));
String orgCode = list.get(i).get("ORG_CODE") == null ? "-1" : String.valueOf(list.get(i).get("ORG_CODE"));
String unitCode = list.get(i).get("UNIT_CODE") == null ? "-1" : String.valueOf(list.get(i).get("UNIT_CODE"));
List<PlanTask> planTaskList = new ArrayList<>();
List<PlanTaskDetail> planTaskDetailListSync = new ArrayList<>();
PlanTask planTask = new PlanTask();
List<PlanTask> taskList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String startTime = list.get(i).get("BEGIN_TIME").toString();
String endTime = list.get(i).get("END_TIME").toString();
String userId = list.get(i).get("USER_ID") == null ? "-1" : list.get(i).get("USER_ID").toString();
String userDept = list.get(i).get("USER_DEPT") == null ? "-1" : list.get(i).get("USER_DEPT").toString();
String userName = list.get(i).get("USER_NAME") == null ? "-1" : String.valueOf(list.get(i).get("USER_NAME"));
String orgCode = list.get(i).get("ORG_CODE") == null ? "-1" : String.valueOf(list.get(i).get("ORG_CODE"));
String unitCode = list.get(i).get("UNIT_CODE") == null ? "-1" : String.valueOf(list.get(i).get("UNIT_CODE"));
// planTask = iplanTaskDao.findByUserIdAndBeginTimeAndEndTimeAndPlanIdAndRouteId(userId, startTime, endTime, plan.getId(), plan.getRouteId());
// if (planTask != null) {
// continue;
// }
planTask = new PlanTask();
//修改巡检p_plan_task orgcode为执行人的org_code -- add by wujunkai 20201216
planTask.setOrgCode(orgCode);
planTask.setUserName(userName);
planTask.setUseCode(unitCode);
planTask.setPlanType(plan.getPlanType());
planTask.setPlanId(plan.getId());
planTask.setBatchNo(batchNo);
planTask.setRouteId(plan.getRouteId());
planTask.setInOrder(plan.getInOrder());
planTask.setUserId(userId);
planTask.setUserDept(userDept);
planTask.setPointNum(pointNum);
if (XJConstant.FIX_DATE_NO.equals(isFixDate)) {
if (sdf.parse(startTime).getTime() <= now.getTime() && sdf.parse(endTime).getTime() >= now.getTime()) {
planTask.setFinishStatus(XJConstant.TASK_STATUS_DEAL);
planTask.setFinishNum(0);
planTask = new PlanTask();
//修改巡检p_plan_task orgcode为执行人的org_code -- add by wujunkai 20201216
planTask.setOrgCode(orgCode);
planTask.setUserName(userName);
planTask.setUseCode(unitCode);
planTask.setPlanType(plan.getPlanType());
planTask.setPlanId(plan.getId());
planTask.setBatchNo(batchNo);
planTask.setRouteId(plan.getRouteId());
planTask.setInOrder(plan.getInOrder());
planTask.setUserId(userId);
planTask.setUserDept(userDept);
planTask.setPointNum(pointNum);
if (XJConstant.FIX_DATE_NO.equals(isFixDate)) {
if (sdf.parse(startTime).getTime() <= now.getTime() && sdf.parse(endTime).getTime() >= now.getTime()) {
planTask.setFinishStatus(XJConstant.TASK_STATUS_DEAL);
planTask.setFinishNum(0);
} else {
if (sdf.parse(endTime).getTime() < now.getTime()) {
planTask.setFinishStatus(XJConstant.TASK_STATUS_TIMEOUT);
planTask.setFinishNum(0);
}
}
} else {
if (sdf.parse(startTime).getTime() <= now.getTime() && sdf.parse(endTime).getTime() >= now.getTime()) {
planTask.setFinishStatus(XJConstant.TASK_STATUS_DEAL);
planTask.setFinishNum(0);
}
if (sdf.parse(endTime).getTime() < now.getTime()) {
planTask.setFinishStatus(XJConstant.TASK_STATUS_TIMEOUT);
planTask.setFinishNum(0);
}
}
} else {
if (sdf.parse(startTime).getTime() <= now.getTime() && sdf.parse(endTime).getTime() >= now.getTime()) {
planTask.setFinishStatus(XJConstant.TASK_STATUS_DEAL);
planTask.setFinishNum(0);
if (XJConstant.CHECK_CHANGE_YES.equals(flag)) {
planTask.setFinishStatus(XJConstant.TASK_STATUS_FINISH);
planTask.setFinishNum(pointNum);
}
if (sdf.parse(endTime).getTime() < now.getTime()) {
planTask.setFinishStatus(XJConstant.TASK_STATUS_TIMEOUT);
planTask.setFinishNum(0);
if (XJConstant.FIX_DATE_YES.equals(isFixDate) || (XJConstant.FIX_DATE_NO.equals(isFixDate)
&& XJConstant.PLAN_TYPE_DAY.equals(plan.getPlanType()))) {
planTask.setCheckDate(list.get(i).get("BEGIN_TIME").toString().substring(0, 10));
}
}
if (XJConstant.CHECK_CHANGE_YES.equals(flag)) {
planTask.setFinishStatus(XJConstant.TASK_STATUS_FINISH);
planTask.setFinishNum(pointNum);
}
if (XJConstant.FIX_DATE_YES.equals(isFixDate) || (XJConstant.FIX_DATE_NO.equals(isFixDate)
&& XJConstant.PLAN_TYPE_DAY.equals(plan.getPlanType()))) {
planTask.setCheckDate(list.get(i).get("BEGIN_TIME").toString().substring(0, 10));
}
planTask.setBeginTime(startTime);
planTask.setEndTime(endTime);
// 1.保存执行数据主表
// iplanTaskDao.saveAndFlush(planTask);
taskList.add(planTask);
// 发送APP待办消息 (20220617 改为定时任务发送消息)
planTask.setBeginTime(startTime);
planTask.setEndTime(endTime);
// 1.保存执行数据主表
// iplanTaskDao.saveAndFlush(planTask);
taskList.add(planTask);
// 发送APP待办消息 (20220617 改为定时任务发送消息)
// sendMessage(plan, planTask);
String executorId = planTask.getUserId();
em.persist(planTask);
for (int i1 = 0; i1 < pointIdList.size(); i1++) {
Number pointId = pointIdList.get(i1);
PlanTaskDetail planTaskDetailInstance = new PlanTaskDetail();
planTaskDetailInstance.setPointId(pointId.longValue());
planTaskDetailInstance.setTaskNo(planTask.getId());
planTaskDetailInstance.setStatus("0");
if (XJConstant.TASK_STATUS_TIMEOUT == planTask.getFinishStatus()) {
planTaskDetailInstance.setIsFinish(Integer.parseInt(XJConstant.PLAN_TASK_DET_FINISH_OUT));
planTaskDetailInstance.setStatus("3");
}
if (XJConstant.CHECK_CHANGE_YES.equals(flag)) {
planTaskDetailInstance.setIsFinish(Integer.parseInt(XJConstant.PLAN_TASK_DET_FINISH_YES));
planTaskDetailInstance.setStatus("1");
}
String executorId = planTask.getUserId();
em.persist(planTask);
for (int i1 = 0; i1 < pointIdList.size(); i1++) {
Number pointId = pointIdList.get(i1);
PlanTaskDetail planTaskDetailInstance = new PlanTaskDetail();
planTaskDetailInstance.setPointId(pointId.longValue());
planTaskDetailInstance.setTaskNo(planTask.getId());
planTaskDetailInstance.setStatus("0");
if (XJConstant.TASK_STATUS_TIMEOUT == planTask.getFinishStatus()) {
planTaskDetailInstance.setIsFinish(Integer.parseInt(XJConstant.PLAN_TASK_DET_FINISH_OUT));
planTaskDetailInstance.setStatus("3");
}
if (XJConstant.CHECK_CHANGE_YES.equals(flag)) {
planTaskDetailInstance.setIsFinish(Integer.parseInt(XJConstant.PLAN_TASK_DET_FINISH_YES));
planTaskDetailInstance.setStatus("1");
}
// // 2.保存执行数据明细表
//// planTaskDetail.saveAndFlush(planTaskDetailInstance);
planTaskDetailListSync.add(planTaskDetailInstance);
planTaskDetailListSync.add(planTaskDetailInstance);
}
}
}
em.flush();
em.clear();
// mybatisService.saveBatch(taskList);
em.flush();
em.clear();
// mybatisService.saveBatch(taskList);
// repositoryTs.batchSave(taskList);
repositoryTs.batchSave(planTaskDetailListSync);
// 定时任务监控
log.error("计划重做开始添加定时任务监控========");
jobService.planTaskAddJob(planTask);
repositoryTs.batchSave(planTaskDetailListSync);
// 定时任务监控
log.error("计划重做开始添加定时任务监控========");
jobService.planTaskAddJob(planTask);
// 3.如果为自动任务调用,则更新id,如果重做或且下次时间大于等于明天,则更新planTaskId到plan表
Date genDate = DateUtil.str2Date(list.get(list.size() - 1).get("NEXT_GEN_DATE").toString(), "yyyy-MM-dd");//下次生成日期
Date tomorrow = DateUtil.getIntervalDate(now, 1);//明天
String strGenDate = list.get(list.size() - 1).get("NEXT_GEN_DATE").toString().substring(0, 10);
HashMap<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("id", plan.getId());
paramMap.put("next_gen_date", strGenDate);
if (XJConstant.SCHED_FLAG.equals(flag)) {
paramMap.put("plan_task_id", 0);//修改为初始值
paramMap.put("first_flag", XJConstant.PLAN_FIRST_STATUS_NO);
} else if (!XJConstant.SCHED_FLAG.equals(flag) && (genDate.getTime() - tomorrow.getTime() >= 0) && XJConstant.FIX_DATE_NO.equals(plan.getIsFixedDate())) {//更新日期及plantaskId到plan表
long planTaskId = iplanTaskDao.findMaxIdByBatchNo(batchNo);
paramMap.put("plan_task_id", planTaskId);// 更新新的任务id到plan
paramMap.put("first_flag", XJConstant.PLAN_FIRST_STATUS_NO);
}
if (DateUtil.str2Date(strGenDate, "yyyy-MM-dd").getTime() - now.getTime() < 0 || org.apache.commons.lang.StringUtils.isBlank(strGenDate)) {
paramMap.put("next_gen_date", DateUtil.formatDatrToStr(now, "yyyy-MM-dd"));
// 3.如果为自动任务调用,则更新id,如果重做或且下次时间大于等于明天,则更新planTaskId到plan表
Date genDate = DateUtil.str2Date(list.get(list.size() - 1).get("NEXT_GEN_DATE").toString(), "yyyy-MM-dd");//下次生成日期
Date tomorrow = DateUtil.getIntervalDate(now, 1);//明天
String strGenDate = list.get(list.size() - 1).get("NEXT_GEN_DATE").toString().substring(0, 10);
HashMap<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("id", plan.getId());
paramMap.put("next_gen_date", strGenDate);
if (XJConstant.SCHED_FLAG.equals(flag)) {
paramMap.put("plan_task_id", 0);//修改为初始值
paramMap.put("first_flag", XJConstant.PLAN_FIRST_STATUS_NO);
} else if (!XJConstant.SCHED_FLAG.equals(flag) && (genDate.getTime() - tomorrow.getTime() >= 0) && XJConstant.FIX_DATE_NO.equals(plan.getIsFixedDate())) {//更新日期及plantaskId到plan表
long planTaskId = iplanTaskDao.findMaxIdByBatchNo(batchNo);
paramMap.put("plan_task_id", planTaskId);// 更新新的任务id到plan
paramMap.put("first_flag", XJConstant.PLAN_FIRST_STATUS_NO);
}
if (DateUtil.str2Date(strGenDate, "yyyy-MM-dd").getTime() - now.getTime() < 0 || org.apache.commons.lang.StringUtils.isBlank(strGenDate)) {
paramMap.put("next_gen_date", DateUtil.formatDatrToStr(now, "yyyy-MM-dd"));
}
planMapper.updPlanStatusOrGenDate(paramMap);// 更新下次任务生成日期
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
throw new RuntimeException(e.getMessage());
}
planMapper.updPlanStatusOrGenDate(paramMap);// 更新下次任务生成日期
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
throw new RuntimeException(e.getMessage());
}
}
......@@ -1168,6 +1167,8 @@ public class PlanTaskServiceImpl implements IPlanTaskService {
List<PlanTaskDetail> planTaskDetails = iPlanTaskDetailDao.findAllByTaskNoAndStatus(planTask.getId(), PlanTaskDetailStatusEnum.NOTSTARTED.getValue());
if (!planTaskDetails.isEmpty()) {
planTaskDetails.stream().forEach(action -> {
action.setStatus(PlanTaskDetailStatusEnum.QUALIFIED.getValue());
iPlanTaskDetailDao.saveAndFlush(action);
planTaskDetailMapper.finishTaskDetail(action.getId(), action.getPointId(),
action.getPlanTask().getId(), userId);
});
......
package com.yeejoin.amos.patrol.quartz;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.yeejoin.amos.component.feign.config.InnerInvokException;
......@@ -18,6 +19,7 @@ import com.yeejoin.amos.patrol.business.dao.mapper.PlanTaskMapper;
import com.yeejoin.amos.patrol.business.dao.repository.*;
import com.yeejoin.amos.patrol.business.entity.mybatis.PlanTaskPointInputItemBo;
import com.yeejoin.amos.patrol.business.feign.JcsFeignClient;
import com.yeejoin.amos.patrol.business.param.CheckInputParam;
import com.yeejoin.amos.patrol.business.param.MsgConfigParam;
import com.yeejoin.amos.patrol.business.service.intfc.IMessageService;
import com.yeejoin.amos.patrol.business.service.intfc.IPatrolDataSyncService;
......@@ -104,6 +106,9 @@ public class JobService implements IJobService {
@Autowired
private WebMqttComponent webMqttComponent;
@Autowired
IInputItemDao inputItemDao;
@Autowired
JcsFeignClient jcsFeignClient;
......@@ -417,7 +422,11 @@ public class JobService implements IJobService {
check = checkMap.get(arg.getPointId());
}
if (arg.getInputItemId() != null) {
InputItem inputItem = inputItemDao.findById(arg.getInputItemId()).get();
CheckInput checkInput = new CheckInput();
checkInput = paraseSelect(checkInput, inputItem.getDataJson(), inputItem.getIsScore());
checkInput.setCheckId(check.getId());
checkInput.setInputId(arg.getInputItemId());
checkInput.setIsOk(CheckStatusEnum.QUALIFIED.getCode());
......@@ -436,6 +445,21 @@ public class JobService implements IJobService {
}
private CheckInput paraseSelect(CheckInput checkInput, String json, String isScore) {
JSONArray jsonArray = JSONArray.parseArray(json);
if (!ObjectUtils.isEmpty(jsonArray)) {
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String validateName = jsonObject.getString("name");
String validateIsOk = jsonObject.getString("isOk");
if(validateIsOk.equals("是")) {
checkInput.setInputValue(validateName);
}
}
}
return checkInput;
}
private void removeJob(String jobName) {
log.debug("removeJob==jobName==" + jobName);
QuartzManager.removeJob(jobName);
......
......@@ -413,26 +413,13 @@
<select id="getPlanTaskPoints" resultType="Map">
SELECT
p.name,
p.id pointId,
p.point_no pointNO,
p.offline,
ptd.status,
ptd.is_finish finish,
p.is_fixed isFixed,
pt.route_id routeId,
c.id checkId,
prp.order_no orderNo
P.NAME,
P.ID pointId
FROM
p_plan_task_detail ptd
LEFT JOIN p_plan_task pt ON pt.id = ptd.task_no
LEFT JOIN p_point p ON p.id = ptd.point_id
LEFT JOIN p_check c ON c.plan_task_detail_id = ptd.id
LEFT JOIN p_route_point prp ON prp.point_id = ptd.point_id AND prp.route_id = pt.route_id
WHERE
p.is_delete = 0
<if test="planTaskId != null and planTaskId > 0 ">and pt.id = #{planTaskId}</if>
ORDER BY orderNo
( SELECT * FROM p_plan_task_detail ptd WHERE ptd.task_no = #{planTaskId} ) ptd
LEFT JOIN (SELECT * from p_point where is_delete = 0) P ON P.ID = ptd.point_id
</select>
<select id="getCurrentPlanTaskCount" resultType="int" parameterType="long">
......
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