Commit 950599c5 authored by hezhen's avatar hezhen

Merge branch 'base-modify' of http://113.105.137.151:22280/youjj/cloud-platform into base-modify

parents 3e922cd8 68c5376c
......@@ -188,7 +188,7 @@ public class AuthController {
}
@PostMapping(value = "/applet/registry")
public JSONObject registryWithApplet(@RequestParam("phone") String phone,@RequestParam("password") String pwd,@RequestParam("mobilecode") String code)throws Exception {
public JSONObject registryWithApplet(@RequestParam("username") String phone,@RequestParam("password") String pwd,@RequestParam("mobilecode") String code)throws Exception {
JSONObject data=appAuthService.appletRegistry(phone,pwd,code);
if(data!=null&&data.getInteger("status")== ResultCode.SUCCESS_CODE){
JSONObject result=data.getJSONObject("data");
......
......@@ -12,9 +12,12 @@ public enum ResCode {
VEHICLE_BOOKED_INFO_ALREADY_CHANGED(101001,"车辆预定信息已更改,请刷新后继续操作"),
//车辆信息相关返回码-车辆信息
VEHICLE_INFO_SAME_NUM_PLATE_EXISTS(102001,"该车牌车辆已经存在"),
VEHICLE_INFO_SAME_NUM_PLATE_EXISTS(102001,"该车牌已经存在"),
VEHICLE_INFO_BRANCH_NOT_EXIST(102002,"分公司信息非法"),
VEHICLE_INFO_CODE_EXIST(102003,"车辆编码已存在"),
VEHICLE_INFO_SAME_NUM_PLATE_AND_CODE_EMPTY(102004,"车辆编码和车牌号为空"),
VEHICLE_INFO_SAME_NUM_PLATE_AND_CODE_EXIST(102004,"车辆编码或车牌号已存在"),
//车辆信息相关返回码-预定申请信息
VEHICLE_BOOKED_RECORD_ALREADY_CHANGED(103001,"车辆预定申请已被审批,请刷新后继续操作"),
......
......@@ -127,9 +127,11 @@ public class Vehicle {
* 最后更新里程数
*/
private Integer mileageLastUpdate;
/**
* 停车分公司id
* 停车分公司(id)
*/
@Column(name = "park_branch_company_id")
private Integer parkBranchCompanyId;
/**
* 预计目的地分公司id
......
......@@ -41,6 +41,13 @@ public class AddOrUpdateVehicleVo {
@Column(name = "subordinate_branch")
private Integer subordinateBranch;
/**
* 停车分公司(id)
*/
@Column(name = "park_branch_company_id")
private Integer parkBranchCompanyId;
/**
* 用途类型:租赁房车(1)、展车等,对应关系见车辆常量表
*/
......
......@@ -40,6 +40,24 @@ public class QueryVehicleVo {
*/
private String subBranchName;
/**
* 停靠分支机构(id)
*/
private Integer parkBranchCompanyId;
/**
* 停靠分支机构(名称)
*/
private String parkBranchCompanyName;
/**
* 目的地分支机构(id)
*/
private Integer expectDestinationBranchCompanyId;
/**
* 目的地分支机构(名称)
*/
private String expectDestinationBranchCompanyName;
/**
* 用途类型:租赁房车(1)、展车等,对应关系见车辆常量表
*/
......
package com.xxfc.platform.vehicle.pojo;
import lombok.Data;
import java.util.Date;
@Data
public class ResultVehicleVo {
/**
* 主键(uuid)
*/
private String id;
/**
* 车辆编号,0-没有
*/
private Integer code;
/**
* 车辆状态: 1-正常运行 2-维修 3-报废
*/
private Integer status;
/**
* 车牌号,空字符串-没有
*/
private String numberPlate;
/**
* 品牌(编码,对应关系见相关常量),0-未填写
*/
private Integer brand;
/**
* 所属分支机构(id)
*/
private Integer subordinateBranch;
/**
* 所属分支机构(名称)
*/
private String subBranchName;
/**
* 停靠分支机构(id)
*/
private Integer parkBranchCompanyId;
/**
* 停靠分支机构(名称)
*/
private String parkBranchCompanyName;
/**
* 目的地分支机构(id)
*/
private Integer expectDestinationBranchCompanyId;
/**
* 目的地分支机构(名称)
*/
private String expectDestinationBranchCompanyName;
/**
* 用途类型:租赁房车(1)、展车等,对应关系见车辆常量表
*/
private Integer useType;
/**
* 备注信息
*/
private String remark;
private Date createTime;
private Date updateTime;
/**
* 车架号
*/
private String vin;
/**
* 保险公司,见常量表
*/
private Integer insuranceCompany;
/**
* 保险单号
*/
private String insuranceNo;
/**
* 保险开始时间
*/
private Date insuranceStartDate;
/**
* 保险结束时间
*/
private Date insuranceEndDate;
/**
* 年审时间
*/
private Date annualVerificationDate;
/**
* 保养时间
*/
private Date maintenanceDate;
/**
* 保养公里
*/
private Integer mileage;
/**
* 保养里程数
*/
private Integer maintenanceMileage;
/**
* 车辆所属人-类型
*/
private Integer belongTo;
/**
* 所属人 名称
*/
private String belongToName;
/**
* 行驶证路径
*/
private String drivingLicensePath;
/**
* 发动机号
*/
private String engineNum;
/**
* 生产商
*/
private String manufacturer;
/**
* 收车时间
*/
private Date receiveTime;
}
\ No newline at end of file
......@@ -32,11 +32,11 @@ public class VehiclePageQueryVo {
*/
private Integer subordinateBranch;
/**
* 所属分支机构(id)
* 所属省份(id)
*/
private Integer addrProvince;
/**
* 所属分支机构(id)
* 所属市区(id)
*/
private Integer addrCity;
......
......@@ -199,18 +199,27 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
}
for(AddOrUpdateVehicleVo addOrUpdateVehicleVo:addOrUpdateVehicleVoList) {
Vehicle vehicle = new Vehicle();
BeanUtils.copyProperties(vehicle, addOrUpdateVehicleVo);
BeanUtilsBean.getInstance().copyProperties(vehicle, addOrUpdateVehicleVo);
if (addOrUpdateVehicleVo.getParkBranchCompanyId()==null) {
throw new CustomIllegalParamException("Stop at branch office cannot be empty");
}
vehicle.setId(UUID.randomUUID().toString());
// 检查车牌或者编码是否已存在,已存在则返回失败
List<Vehicle> exitsVehicles = lockByCode(addOrUpdateVehicleVo);
if(CollectionUtils.isNotEmpty(exitsVehicles)){
if(addOrUpdateVehicleVo.getCode()!= null &&
addOrUpdateVehicleVo.getCode().equals(exitsVehicles.get(0).getCode())){
return RestResponse.code(ResCode.VEHICLE_INFO_CODE_EXIST.getCode());
}else{
return RestResponse.code(ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getCode());
}
return RestResponse.codeAndMessage(ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getCode(),
ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getDesc());
// if(addOrUpdateVehicleVo.getCode()!= null &&
// addOrUpdateVehicleVo.getCode().equals(exitsVehicles.get(0).getCode())){
// return RestResponse.code(ResCode.VEHICLE_INFO_CODE_EXIST.getCode());
// }else{
// return RestResponse.code(ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getCode());
// }
}
mapper.insertSelective(vehicle);
}
......@@ -223,9 +232,13 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
* @param addOrUpdateVehicleVo
* @return 锁定成功返回
*/
private List<Vehicle> lockByCode(AddOrUpdateVehicleVo addOrUpdateVehicleVo){
if(addOrUpdateVehicleVo.getCode() == null){
return null;
private List<Vehicle> lockByCode(AddOrUpdateVehicleVo addOrUpdateVehicleVo)throws CustomIllegalParamException{
// if(addOrUpdateVehicleVo.getCode() == null){
// return null;
// }
if(addOrUpdateVehicleVo.getNumberPlate() == null){
throw new CustomIllegalParamException("Without a license plate number");
}
List<Vehicle> vehicles = mapper.lockByCode(addOrUpdateVehicleVo);
return vehicles;
......@@ -244,7 +257,11 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
for(AddOrUpdateVehicleVo addOrUpdateVehicleVo:addOrUpdateVehicleVoList){
Vehicle vehicle = new Vehicle();
BeanUtils.copyProperties(vehicle, addOrUpdateVehicleVo);
BeanUtilsBean.getInstance().copyProperties(vehicle, addOrUpdateVehicleVo);
if (addOrUpdateVehicleVo.getParkBranchCompanyId()==null) {
throw new CustomIllegalParamException("Stop at branch office cannot be empty");
}
//悲观锁,检查是否已存在车牌或编码
List<Vehicle> exitsVehicles = lockByCode(addOrUpdateVehicleVo);
if(CollectionUtils.isNotEmpty(exitsVehicles)){
......@@ -252,12 +269,15 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
if(exitsVehicle.getId().equals(addOrUpdateVehicleVo.getId())){
continue;
}
if(addOrUpdateVehicleVo.getCode()!= null &&
addOrUpdateVehicleVo.getCode().equals(exitsVehicles.get(0).getCode())){
return RestResponse.code(ResCode.VEHICLE_INFO_CODE_EXIST.getCode());
}else{
return RestResponse.code(ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getCode());
}
return RestResponse.codeAndMessage(ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getCode(),
ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getDesc());
// if(addOrUpdateVehicleVo.getCode()!= null &&
// addOrUpdateVehicleVo.getCode().equals(exitsVehicles.get(0).getCode())){
// return RestResponse.code(ResCode.VEHICLE_INFO_CODE_EXIST.getCode());
// }else{
// return RestResponse.code(ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getCode());
// }
}
}
mapper.updateByPrimaryKeySelective(vehicle);
......@@ -836,7 +856,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
* @return
* @throws Exception
*/
public PageDataVO<QueryVehicleVo> getByPage(VehiclePageQueryVo vehiclePageQueryVo) throws Exception{
public PageDataVO<ResultVehicleVo> getByPage(VehiclePageQueryVo vehiclePageQueryVo) throws Exception{
Map<String, Object> params = PropertyUtils.describe(vehiclePageQueryVo);
Integer pageSize = (Integer) params.get("limit");
params.remove("pageSize");
......@@ -846,8 +866,8 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
adjustBookedInfoParam(params,vehiclePageQueryVo);
params.get("yearMonthAndParam");
PageHelper.startPage(pageNo,pageSize);
List<QueryVehicleVo> vehicles = mapper.getByPage(params);
PageInfo<QueryVehicleVo> vehiclePageInfo = new PageInfo<>(vehicles);
List<ResultVehicleVo> vehicles = mapper.getByPage(params);
PageInfo<ResultVehicleVo> vehiclePageInfo = new PageInfo<>(vehicles);
return PageDataVO.pageInfo(vehiclePageInfo);
}
/**
......@@ -856,7 +876,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
* @return
* @throws Exception
*/
public PageDataVO<QueryVehicleVo> getByPageNotAllData(VehiclePageQueryVo vehiclePageQueryVo, List<Integer> companyList) throws Exception{
public PageDataVO<ResultVehicleVo> getByPageNotAllData(VehiclePageQueryVo vehiclePageQueryVo, List<Integer> companyList) throws Exception{
Map<String, Object> params = PropertyUtils.describe(vehiclePageQueryVo);
Integer pageSize = (Integer) params.get("limit");
params.remove("pageSize");
......@@ -870,8 +890,8 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
params.put("companyList", Arrays.asList(-1));
}
PageHelper.startPage(pageNo,pageSize);
List<QueryVehicleVo> vehicles = mapper.getByPageNotAllData(params);
PageInfo<QueryVehicleVo> vehiclePageInfo = new PageInfo<>(vehicles);
List<ResultVehicleVo> vehicles = mapper.getByPageNotAllData(params);
PageInfo<ResultVehicleVo> vehiclePageInfo = new PageInfo<>(vehicles);
return PageDataVO.pageInfo(vehiclePageInfo);
}
......
......@@ -10,6 +10,8 @@ import org.springframework.stereotype.Service;
import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.mapper.VehicleModelMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.util.List;
import java.util.stream.Collectors;
......@@ -45,6 +47,9 @@ public class VehicleModelBiz extends BaseBiz<VehicleModelMapper, VehicleModel> {
PageDataVO<VehicleModelVo> mPageDataVO = PageDataVO.pageInfo(vmqc.getPage(),
vmqc.getLimit(), () -> mapper.findVehicleModelPage(vmqc));
// List<VehicleModelVo> vehicleModelVos = mPageDataVO.getData();
// vehicleModelVos.parallelStream().forEach(vehicleModelVo -> vehicleModelVo.setPicture(vehicleModelVo.getPicture().split(",")[0]));
return ObjectRestResponse.succ(mPageDataVO);
} catch (Exception e) {
e.printStackTrace();
......@@ -53,13 +58,14 @@ public class VehicleModelBiz extends BaseBiz<VehicleModelMapper, VehicleModel> {
}
@Transactional
public Integer insertAndGetId(VehicleModel vm) {
try {
mapper.insertSelective(vm);
return vm.getId();
} catch (Exception e) {
e.printStackTrace();
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
return null;
......
......@@ -11,9 +11,9 @@ import java.util.Map;
public interface VehicleMapper extends Mapper<Vehicle> {
public List<QueryVehicleVo> getByPage(Map<String, Object> params);
public List<ResultVehicleVo> getByPage(Map<String, Object> params);
public List<QueryVehicleVo> getByPageNotAllData(Map<String, Object> params);
public List<ResultVehicleVo> getByPageNotAllData(Map<String, Object> params);
public int updateStatusById(Map<String, Object> params);
......
......@@ -121,7 +121,7 @@ public class VehicleController extends BaseController<VehicleBiz> {
}
@RequestMapping(value = "/page", method = RequestMethod.GET)
public RestResponse<PageDataVO<QueryVehicleVo>> getByPage(@RequestParam String vehiclePageQueryVoJson) throws Exception {
public RestResponse<PageDataVO<ResultVehicleVo>> getByPage(@RequestParam String vehiclePageQueryVoJson) throws Exception {
VehiclePageQueryVo vehiclePageQueryVo = null;
try {
vehiclePageQueryVo = JSON.parseObject(vehiclePageQueryVoJson, VehiclePageQueryVo.class);
......@@ -144,7 +144,7 @@ public class VehicleController extends BaseController<VehicleBiz> {
@RequestMapping(value = "/small/page", method = RequestMethod.GET)
@IgnoreUserToken
public RestResponse<PageDataVO<QueryVehicleVo>> getByPageBySmall(@RequestParam String vehiclePageQueryVoJson,@RequestParam Integer uid) throws Exception {
public RestResponse<PageDataVO<ResultVehicleVo>> getByPageBySmall(@RequestParam String vehiclePageQueryVoJson,@RequestParam Integer uid) throws Exception {
VehiclePageQueryVo vehiclePageQueryVo = null;
try {
vehiclePageQueryVo = JSON.parseObject(vehiclePageQueryVoJson, VehiclePageQueryVo.class);
......
......@@ -104,6 +104,9 @@ public class VehicleModelController extends BaseController<VehicleModelBiz, Vehi
//
// }
// }
if (vmqc.getIsDel()==null) {
vmqc.setIsDel(0);
}
if (vmqc == null || vmqc.getPage() == null || vmqc.getLimit() == null || vmqc.getPage() < 0 || vmqc.getLimit() <= 0) {
......
......@@ -30,15 +30,21 @@
<select id="getByPage" parameterType="java.util.Map"
resultType="com.xxfc.platform.vehicle.pojo.QueryVehicleVo">
resultType="com.xxfc.platform.vehicle.pojo.ResultVehicleVo">
SELECT r.* FROM (
select DISTINCT v.`id`,
v.`code`,
v.`status`,
v.number_plate,
v.brand,
IFNULL(v.park_branch_company_id,v.expect_destination_branch_company_id) AS subordinate_branch,
IFNULL(bc.name,bc1.name) AS subBranchName,
-- IFNULL(v.park_branch_company_id,v.expect_destination_branch_company_id) AS subordinate_branch,
-- IFNULL(bc.name,bc1.name) AS subBranchName,
v.park_branch_company_id,
bc.name as parkBranchCompanyName,
v.expect_destination_branch_company_id,
bc1.name as expectDestinationBranchCompanyName,
v.subordinate_branch,
bc2.name as subBranchName,
v.use_type,
v.remark,
v.create_time,
......@@ -66,8 +72,14 @@
left join
vehicle_book_info vbi on v.`id` = vbi.vehicle
</if>
-- LEFT JOIN branch_company bc ON v.park_branch_company_id = bc.id
-- LEFT JOIN branch_company bc1 ON v.expect_destination_branch_company_id = bc1.id
-- 停车分公司
LEFT JOIN branch_company bc ON v.park_branch_company_id = bc.id
-- 目的地分公司
LEFT JOIN branch_company bc1 ON v.expect_destination_branch_company_id = bc1.id
-- 所属分公司
LEFT JOIN branch_company bc2 ON v.subordinate_branch = bc2.id
where
v.is_del=0
<if test="mRangeDateEnd !=null">
......@@ -94,9 +106,9 @@
<if test="vin !=null and vin != ''">
and v.vin = #{vin}
</if>
<if test="subordinateBranch !=null">
and v.subordinate_branch = #{subordinateBranch}
</if>
<!-- <if test="subordinateBranch !=null">-->
<!-- and v.subordinate_branch = #{subordinateBranch}-->
<!-- </if>-->
<if test="code !=null">
and v.code = #{code}
</if>
......@@ -127,11 +139,12 @@
</foreach>
</if>
<if test="subordinateBranch !=null ">
and ( v.park_branch_company_id = #{subordinateBranch} or v.expect_destination_branch_company_id=#{subordinateBranch} )
and ( v.park_branch_company_id = #{subordinateBranch} or
v.expect_destination_branch_company_id=#{subordinateBranch} )
</if>
<if test=" addrProvince !=null or addrCity !=null or zoneId !=null ">
and (
<trim suffixOverrides="OR">
and (
<trim suffixOverrides="OR">
<if test="addrProvince !=null">
(bc.addr_province=#{addrProvince} or bc1.addr_province=#{addrProvince}) OR
</if>
......@@ -141,23 +154,29 @@
<if test="zoneId !=null">
(bc.zone_id=#{zoneId} or bc1.zone_id=#{zoneId}) OR
</if>
</trim>
)
</trim>
)
</if>
order by v.code
) r ORDER BY r.subBranchName
) r ORDER BY r.parkBranchCompanyName
</select>
<select id="getByPageNotAllData" parameterType="java.util.Map"
resultType="com.xxfc.platform.vehicle.pojo.QueryVehicleVo">
resultType="com.xxfc.platform.vehicle.pojo.ResultVehicleVo">
SELECT r.* FROM (
select DISTINCT v.`id`,
v.`code`,
v.`status`,
v.number_plate,
v.brand,
IFNULL(v.park_branch_company_id,v.expect_destination_branch_company_id) AS subordinate_branch,
IFNULL(bc.name,bc1.name) AS subBranchName,
-- IFNULL(v.park_branch_company_id,v.expect_destination_branch_company_id) AS subordinate_branch,
-- IFNULL(bc.name,bc1.name) AS subBranchName,
v.park_branch_company_id,
bc.name as parkBranchCompanyName,
v.expect_destination_branch_company_id,
bc1.name as expectDestinationBranchCompanyName,
v.subordinate_branch,
bc2.name as subBranchName,
v.use_type,
v.remark,
v.create_time,
......@@ -185,24 +204,36 @@
left join
vehicle_book_info vbi on v.`id` = vbi.vehicle
</if>
-- 停车分公司
LEFT JOIN branch_company bc ON v.park_branch_company_id = bc.id
-- 目的地分公司
LEFT JOIN branch_company bc1 ON v.expect_destination_branch_company_id = bc1.id
-- 所属分公司
LEFT JOIN branch_company bc2 ON v.subordinate_branch = bc2.id
where
v.is_del=0
<if test="companyList != null">
and ( v.park_branch_company_id in (
<trim suffixOverrides=",">
<foreach collection="companyList" item="companyId">
<trim suffixOverrides=",">
<foreach collection="companyList" item="companyId">
#{companyId},
</foreach>
</trim>
</foreach>
</trim>
)
or v.expect_destination_branch_company_id in (
<trim suffixOverrides=",">
<foreach collection="companyList" item="companyId">
<trim suffixOverrides=",">
<foreach collection="companyList" item="companyId">
#{companyId},
</foreach>
</trim>
</foreach>
</trim>
)
<!-- or v.subordinate_branch in (-->
<!-- <trim suffixOverrides=",">-->
<!-- <foreach collection="companyList" item="companyId">-->
<!-- #{companyId},-->
<!-- </foreach>-->
<!-- </trim>-->
)
)
)
</if>
......@@ -230,9 +261,9 @@
<if test="vin !=null and vin != ''">
and v.vin = #{vin}
</if>
<if test="subordinateBranch !=null">
and v.subordinate_branch = #{subordinateBranch}
</if>
<!-- <if test="subordinateBranch !=null">-->
<!-- and v.subordinate_branch = #{subordinateBranch}-->
<!-- </if>-->
<if test="code !=null">
and v.code = #{code}
</if>
......@@ -262,7 +293,8 @@
</foreach>
</if>
<if test="subordinateBranch !=null ">
and ( v.park_branch_company_id = #{subordinateBranch} or v.expect_destination_branch_company_id=#{subordinateBranch} )
and ( v.park_branch_company_id = #{subordinateBranch} or
v.expect_destination_branch_company_id=#{subordinateBranch} )
</if>
<if test=" addrProvince !=null or addrCity !=null or zoneId !=null ">
and (
......@@ -274,13 +306,13 @@
(bc.addr_city=#{addrProvince} or bc1.addr_city=#{addrProvince}) OR
</if>
<if test="zoneId !=null">
(bc.zone_id=#{zoneId} or bc1.zone_id=#{zoneId}) OR
(bc.zone_id=#{zoneId} or bc1.zone_id=#{zoneId}) OR
</if>
</trim>
)
</if>
order by v.code
) r ORDER BY r.subBranchName
) r ORDER BY r.parkBranchCompanyName
</select>
<select id="lockByCode" resultType="com.xxfc.platform.vehicle.entity.Vehicle"
......@@ -291,8 +323,11 @@
v.number_plate
from vehicle v
where
`code` = #{code}
number_plate=#{numberPlate}
and is_del=0
for update
</select>
<select id="selectByNumberPlate" resultType="com.xxfc.platform.vehicle.entity.Vehicle">
select * from vehicle
......
......@@ -10,9 +10,11 @@
parent_id,name,icon,depict,rank,level,state,crt_time,upd_time,isMore,start_using
) VALUES
<foreach collection ="vpclist" item="vpc" index="index" separator =",">
<if test="vpc.state == 0" >
(#{vpc.parentId},#{vpc.name},#{vpc.icon},#{vpc.depict}
,#{vpc.rank},#{vpc.level},#{vpc.state},#{vpc.crtTime}
,#{vpc.updTime},#{vpc.isMore},#{vpc.startUsing})
</if>
</foreach>
</insert>
......
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