Commit 28ceb95f authored by hanfeng's avatar hanfeng

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

parents 0b0a68b0 992d784b
...@@ -109,6 +109,14 @@ ...@@ -109,6 +109,14 @@
<artifactId>swagger-annotations</artifactId> <artifactId>swagger-annotations</artifactId>
<version>1.5.13</version> <version>1.5.13</version>
</dependency> </dependency>
<!-- 公式计算 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-jexl</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies> </dependencies>
......
package com.github.wxiaoqi.security.common.msg; package com.github.wxiaoqi.security.common.msg;
import com.github.wxiaoqi.security.common.constant.RestCode; import com.github.wxiaoqi.security.common.constant.RestCode;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.SystemProperty; import com.github.wxiaoqi.security.common.util.SystemProperty;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
...@@ -72,11 +73,11 @@ public class ObjectRestResponse<T> extends BaseResponse { ...@@ -72,11 +73,11 @@ public class ObjectRestResponse<T> extends BaseResponse {
* @return * @return
*/ */
public static ObjectRestResponse createFailedResultMsg(Integer code) { public static ObjectRestResponse createFailedResultMsg(Integer code) {
return new ObjectRestResponse().status(code).msg(SystemProperty.getResultConfig(code + "")).rel(false); return new ObjectRestResponse().status(code).msg(ResultCode.getMsg(code)).rel(false);
} }
public static ObjectRestResponse paramIsEmpty() { public static ObjectRestResponse paramIsEmpty() {
return ObjectRestResponse.createFailedResult(502, ObjectRestResponse.PARAM_IS_EMPTY); return ObjectRestResponse.createFailedResult(ResultCode.NULL_CODE, ResultCode.getMsg(ResultCode.NULL_CODE));
} }
/** /**
......
...@@ -10,6 +10,7 @@ import org.springframework.cloud.openfeign.FeignClient; ...@@ -10,6 +10,7 @@ import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* ${DESCRIPTION} * ${DESCRIPTION}
...@@ -95,5 +96,8 @@ public interface UserFeign { ...@@ -95,5 +96,8 @@ public interface UserFeign {
@RequestParam(value = "type",defaultValue = "1")Integer type @RequestParam(value = "type",defaultValue = "1")Integer type
); );
@GetMapping("/member/entityList")
public ObjectRestResponse<List<BaseUserMemberLevel>> memberEntityList(@RequestParam("entity") Map<String, Object> entity);
} }
...@@ -73,6 +73,7 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper,BaseUserMemb ...@@ -73,6 +73,7 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper,BaseUserMemb
if(userVo!=null&&(userVo.getIsMember()==null||userVo.getIsMember()==0)){ if(userVo!=null&&(userVo.getIsMember()==null||userVo.getIsMember()==0)){
AppUserVo userVo1=new AppUserVo(); AppUserVo userVo1=new AppUserVo();
userVo1.setId(userVo.getId()); userVo1.setId(userVo.getId());
userVo1.setUserid(userId);
userVo1.setIsMember(1); userVo1.setIsMember(1);
detailBiz.updUuserInfoById(userVo1); detailBiz.updUuserInfoById(userVo1);
} }
......
...@@ -2,7 +2,9 @@ package com.github.wxiaoqi.security.admin.rest; ...@@ -2,7 +2,9 @@ package com.github.wxiaoqi.security.admin.rest;
import com.github.wxiaoqi.security.admin.biz.UserMemberLevelBiz; import com.github.wxiaoqi.security.admin.biz.UserMemberLevelBiz;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel; import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import io.swagger.models.auth.In; import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -17,7 +19,8 @@ import java.util.List; ...@@ -17,7 +19,8 @@ import java.util.List;
*/ */
@RestController @RestController
@RequestMapping("member") @RequestMapping("member")
public class MemberLevelController { @IgnoreClientToken
public class MemberLevelController extends BaseController<UserMemberLevelBiz, BaseUserMemberLevel> {
@Autowired @Autowired
private UserMemberLevelBiz memberBiz; private UserMemberLevelBiz memberBiz;
......
package com.github.wxiaoqi.security.api.vo.config; package com.github.wxiaoqi.security.api.vo.config;
import feign.Logger;
import feign.RequestInterceptor; import feign.RequestInterceptor;
import feign.RequestTemplate; import feign.RequestTemplate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes;
...@@ -18,7 +16,6 @@ import java.util.Enumeration; ...@@ -18,7 +16,6 @@ import java.util.Enumeration;
* @description 设置请求头部信息,防止微服务之间调用请求头部信息丢失 * @description 设置请求头部信息,防止微服务之间调用请求头部信息丢失
* @data 2019/6/25 16:22 * @data 2019/6/25 16:22
*/ */
@Slf4j
public class HeaderConfig implements RequestInterceptor { public class HeaderConfig implements RequestInterceptor {
@Override @Override
...@@ -33,10 +30,11 @@ public class HeaderConfig implements RequestInterceptor { ...@@ -33,10 +30,11 @@ public class HeaderConfig implements RequestInterceptor {
while (headerNames.hasMoreElements()){ while (headerNames.hasMoreElements()){
String headerName = headerNames.nextElement(); String headerName = headerNames.nextElement();
String headerValue = request.getHeader(headerName); String headerValue = request.getHeader(headerName);
log.info("----headerName===="+headerName+"----headerValue===="+headerValue);
template.header(headerName,headerValue); template.header(headerName,headerValue);
} }
} }
} }
} }
} }
...@@ -22,6 +22,6 @@ public interface CofigMapper extends Mapper<Cofig> { ...@@ -22,6 +22,6 @@ public interface CofigMapper extends Mapper<Cofig> {
* @param cofig * @param cofig
* @return * @return
*/ */
@Update("update config set `title`=#{title},`value`=#{value}`,`type`=#{type},`upd_time`=#{updTime} where `id`=#{id}") @Update("update config `cf` set cf.title=#{title},cf.value=#{value},cf.type=#{type},cf.upd_time=#{updTime} where cf.id=#{id}")
int updateConfig(Cofig cofig); int updateConfig(Cofig cofig);
} }
...@@ -12,7 +12,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; ...@@ -12,7 +12,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@Configuration("tourWebConfig") @Configuration("campsiteWebConfig")
@Primary @Primary
public class WebConfiguration implements WebMvcConfigurer { public class WebConfiguration implements WebMvcConfigurer {
......
...@@ -21,4 +21,5 @@ spring: ...@@ -21,4 +21,5 @@ spring:
cloud: cloud:
nacos: nacos:
config: config:
server-addr: 10.5.52.2:8848 server-addr: 10.5.52.2:8848
\ No newline at end of file
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
<module>xx-common-platform</module> <module>xx-common-platform</module>
<module>xx-common-platform-web</module> <module>xx-common-platform-web</module>
<module>xx-common-platform-component</module> <module>xx-common-platform-component</module>
<module>xx-common-demo</module>
</modules> </modules>
</project> </project>
\ No newline at end of file
...@@ -11,17 +11,44 @@ ...@@ -11,17 +11,44 @@
<groupId>com.xxfc.platform</groupId> <groupId>com.xxfc.platform</groupId>
<artifactId>xx-common-platform-component</artifactId> <artifactId>xx-common-platform-component</artifactId>
<properties>
<swagger.version>2.9.2</swagger.version>
</properties>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId> <artifactId>spring-cloud-starter-openfeign</artifactId>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-configuration-processor -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency> <dependency>
<groupId>javax.servlet</groupId> <groupId>com.github.wxiaoqi</groupId>
<artifactId>javax.servlet-api</artifactId> <artifactId>ace-common</artifactId>
<version>4.0.1</version> <version>2.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
</dependencies> </dependencies>
......
...@@ -2,6 +2,7 @@ package com.xxfc.platform.common.config; ...@@ -2,6 +2,7 @@ package com.xxfc.platform.common.config;
import feign.RequestInterceptor; import feign.RequestInterceptor;
import feign.RequestTemplate; import feign.RequestTemplate;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestAttributes;
...@@ -17,8 +18,6 @@ import java.util.Enumeration; ...@@ -17,8 +18,6 @@ import java.util.Enumeration;
* @description 设置请求头部信息,防止微服务之间调用请求头部信息丢失 * @description 设置请求头部信息,防止微服务之间调用请求头部信息丢失
* @data 2019/6/25 16:22 * @data 2019/6/25 16:22
*/ */
@Configuration
@Component
public class HeaderConfig implements RequestInterceptor { public class HeaderConfig implements RequestInterceptor {
@Override @Override
......
package com.xxfc.platform.common.config; package com.xxfc.platform.common.config;
import io.swagger.annotations.Api;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
import java.util.List;
/** /**
* @author libin * @author libin
* @version 1.0 * @version 1.0
* @description TODO * @description 通用swagger设置
* @data 2019/6/26 10:28 * @data 2019/6/26 10:28
*/ */
@Profile(value = {"dev","test"})
@ConditionalOnClass(value = EnableSwagger2.class)
@ConditionalOnProperty(prefix = "xxfc",name = "swagger",havingValue = "true")
@EnableSwagger2
@Setter
public class SwaggerConfig { public class SwaggerConfig {
@Value("${xxfc.swagger.title:xxfc api swagger document}")
private String title;
@Value("${xxfc.swagger.description:前后端联调xxfc api 文档}")
private String description;
@Value("${xxfc.swagger.version:1.0.0}")
private String version;
@Value("${jwt.tokenHeader:Authorization}")
private String header;
@Bean
public Docket docket(){
ParameterBuilder ticketPar = new ParameterBuilder();
List<Parameter> parameters = new ArrayList<Parameter>();
ticketPar.name(header).description("user Authorization")
.modelRef(new ModelRef("string")).parameterType("header")
//header中的ticket参数非必填,传空也可以
.required(false).build();
//根据每个方法名也知道当前方法在设置什么参数
parameters.add(ticketPar.build());
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
.paths(PathSelectors.any())
.build()
.globalOperationParameters(parameters);
}
private ApiInfo apiInfo(){
return new ApiInfoBuilder()
.title(title)
.description(description)
.version(version)
.build();
}
} }
...@@ -75,4 +75,11 @@ public class OrderMemberDetail implements Serializable { ...@@ -75,4 +75,11 @@ public class OrderMemberDetail implements Serializable {
@Column(name = "member_level") @Column(name = "member_level")
@ApiModelProperty(value = "会员等级") @ApiModelProperty(value = "会员等级")
private Integer memberLevel; private Integer memberLevel;
/**
* 会员等级id
*/
@Column(name = "member_level_id")
@ApiModelProperty(value = "会员等级id")
private Integer memberLevelId;
} }
package com.xxfc.platform.order.pojo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.time.format.DateTimeFormatter;
@Data
public class AddMemberDTO {
public static final DateTimeFormatter DEFAULT_DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
@ApiModelProperty(value = "会员等级id")
private Integer memberLevelId;
@ApiModelProperty(value = "会员等级")
private Integer memberLevel;
/**
* 优惠券ids
*/
@ApiModelProperty(value = "优惠券ids")
private String couponIds;
}
...@@ -18,7 +18,6 @@ import java.util.List; ...@@ -18,7 +18,6 @@ import java.util.List;
public class MemberBO extends OrderMemberDetail implements OrderDetail { public class MemberBO extends OrderMemberDetail implements OrderDetail {
private BaseOrder order; private BaseOrder order;
private BaseUserMemberLevel baseUserMemberLevel; private BaseUserMemberLevel baseUserMemberLevel;
/** /**
* 优惠券* * 优惠券*
*/ */
......
package com.xxfc.platform.order.pojo.order; package com.xxfc.platform.order.pojo.order;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderMemberDetail;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail; import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.entity.OrderTourDetail; import com.xxfc.platform.order.entity.OrderTourDetail;
import com.xxfc.platform.vehicle.entity.VehicleUserLicense; import com.xxfc.platform.vehicle.entity.VehicleUserLicense;
...@@ -18,6 +19,8 @@ public class OrderPageVO extends BaseOrder { ...@@ -18,6 +19,8 @@ public class OrderPageVO extends BaseOrder {
OrderTourDetail orderTourDetail; OrderTourDetail orderTourDetail;
OrderMemberDetail orderMemberDetail;
List<VehicleUserLicense> vehicleUserLicenses; List<VehicleUserLicense> vehicleUserLicenses;
private String username; private String username;
......
...@@ -283,13 +283,15 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -283,13 +283,15 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
}}); }});
//触发会员效益 //触发会员效益
userFeign.buyMember(new UserMemberDTO() {{ ObjectRestResponse orr = userFeign.buyMember(new UserMemberDTO() {{
setUserId(baseOrder.getUserId()); setUserId(baseOrder.getUserId());
setDiscount(omd.getRebate()); setDiscount(omd.getRebate());
setIsBind(ISBIND_BIND); setIsBind(ISBIND_BIND);
setMemberLevel(omd.getMemberLevel()); setMemberLevel(omd.getMemberLevel());
setRentFreeDays(omd.getRentFreeNum()); setRentFreeDays(omd.getRentFreeNum());
setTotalNumber(omd.getRentFreeNum());
}}); }});
log.info("orr.getStatus() : " + orr.getStatus() );
}else if(OrderTypeEnum.RentVehicle.getCode().equals(baseOrder.getType())) { }else if(OrderTypeEnum.RentVehicle.getCode().equals(baseOrder.getType())) {
updateOrder.setStatus(OrderStatusEnum.ORDER_TOSTART.getCode()); updateOrder.setStatus(OrderStatusEnum.ORDER_TOSTART.getCode());
OrderRentVehicleDetail orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail(){{ OrderRentVehicleDetail orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail(){{
......
...@@ -101,7 +101,7 @@ public class OrderTourVerificationBiz{ ...@@ -101,7 +101,7 @@ public class OrderTourVerificationBiz{
//核销列表 //核销列表
public ObjectRestResponse getVerifications(TourGoodOrderFindVo tourGoodOrderFindVo){ public ObjectRestResponse getVerifications(TourGoodOrderFindVo tourGoodOrderFindVo){
return ObjectRestResponse.succ(tourFeign.findTourGoodOrders(BeanUtil.beanToMap(tourGoodOrderFindVo))); return ObjectRestResponse.succ(tourFeign.findTourGoodOrders(tourGoodOrderFindVo));
} }
public boolean isPower(List<BranchCompany> list,Integer companyId){ public boolean isPower(List<BranchCompany> list,Integer companyId){
......
...@@ -55,7 +55,8 @@ public class WebConfiguration implements WebMvcConfigurer { ...@@ -55,7 +55,8 @@ public class WebConfiguration implements WebMvcConfigurer {
String[] urls = { String[] urls = {
"/orderRentVehicle/**", "/orderRentVehicle/**",
"/baseOrder/**", "/baseOrder/**",
"/orderTour/**" "/orderTour/**",
"/orderMember/**"
}; };
Collections.addAll(list, urls); Collections.addAll(list, urls);
return list; return list;
......
...@@ -258,7 +258,7 @@ public class BaseOrderController extends CommonBaseController { ...@@ -258,7 +258,7 @@ public class BaseOrderController extends CommonBaseController {
orderPayVo.setAmount(baseOrder.getRealAmount().multiply(new BigDecimal("100")).intValue()); orderPayVo.setAmount(baseOrder.getRealAmount().multiply(new BigDecimal("100")).intValue());
orderPayVo.setBody(baseOrder.getName()); orderPayVo.setBody(baseOrder.getName());
orderPayVo.setBuyerIp(StringUtils.defaultIfBlank(request.getHeader("userHost"), ClientUtil.getClientIp(request))); orderPayVo.setBuyerIp(StringUtils.defaultIfBlank(request.getHeader("userHost"), ClientUtil.getClientIp(request)));
orderPayVo.setChannel(PayChannelEnum.ORDER_CRT.getCode()); orderPayVo.setChannel(baseOrder.getType());
orderPayVo.setNotifyUrl(insideHost + order + notifyUrl + "?orderNo=" + baseOrder.getNo()); orderPayVo.setNotifyUrl(insideHost + order + notifyUrl + "?orderNo=" + baseOrder.getNo());
orderPayVo.setSubject(baseOrder.getName()); orderPayVo.setSubject(baseOrder.getName());
orderPayVo.setUserId(baseOrder.getUserId()); orderPayVo.setUserId(baseOrder.getUserId());
......
package com.xxfc.platform.order.rest;
import cn.hutool.core.bean.BeanUtil;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.order.biz.OrderMemberDetailBiz;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderMemberDetail;
import com.xxfc.platform.order.pojo.AddMemberDTO;
import com.xxfc.platform.order.pojo.AddTourDTO;
import com.xxfc.platform.order.pojo.order.MemberBO;
import com.xxfc.platform.order.pojo.order.TourBO;
import com.xxfc.platform.order.service.OrderMemberService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("orderMember")
@Api(value="会员订单",tags={"会员订单"})
@IgnoreClientToken
public class OrderMemberController extends BaseController<OrderMemberDetailBiz,OrderMemberDetail> {
@Autowired
OrderMemberService orderMemberService;
@Autowired
UserFeign userFeign;
@RequestMapping(value = "add",method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "确认会员订单")
public ObjectRestResponse<BaseOrder> add(@RequestBody AddMemberDTO dto){
MemberBO bo = BeanUtil.toBean(dto, MemberBO.class);
//查询会员等级实体
// bo.setBaseUserMemberLevel(userFeign.memberEntityList(BeanUtil.beanToMap(new BaseUserMemberLevel(){{
// setId(dto.getMemberLevelId());
// }})).getData().get(0));
// bo.setMemberLevelId(bo.getBaseUserMemberLevel().getId());
//查询优惠券
orderMemberService.createOrder(bo);
return ObjectRestResponse.succ(bo.getOrder());
}
}
\ No newline at end of file
package com.xxfc.platform.order.rest;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.order.biz.OrderMemberDetailBiz;
import com.xxfc.platform.order.entity.OrderMemberDetail;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("orderMemberDetail")
public class OrderMemberDetailController extends BaseController<OrderMemberDetailBiz,OrderMemberDetail> {
}
\ No newline at end of file
...@@ -55,6 +55,9 @@ public class OrderVehicleCrosstownController { ...@@ -55,6 +55,9 @@ public class OrderVehicleCrosstownController {
if(baseOrder.getStatus() == 4) { if(baseOrder.getStatus() == 4) {
baseOrder.setStatus(5); baseOrder.setStatus(5);
baseOrderBiz.updateSelectiveById(baseOrder); baseOrderBiz.updateSelectiveById(baseOrder);
} else if(baseOrder.getStatus() == 5) {
baseOrder.setStatus(6);
baseOrderBiz.updateSelectiveById(baseOrder);
} }
OrderVehicleCrosstownDto vehicleCrosstownDto = new OrderVehicleCrosstownDto(); OrderVehicleCrosstownDto vehicleCrosstownDto = new OrderVehicleCrosstownDto();
BeanUtil.copyProperties(oldValue.get(0), vehicleCrosstownDto, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true)); BeanUtil.copyProperties(oldValue.get(0), vehicleCrosstownDto, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
...@@ -70,8 +73,13 @@ public class OrderVehicleCrosstownController { ...@@ -70,8 +73,13 @@ public class OrderVehicleCrosstownController {
getOrderLicense(orderVehicleCrosstownDto); getOrderLicense(orderVehicleCrosstownDto);
orderVehicalCrosstownBiz.insertSelective(orderVehicleCrosstownDto); orderVehicalCrosstownBiz.insertSelective(orderVehicleCrosstownDto);
//交车完成 设置订单状态为出行中 //交车完成 设置订单状态为出行中
baseOrder.setStatus(5); if(baseOrder.getStatus() == 4) {
baseOrderBiz.updateSelectiveById(baseOrder); baseOrder.setStatus(5);
baseOrderBiz.updateSelectiveById(baseOrder);
} else if(baseOrder.getStatus() == 5) {
baseOrder.setStatus(6);
baseOrderBiz.updateSelectiveById(baseOrder);
}
return ObjectRestResponse.succ(orderVehicleCrosstownDto); return ObjectRestResponse.succ(orderVehicleCrosstownDto);
} }
return ObjectRestResponse.createDefaultFail(); return ObjectRestResponse.createDefaultFail();
......
...@@ -5,6 +5,8 @@ import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel; ...@@ -5,6 +5,8 @@ import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig; import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.order.biz.OrderCostDetailBiz; import com.xxfc.platform.order.biz.OrderCostDetailBiz;
import com.xxfc.platform.order.biz.OrderMemberDetailBiz; import com.xxfc.platform.order.biz.OrderMemberDetailBiz;
import com.xxfc.platform.order.biz.OrderTemplateBiz; import com.xxfc.platform.order.biz.OrderTemplateBiz;
...@@ -21,6 +23,7 @@ import org.springframework.stereotype.Service; ...@@ -21,6 +23,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.HashMap;
@Service @Service
@Log4j @Log4j
...@@ -65,6 +68,11 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz ...@@ -65,6 +68,11 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
public void initDetail(MemberBO bo) { public void initDetail(MemberBO bo) {
super.initDetail(bo); super.initDetail(bo);
BaseUserMemberLevel buml = userFeign.level(bo.getMemberLevel()); BaseUserMemberLevel buml = userFeign.level(bo.getMemberLevel());
if(!bo.getMemberLevelId().equals(buml.getId())) {
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, new HashMap<String, Object>(){{
put("MemberLevelId 和 MemberLevel", "不对称");
}});
}
bo.setBaseUserMemberLevel(buml); bo.setBaseUserMemberLevel(buml);
bo.setRentFreeNum(buml.getNumber()); bo.setRentFreeNum(buml.getNumber());
bo.setRebate(buml.getDiscount()); bo.setRebate(buml.getDiscount());
......
...@@ -20,6 +20,8 @@ import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; ...@@ -20,6 +20,8 @@ import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.OrderTemplate; import com.xxfc.platform.order.entity.OrderTemplate;
import com.xxfc.platform.order.pojo.order.RentVehicleBO; import com.xxfc.platform.order.pojo.order.RentVehicleBO;
import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO; import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO;
import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.vehicle.entity.VehicleBookRecord; import com.xxfc.platform.vehicle.entity.VehicleBookRecord;
import com.xxfc.platform.vehicle.entity.VehicleModel; import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.feign.VehicleFeign; import com.xxfc.platform.vehicle.feign.VehicleFeign;
...@@ -38,8 +40,8 @@ import static com.github.wxiaoqi.security.admin.constant.enumerate.MemberEnum.*; ...@@ -38,8 +40,8 @@ import static com.github.wxiaoqi.security.admin.constant.enumerate.MemberEnum.*;
@Log4j @Log4j
public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicleBiz, RentVehicleBO> { public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicleBiz, RentVehicleBO> {
private static BigDecimal DRIVER_PRICE = new BigDecimal("600.00"); private static BigDecimal DRIVER_PRICE;
private static BigDecimal DAMAGE_SAFE = new BigDecimal("100.00"); //车损免赔 private static BigDecimal DAMAGE_SAFE;
private static Integer DRIVER_TYPE_COMPANY = 1; private static Integer DRIVER_TYPE_COMPANY = 1;
private static Integer DRIVER_TYPE_DAMAGE_SAFE = 1; private static Integer DRIVER_TYPE_DAMAGE_SAFE = 1;
private static Integer DISCOUNT_STATUS_NONE = 0; private static Integer DISCOUNT_STATUS_NONE = 0;
...@@ -58,6 +60,9 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -58,6 +60,9 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
@Autowired @Autowired
UserFeign userFeign; UserFeign userFeign;
@Autowired
ThirdFeign thirdFeign;
@PostConstruct @PostConstruct
public void init(){ public void init(){
this.orderTypeEnum = OrderTypeEnum.RentVehicle; this.orderTypeEnum = OrderTypeEnum.RentVehicle;
...@@ -67,10 +72,25 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -67,10 +72,25 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
@Override @Override
public void initDetail(RentVehicleBO bo) { public void initDetail(RentVehicleBO bo) {
super.initDetail(bo); super.initDetail(bo);
initDictionary();
VehicleModel vehicleModel = vehicleFeign.get(bo.getModelId()).getData(); VehicleModel vehicleModel = vehicleFeign.get(bo.getModelId()).getData();
bo.setVehicleModel(vehicleModel); bo.setVehicleModel(vehicleModel);
} }
private void initDictionary() {
Dictionary driverPriceDic = thirdFeign.dictionaryGet(BeanUtil.beanToMap(new Dictionary(){{
setType("APP_ORDER");
setCode("DRIVER_PRICE");
}}, false, true)).getData().get(0);
Dictionary damageSafeDic = thirdFeign.dictionaryGet(BeanUtil.beanToMap(new Dictionary(){{
setType("APP_ORDER");
setCode("DAMAGE_SAFE");
}}, false, true)).getData().get(0);
this.DRIVER_PRICE = new BigDecimal(driverPriceDic.getDetail());
this.DAMAGE_SAFE = new BigDecimal(damageSafeDic.getDetail());
}
@Override @Override
public void handleDetail(RentVehicleBO bo) { public void handleDetail(RentVehicleBO bo) {
//获取可用车辆 //获取可用车辆
......
...@@ -34,6 +34,9 @@ ...@@ -34,6 +34,9 @@
<case value="2" resultType="com.xxfc.platform.order.pojo.order.OrderPageVO"> <case value="2" resultType="com.xxfc.platform.order.pojo.order.OrderPageVO">
<association column="detail_id" property="orderTourDetail" select="com.xxfc.platform.order.mapper.OrderTourDetailMapper.selectByPrimaryKey" javaType="com.xxfc.platform.order.entity.OrderTourDetail"></association> <association column="detail_id" property="orderTourDetail" select="com.xxfc.platform.order.mapper.OrderTourDetailMapper.selectByPrimaryKey" javaType="com.xxfc.platform.order.entity.OrderTourDetail"></association>
</case> </case>
<case value="3" resultType="com.xxfc.platform.order.pojo.order.OrderPageVO">
<association column="detail_id" property="orderMemberDetail" select="com.xxfc.platform.order.mapper.OrderMemberDetailMapper.selectByPrimaryKey" javaType="com.xxfc.platform.order.entity.OrderMemberDetail"></association>
</case>
</discriminator> </discriminator>
</resultMap> </resultMap>
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.order.mapper.OrderMemberDetailMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.order.entity.OrderMemberDetail" id="orderMemberDetailMap">
<result property="id" column="id"/>
<result property="orderId" column="order_id"/>
<result property="name" column="name"/>
<result property="crtTime" column="crt_time"/>
<result property="updTime" column="upd_time"/>
<result property="rentFreeNum" column="rent_free_num"/>
<result property="rentPercent" column="rent_percent"/>
</resultMap>
</mapper>
\ No newline at end of file
...@@ -83,8 +83,8 @@ public interface TourFeign { ...@@ -83,8 +83,8 @@ public interface TourFeign {
* @param tourGoodOrderFindVo * @param tourGoodOrderFindVo
* @return * @return
*/ */
@GetMapping("/tourGood/verfication/orders") @RequestMapping(value = "/tourGood/verfication/orders", method = RequestMethod.POST)
PageDataVO<TourGoodOrderVo> findTourGoodOrders(@RequestParam("tourGoodOrderFindVo") Map<String,Object> tourGoodOrderFindVo); PageDataVO<TourGoodOrderVo> findTourGoodOrders(@RequestBody TourGoodOrderFindVo tourGoodOrderFindVo);
@ApiOperation("首页旅游列表") @ApiOperation("首页旅游列表")
@GetMapping(value = "/tourGood/app/shopList") @GetMapping(value = "/tourGood/app/shopList")
......
...@@ -119,11 +119,15 @@ public class TourTagBiz extends BaseBiz<TourTagMapper,TourTag> { ...@@ -119,11 +119,15 @@ public class TourTagBiz extends BaseBiz<TourTagMapper,TourTag> {
* @return * @return
*/ */
public TourTagAndBannerDTO findTourTagById(Integer tagId){ public TourTagAndBannerDTO findTourTagById(Integer tagId){
TourTagAndBannerDTO tourTagAndBannerDTO = new TourTagAndBannerDTO();
//根据旅游标签id查询出标签信息 //根据旅游标签id查询出标签信息
TourTag tourTag = mapper.findById(tagId); TourTag tourTag = mapper.findById(tagId);
if (log.isDebugEnabled()){ if (log.isDebugEnabled()){
log.debug("根据标签id=[{}]查询出标签信息:[{}]",tagId,tourTag); log.debug("根据标签id=[{}]查询出标签信息:[{}]",tagId,tourTag);
} }
if (tourTag==null){
return tourTagAndBannerDTO;
}
TourTagDTO tourTagDTO = new TourTagDTO(); TourTagDTO tourTagDTO = new TourTagDTO();
BeanUtils.copyProperties(tourTag,tourTagDTO); BeanUtils.copyProperties(tourTag,tourTagDTO);
//根据旅游标签id查询出标签对应的轮播图信息 //根据旅游标签id查询出标签对应的轮播图信息
...@@ -131,7 +135,7 @@ public class TourTagBiz extends BaseBiz<TourTagMapper,TourTag> { ...@@ -131,7 +135,7 @@ public class TourTagBiz extends BaseBiz<TourTagMapper,TourTag> {
if (log.isDebugEnabled()){ if (log.isDebugEnabled()){
log.debug("根据标签id=[{}],查询出轮播图信息:[{}]",tagId,tourTagBannerDTOS); log.debug("根据标签id=[{}],查询出轮播图信息:[{}]",tagId,tourTagBannerDTOS);
} }
TourTagAndBannerDTO tourTagAndBannerDTO = new TourTagAndBannerDTO();
//组装数据 //组装数据
tourTagAndBannerDTO.setTourTagDTO(tourTagDTO); tourTagAndBannerDTO.setTourTagDTO(tourTagDTO);
tourTagAndBannerDTO.setTourTagBannerDTOS(tourTagBannerDTOS); tourTagAndBannerDTO.setTourTagBannerDTOS(tourTagBannerDTOS);
......
package com.xxfc.platform.tour.config; package com.xxfc.platform.tour.config;
import feign.Logger;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
...@@ -10,4 +11,8 @@ public class RestConfiguration { ...@@ -10,4 +11,8 @@ public class RestConfiguration {
public RestTemplate restTemplate() { public RestTemplate restTemplate() {
return new RestTemplate(); return new RestTemplate();
} }
@Bean
public Logger.Level feignLevel(){
return Logger.Level.HEADERS;
}
} }
...@@ -21,8 +21,8 @@ public class TourGoodVerificationController extends BaseController<TourGoodVerif ...@@ -21,8 +21,8 @@ public class TourGoodVerificationController extends BaseController<TourGoodVerif
* @return * @return
*/ */
@ApiOperation("订单列表的查询") @ApiOperation("订单列表的查询")
@GetMapping("/orders") @RequestMapping(value = "/orders", method = RequestMethod.POST)
public PageDataVO<TourGoodOrderVo> findTourGoodOrders( TourGoodOrderFindVo tourGoodOrderFindVo){ public PageDataVO<TourGoodOrderVo> findTourGoodOrders( @RequestBody TourGoodOrderFindVo tourGoodOrderFindVo){
PageDataVO<TourGoodOrderVo> tourGoodOrderPageDataVo = getBaseBiz().findTourGoodOrdersPage(tourGoodOrderFindVo); PageDataVO<TourGoodOrderVo> tourGoodOrderPageDataVo = getBaseBiz().findTourGoodOrdersPage(tourGoodOrderFindVo);
return tourGoodOrderPageDataVo; return tourGoodOrderPageDataVo;
} }
......
...@@ -17,6 +17,17 @@ spring: ...@@ -17,6 +17,17 @@ spring:
nacos: nacos:
config: config:
file-extension: yaml file-extension: yaml
debug: true
feign:
compression:
response:
enabled: true
request:
enabled: true
logging:
level:
com.github.wxiaoqi: debug
com.xxfc: debug
--- ---
spring: spring:
profiles: dev profiles: dev
......
...@@ -2,14 +2,20 @@ package com.xxfc.platform.universal.feign; ...@@ -2,14 +2,20 @@ package com.xxfc.platform.universal.feign;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.entity.OrderRefund; import com.xxfc.platform.universal.entity.OrderRefund;
import com.xxfc.platform.universal.vo.OrderPayVo; import com.xxfc.platform.universal.vo.OrderPayVo;
import com.xxfc.platform.universal.vo.OrderRefundVo; import com.xxfc.platform.universal.vo.OrderRefundVo;
import com.xxfc.platform.universal.vo.TrafficViolations; import com.xxfc.platform.universal.vo.TrafficViolations;
import feign.Param;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
/** /**
* ${DESCRIPTION} * ${DESCRIPTION}
...@@ -49,4 +55,15 @@ public interface ThirdFeign { ...@@ -49,4 +55,15 @@ public interface ThirdFeign {
@GetMapping("/LicensePlateType") @GetMapping("/LicensePlateType")
ObjectRestResponse getLicensePlateType(); ObjectRestResponse getLicensePlateType();
/***************************************** 数据字典 ********************************************/
// @GetMapping(value = "/dictionary/getParents")
@RequestMapping(value = "/dictionary/getParents", method = RequestMethod.GET)
public ObjectRestResponse<List<Dictionary>> dictionaryGetParent(@RequestParam String type);
// @GetMapping(value = "/dictionary/get")
@RequestMapping(value = "/dictionary/get", method = RequestMethod.GET)
public ObjectRestResponse<List<Dictionary>> dictionaryGet(@RequestParam Map<String, Object> dictionary);
} }
...@@ -43,7 +43,7 @@ public class DictionaryBiz extends BaseBiz<DictionaryMapper, Dictionary> { ...@@ -43,7 +43,7 @@ public class DictionaryBiz extends BaseBiz<DictionaryMapper, Dictionary> {
return ObjectRestResponse.succ(); return ObjectRestResponse.succ();
} }
public ObjectRestResponse get(Dictionary dictionary) { public ObjectRestResponse<List<Dictionary>> get(Dictionary dictionary) {
if(dictionary == null) { if(dictionary == null) {
return ObjectRestResponse.paramIsEmpty(); return ObjectRestResponse.paramIsEmpty();
} }
...@@ -79,7 +79,7 @@ public class DictionaryBiz extends BaseBiz<DictionaryMapper, Dictionary> { ...@@ -79,7 +79,7 @@ public class DictionaryBiz extends BaseBiz<DictionaryMapper, Dictionary> {
return ObjectRestResponse.succ(); return ObjectRestResponse.succ();
} }
public ObjectRestResponse getParent(String type) { public ObjectRestResponse<List<Dictionary>> getParent(String type) {
if(StringUtils.isEmpty(type)) { if(StringUtils.isEmpty(type)) {
return ObjectRestResponse.paramIsEmpty(); return ObjectRestResponse.paramIsEmpty();
} }
......
...@@ -48,6 +48,18 @@ public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> { ...@@ -48,6 +48,18 @@ public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> {
String partnerKey=SystemConfig.APP_PARTNER_KEY; String partnerKey=SystemConfig.APP_PARTNER_KEY;
Integer payAmount=orderRefundVo.getAmount(); Integer payAmount=orderRefundVo.getAmount();
Integer refundAmount=orderRefundVo.getRefundAmount(); Integer refundAmount=orderRefundVo.getRefundAmount();
//临时处理
payAmount = payAmount/100000;
if(payAmount <= 0) {
payAmount = 1;
}
refundAmount = refundAmount/100000;
if(refundAmount <= 0) {
refundAmount = 1;
}
String refundDesc =StringUtils.isNotBlank(orderRefundVo.getRefundDesc())?orderRefundVo.getRefundDesc(): "审核通过,退款"; String refundDesc =StringUtils.isNotBlank(orderRefundVo.getRefundDesc())?orderRefundVo.getRefundDesc(): "审核通过,退款";
String out_refund_no = Snowflake.build() + ""; String out_refund_no = Snowflake.build() + "";
if(StringUtils.isBlank(order_no)||StringUtils.isBlank(appid)||StringUtils.isBlank(mchId)||StringUtils.isBlank(partnerKey) if(StringUtils.isBlank(order_no)||StringUtils.isBlank(appid)||StringUtils.isBlank(mchId)||StringUtils.isBlank(partnerKey)
......
...@@ -8,6 +8,8 @@ import io.swagger.annotations.ApiOperation; ...@@ -8,6 +8,8 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController @RestController
@RequestMapping(value = "dictionary") @RequestMapping(value = "dictionary")
@Api(value = "数据字典") @Api(value = "数据字典")
...@@ -18,13 +20,13 @@ public class DictionaryController { ...@@ -18,13 +20,13 @@ public class DictionaryController {
@PostMapping(value = "/add") @PostMapping(value = "/add")
@ApiOperation(value = "添加数据") @ApiOperation(value = "添加数据")
public ObjectRestResponse<?> add(@RequestBody Dictionary dictionary) { public ObjectRestResponse add(@RequestBody Dictionary dictionary) {
return dictionaryBiz.add(dictionary); return dictionaryBiz.add(dictionary);
} }
@GetMapping(value = "/get") @GetMapping(value = "/get")
@ApiOperation(value = "获取数据") @ApiOperation(value = "获取数据")
public ObjectRestResponse<?> get(Dictionary dictionary) { public ObjectRestResponse<List<Dictionary>> get(Dictionary dictionary) {
return dictionaryBiz.get(dictionary); return dictionaryBiz.get(dictionary);
} }
...@@ -42,7 +44,7 @@ public class DictionaryController { ...@@ -42,7 +44,7 @@ public class DictionaryController {
@GetMapping(value = "/getParents") @GetMapping(value = "/getParents")
@ApiOperation(value = "获取所有的父类元素 pid=0") @ApiOperation(value = "获取所有的父类元素 pid=0")
public ObjectRestResponse getParent(String type) { public ObjectRestResponse<List<Dictionary>> getParent(String type) {
return dictionaryBiz.getParent(type); return dictionaryBiz.getParent(type);
} }
} }
...@@ -19,5 +19,4 @@ public enum VehicleScoreType { ...@@ -19,5 +19,4 @@ public enum VehicleScoreType {
* 检验感受 * 检验感受
*/ */
EXPERIENCE; EXPERIENCE;
} }
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