wangyingyang

update orderand bug fix

Showing 33 changed files with 1148 additions and 110 deletions
package com.infoloop.tianting.config;
import com.infoloop.tianting.COperatorServiceProtoRpcGrpc;
import com.infoloop.tianting.CategoriesServiceProtoRpcGrpc;
import com.infoloop.tianting.SkuServiceProtoRpcGrpc;
import com.infoloop.tianting.clientcustomerorderservice.ClientCustomerOrderServiceRpcGrpc;
......@@ -45,6 +46,9 @@ import static com.infoloop.tianting.constant.ConfigConstants.MEAL_SERVICE_RPC_UR
import static com.infoloop.tianting.constant.ConfigConstants.MENU_SERVICE_CHANNEL;
import static com.infoloop.tianting.constant.ConfigConstants.MENU_SERVICE_RPC_PORT;
import static com.infoloop.tianting.constant.ConfigConstants.MENU_SERVICE_RPC_URL;
import static com.infoloop.tianting.constant.ConfigConstants.OPERATOR_SERVICE_CHANNEL;
import static com.infoloop.tianting.constant.ConfigConstants.OPERATOR_SERVICE_RPC_PORT;
import static com.infoloop.tianting.constant.ConfigConstants.OPERATOR_SERVICE_RPC_URL;
import static com.infoloop.tianting.constant.ConfigConstants.ORDER_SERVICE_CHANNEL;
import static com.infoloop.tianting.constant.ConfigConstants.ORDER_SERVICE_RPC_PORT;
import static com.infoloop.tianting.constant.ConfigConstants.ORDER_SERVICE_RPC_URL;
......@@ -209,4 +213,21 @@ public class GrpcConfig {
public TiantingDeliveryRuleServiceRpcGrpc.TiantingDeliveryRuleServiceRpcBlockingStub deliveryServiceRpcBlockingStub(@Autowired @Qualifier(DELIVERY_SERVICE_CHANNEL) final ManagedChannel channel) {
return TiantingDeliveryRuleServiceRpcGrpc.newBlockingStub(channel);
}
@Bean(OPERATOR_SERVICE_CHANNEL)
public ManagedChannel operatorServiceChannel(@Value(OPERATOR_SERVICE_RPC_URL) final String url,
@Value(OPERATOR_SERVICE_RPC_PORT) final int port,
@Autowired final ClientInterceptor clientInterceptor) {
return NettyChannelBuilder.forAddress(url, port)
.idleTimeout(DEFAULT_TIMEOUT_DAYS, TimeUnit.DAYS)
.intercept(clientInterceptor)
.usePlaintext()
.maxInboundMessageSize(Integer.MAX_VALUE)
.build();
}
@Bean
public COperatorServiceProtoRpcGrpc.COperatorServiceProtoRpcBlockingStub operatorServiceRpcBlockingStub(@Autowired @Qualifier(OPERATOR_SERVICE_CHANNEL) final ManagedChannel channel) {
return COperatorServiceProtoRpcGrpc.newBlockingStub(channel);
}
}
......
......@@ -7,6 +7,7 @@ import com.infoloop.tianting.intercepter.LoginInterceptor;
import com.infoloop.tianting.intercepter.RequestMonitor;
import com.infoloop.tianting.intercepter.ResourceInjector;
import com.infoloop.tianting.service.client.ClientCustomerServiceRpcClient;
import com.infoloop.tianting.service.client.OperatorServiceRpcClient;
import com.infoloop.tianting.tracing.HttpTracingInterceptor;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -33,12 +34,13 @@ public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
public WebMvcConfig(final Tracing tracing,
final ResourceInjector resourceInjector,
final ClientCustomerServiceRpcClient clientCustomerServiceRpcClient) {
final ClientCustomerServiceRpcClient clientCustomerServiceRpcClient,
final OperatorServiceRpcClient operatorServiceRpcClient) {
this.httpInterceptors = new ArrayList<>();
this.httpInterceptors.add(new HttpTracingInterceptor(tracing));
this.httpInterceptors.add(new RequestMonitor());
this.httpInterceptors.add(new ApiSignInterceptor());
this.httpInterceptors.add(new LoginInterceptor(clientCustomerServiceRpcClient));
this.httpInterceptors.add(new LoginInterceptor(clientCustomerServiceRpcClient, operatorServiceRpcClient));
this.httpInterceptors.add(resourceInjector);
}
......
......@@ -60,10 +60,14 @@ public interface ConfigConstants {
String DELIVERY_SERVICE_RPC_PORT = "${grpc.delivery-service.port}";
String DELIVERY_SERVICE_CHANNEL = "delivery-service-channel";
String OPERATOR_SERVICE_RPC_URL = "${grpc.operator-service.url}";
String OPERATOR_SERVICE_RPC_PORT = "${grpc.operator-service.port}";
String OPERATOR_SERVICE_CHANNEL = "operator-service-channel";
String ASYNC_EXECUTOR = "asyncExecutor";
String SCHEDULED_TASK_EXECUTOR = "scheduledTaskExecutor";
String MINI_PROGRAM_APP_ID = "${miniprogram.app-id}";
String MINI_PROGRAM_APP_SECRET = "${miniprogram.app-secret}";
String MINI_PROGRAM_APP_ID = "${miniprogram.appId}";
String MINI_PROGRAM_APP_SECRET = "${miniprogram.appSecret}";
}
......
......@@ -54,6 +54,8 @@ public class LoginContextHolder {
private String name;
private String openid;
}
}
......
......@@ -22,8 +22,6 @@ import org.springframework.http.HttpStatus;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
......@@ -36,7 +34,6 @@ import org.springframework.web.bind.annotation.RestController;
public class ClientCustomerController {
private final ClientCustomerService clientCustomerService;
private final WxMiniProgramService wxMiniProgramService;
private final LoginService loginService;
@ApiOperation(value = "根据hisCustomerId获取ClientCustomer")
@GetMapping("/customers/his/{hisCustomerId}")
......@@ -61,26 +58,6 @@ public class ClientCustomerController {
enterpriseId, customerId);
}
@ApiOperation(value = "小程序:根据code获取openId")
@GetMapping("/wx/miniprogram/customers/openid/{code}")
@ResponseStatus(HttpStatus.OK)
public WxUserOpenIdDto getOpenIdByCode(@PathVariable String code) {
return wxMiniProgramService.getWxUserOpenIdByCode(code);
}
@ApiOperation(value = "小程序:根据code获取手机号")
@GetMapping("/wx/miniprogram/customers/phone/{code}")
@ResponseStatus(HttpStatus.OK)
public WxUserPhoneResponseDto getPhoneByCode(@PathVariable String code) {
return wxMiniProgramService.getUserPhoneInfoByCode(code);
}
@SaIgnore
@ApiOperation(value = "登陆")
@PostMapping("/login")
@ResponseStatus(HttpStatus.OK)
public SaTokenInfo login(@Valid@RequestBody LoginDto loginDto) {
return loginService.login(loginDto);
}
}
......
package com.infoloop.tianting.controller;
import cn.dev33.satoken.annotation.SaIgnore;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.infoloop.tianting.model.common.PageResult;
import com.infoloop.tianting.model.dto.OrderDbDTO;
import com.infoloop.tianting.model.dto.OrderDbDTO.OrderDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderDto;
import com.infoloop.tianting.service.OrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -28,11 +30,12 @@ import org.springframework.web.bind.annotation.RestController;
public class ClientOrderController {
private final OrderService orderService;
@ApiOperation(value = "根据状态获取用户订单")
@PostMapping("/orders/condition")
@SaIgnore
@ApiOperation(value = "院区端分页获取用户订单")
@PostMapping("/client/orders/pagination")
@ResponseStatus(HttpStatus.OK)
public List<OrderDto> getOrderByCondition(@Valid@RequestBody QueryOrderDto queryOrderDto) {
return orderService.getOrdersByCondition(queryOrderDto);
public PageResult<OrderDto> getOrderByByPagination(@Valid@RequestBody OrderDbDTO.QueryOrderByPaginationDto queryOrderDto) {
return orderService.getOrdersByPagination(queryOrderDto);
}
}
......
package com.infoloop.tianting.controller;
import cn.dev33.satoken.annotation.SaIgnore;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.infoloop.tianting.model.dto.InventoryDbDTO.ClientDto;
import com.infoloop.tianting.model.dto.MenuDbDTO.MenuDto;
......@@ -26,6 +27,7 @@ import org.springframework.web.bind.annotation.RestController;
public class InventoryController {
private final InventoryService inventoryService;
@SaIgnore
@ApiOperation(value = "根据Id获取Client")
@GetMapping("/enterprises/{enterpriseId}/clients/{clientId}")
@ResponseStatus(HttpStatus.OK)
......
package com.infoloop.tianting.controller;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.dev33.satoken.stp.SaTokenInfo;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.infoloop.tianting.model.dto.PermissionDTO;
import com.infoloop.tianting.model.dto.WxUserDto.WxUserOpenIdDto;
import com.infoloop.tianting.model.dto.WxUserDto.WxUserOpenIdDto1;
import com.infoloop.tianting.service.LoginService;
import com.infoloop.tianting.utils.JsonUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import java.util.LinkedHashMap;
import javax.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "登陆")
@ApiSupport(order = -1)
@Slf4j
@Validated
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class LoginController {
private final LoginService loginService;
@SaIgnore
@ApiOperation(value = "登陆")
@PostMapping("/login")
@ResponseStatus(HttpStatus.OK)
public SaTokenInfo login(@Valid @RequestBody PermissionDTO.LoginDto loginDto) {
return loginService.login(loginDto);
}
}
package com.infoloop.tianting.controller;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.infoloop.tianting.model.dto.MenuDbDTO.BatchCreateMenuRefsDto;
import com.infoloop.tianting.model.dto.MenuDbDTO.BatchCreateMenuRefsResponseDto;
import com.infoloop.tianting.model.dto.MenuDbDTO.MenuDetailDto;
import com.infoloop.tianting.model.dto.MenuDbDTO.MenuDto;
import com.infoloop.tianting.model.dto.MenuDbDTO.MenuRefDto;
......@@ -10,6 +12,7 @@ import io.swagger.annotations.ApiOperation;
import java.util.List;
import javax.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.Value;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
......@@ -56,4 +59,13 @@ public class MenuController {
return menuService.getClientCustomerMenuRefsByCustomerId(enterpriseId, customerId);
}
@ApiOperation(value = "批量创建餐单绑定")
@PostMapping("/menuRefs/creation")
@ResponseStatus(HttpStatus.OK)
public BatchCreateMenuRefsResponseDto batchCreateMenuRefsByCustomerId(
@Valid@RequestBody BatchCreateMenuRefsDto batchCreateMenuRefsDto
){
return menuService.batchCreateMenuRefs(batchCreateMenuRefsDto);
}
}
......
package com.infoloop.tianting.controller;
import cn.dev33.satoken.annotation.SaIgnore;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.infoloop.tianting.model.dto.WxUserDto.WxUserOpenIdDto;
import com.infoloop.tianting.model.dto.WxUserDto.WxUserPhoneResponseDto;
import com.infoloop.tianting.service.WxMiniProgramService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "小程序个人信息")
@ApiSupport(order = -1)
@Slf4j
@Validated
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class MiniProgramController {
private final WxMiniProgramService wxMiniProgramService;
@ApiOperation(value = "小程序:根据code获取openId")
@GetMapping("/wx/miniprogram/customers/openid/{code}")
@ResponseStatus(HttpStatus.OK)
public WxUserOpenIdDto getOpenIdByCode(@PathVariable String code) {
return wxMiniProgramService.getWxUserOpenIdByCode(code);
}
@SaIgnore
@ApiOperation(value = "小程序:根据code获取手机号")
@GetMapping("/wx/miniprogram/customers/phone/{code}")
@ResponseStatus(HttpStatus.OK)
public WxUserPhoneResponseDto getPhoneByCode(@PathVariable String code) {
return wxMiniProgramService.getUserPhoneInfoByCode(code);
}
}
......@@ -3,8 +3,10 @@ package com.infoloop.tianting.controller;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderResponse;
import com.infoloop.tianting.model.dto.OrderDbDTO.OrderAndDetailsDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.OrderDetailDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.OrderDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByConditionDto;
import com.infoloop.tianting.service.OrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -34,10 +36,22 @@ public class OrderController {
@ApiOperation(value = "根据customerId获取用户订单")
@GetMapping("/orders/{customerId}")
@ResponseStatus(HttpStatus.OK)
public List<OrderDto> getOrderByCustomerId(@PathVariable Integer customerId) {
public OrderAndDetailsDto getOrderByCustomerId(@PathVariable Integer customerId) {
return orderService.getOrdersByCustomerId(customerId);
}
@ApiOperation(value = "根据openId获取用户订单")
@GetMapping("/enterprises/{enterpriseId}/orders/open/{openId}")
@ResponseStatus(HttpStatus.OK)
public OrderAndDetailsDto getOrderByOpenId(@PathVariable Integer enterpriseId,
@PathVariable String openId) {
return orderService.getOrdersByCondition(QueryOrderByConditionDto.builder()
.shouldFilterOpenId(true)
.enterpriseId(enterpriseId)
.openId(openId)
.build());
}
@ApiOperation(value = "根据orderId获取订单详情")
@GetMapping("/orderDetails/{orderId}")
@ResponseStatus(HttpStatus.OK)
......
package com.infoloop.tianting.controller;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.infoloop.tianting.model.dto.MenuDbDTO;
import com.infoloop.tianting.model.dto.MenuDbDTO.BatchCreateMenuRefsResponseDto;
import com.infoloop.tianting.model.dto.PayDTO;
import com.infoloop.tianting.model.dto.PayDTO.PayResponseDto;
import com.infoloop.tianting.service.client.PayServiceClient;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import javax.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "微信小程序发送付款通知接口")
@ApiSupport(order = 0)
@Slf4j
@Validated
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class PayController {
private final PayServiceClient payServiceClient;
@ApiOperation(value = "支付通知")
@PostMapping("/pay/inform")
@ResponseStatus(HttpStatus.OK)
public PayResponseDto batchCreateMenuRefsByCustomerId(
@Valid @RequestBody PayDTO.PayInformRequestDto payInformRequestDto
){
return payServiceClient.payInform(payInformRequestDto);
}
}
......@@ -9,7 +9,7 @@ import lombok.Getter;
public enum LoginSourceEnum{
CUSTOMER(1, "小程序住院客户"),
MINI_PROGRAM(2, "小程序非住院客户"),
CLIENT(3, "院区端"),
OPERATOR(3, "院区端"),
KDS(4, "KDS"),
;
......
......@@ -13,6 +13,7 @@ import com.infoloop.tianting.exception.ErrorCodeEnum;
import com.infoloop.tianting.model.common.ResponseResult;
import com.infoloop.tianting.service.ClientCustomerService;
import com.infoloop.tianting.service.client.ClientCustomerServiceRpcClient;
import com.infoloop.tianting.service.client.OperatorServiceRpcClient;
import com.infoloop.tianting.utils.ResponseUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
......@@ -32,8 +33,9 @@ import java.io.IOException;
@SuppressWarnings("all")
@RequiredArgsConstructor
public class LoginInterceptor extends HandlerInterceptorAdapter {
// private final ClientCustomerService clientCustomerService;
private final ClientCustomerServiceRpcClient clientCustomerServiceRpcClient;
private final OperatorServiceRpcClient operatorServiceRpcClient;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
......@@ -63,20 +65,34 @@ public class LoginInterceptor extends HandlerInterceptorAdapter {
private boolean handleLogin(HttpServletRequest request, HttpServletResponse response, LoginContextHolder.LoginInfo.LoginInfoBuilder builder) throws SaTokenException {
StpUtil.checkLogin();
final var loginId = StpUtil.getLoginIdAsInt();
final var enterpriseId = Convert.toInt(StpUtil.getExtra(CommonConstants.ENTERPRISE_ID));
final var loginSource = Convert.toInt(StpUtil.getExtra(CommonConstants.LOGIN_SOURCE));
// if (loginSource.equals(LoginSourceEnum.CUSTOMER.getValue())) {
if (loginSource.equals(LoginSourceEnum.CUSTOMER.getValue())) {
final var loginId = StpUtil.getLoginIdAsInt();
final var customer = clientCustomerServiceRpcClient.getClientCustomerById(loginId);
if (customer == null) {
response.setStatus(HttpStatus.FORBIDDEN.value());
ResponseUtil.write(response, ResponseResult.failed(ErrorCodeEnum.VALIDATE_FAILED));
return false;
}
builder.id(loginId)
.enterpriseId(enterpriseId)
.name(customer.getResponse().getName());
builder.id(loginId).enterpriseId(enterpriseId).name(customer.getResponse().getName());
return true;
} else if (loginSource.equals(LoginSourceEnum.OPERATOR.getValue())){
final var loginId = StpUtil.getLoginIdAsInt();
final var opeartor = operatorServiceRpcClient.getCOperatorById(loginId);
if (opeartor == null) {
response.setStatus(HttpStatus.FORBIDDEN.value());
ResponseUtil.write(response, ResponseResult.failed(ErrorCodeEnum.VALIDATE_FAILED));
return false;
}
builder.id(loginId).enterpriseId(enterpriseId).name(opeartor.getName());
return true;
} else {
final var loginId = StpUtil.getLoginIdAsString();
builder.openid(loginId).enterpriseId(enterpriseId);
return true;
}
}
......
package com.infoloop.tianting.model.dto;
import com.infoloop.tianting.clientcustomerorderservice.OrderSourceEnum;
import com.infoloop.tianting.menuservice.CloseTimeTypeEnum;
import com.infoloop.tianting.menuservice.DishSelectRuleEnum;
import com.infoloop.tianting.menuservice.DishTypeEnum;
import com.infoloop.tianting.menuservice.ModeOfPaymentEnum;
import com.infoloop.tianting.model.dto.MenuDbDTO.CreateMenuRefsDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.models.auth.In;
import java.time.LocalDateTime;
import java.util.List;
import lombok.Builder;
......@@ -75,6 +78,9 @@ public class MenuDbDTO {
@ApiModelProperty(value = "更新来源")
private Integer updateSource;
@ApiModelProperty(value = "发布时间")
private String publishAt;
}
@Data
......@@ -116,4 +122,34 @@ public class MenuDbDTO {
private Integer creationSource;
}
@Data
@Builder
@ToString
@ApiModel(description = "批量餐单绑定数据")
public static class CreateMenuRefsDto {
private Integer menuId;
private Integer customerId;
private boolean isTop;
}
@Data
@Builder
@ToString
@ApiModel(description = "批量餐单绑定数据")
public static class BatchCreateMenuRefsDto {
private Integer createdBy;
private OrderSourceEnum creationSource;
private Integer enterpriseId;
private List<CreateMenuRefsDto> creations;
}
@Data
@Builder
@ToString
@ApiModel(description = "批量餐单绑定数据")
public static class BatchCreateMenuRefsResponseDto {
private Boolean isCreated;
private List<Integer> ids;
}
}
......
package com.infoloop.tianting.model.dto;
import com.infoloop.tianting.clientcustomerorderservice.CloseTimeType;
import com.infoloop.tianting.clientcustomerorderservice.OrderStatusEnum;
import com.infoloop.tianting.menuservice.CloseTimeTypeEnum;
import com.infoloop.tianting.model.common.PageInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
......@@ -43,10 +45,22 @@ public class OrderDbDTO {
@Data
@ApiModel(description = "查询订单Dto")
public static class QueryOrderDto {
public static class QueryOrderByPaginationDto {
private Integer enterpriseId;
private boolean shouldFilterStatus;
private Integer clientId;
private OrderStatusEnum status;
private Integer pn;
private Integer pz;
private String keyword;
}
@Data
@Builder
@ApiModel(description = "查询订单Dto")
public static class QueryOrderByConditionDto {
private Integer enterpriseId;
private Boolean shouldFilterOpenId;
private String openId;
}
@Data
......@@ -120,12 +134,6 @@ public class OrderDbDTO {
@Builder
@ApiModel(description = "创建订单视图")
public static class CreateOrderDto {
// @ApiModelProperty(value = "订单表主键,自增整数")
// private Integer id;
// @ApiModelProperty(value = "订单号")
// private String orderCode;
@ApiModelProperty(value = "企业 ID")
private Integer enterpriseId;
......@@ -135,9 +143,15 @@ public class OrderDbDTO {
@ApiModelProperty(value = "档口 ID")
private Integer stallId;
@ApiModelProperty(value = "需要创建客户 ID")
public Boolean shouldCreateCustomerId;
@ApiModelProperty(value = "客户 ID")
private Integer customerId;
@ApiModelProperty(value = "需要创建阳光厅点餐客户open ID")
private Boolean shouldCreateOpenId;
@ApiModelProperty(value = "阳光厅点餐客户 ID")
private String openId;
......@@ -180,9 +194,6 @@ public class OrderDbDTO {
@ApiModelProperty(value = "点餐桌码")
private String tableCode;
@ApiModelProperty(value = "取餐码")
private String pickupCode;
@ApiModelProperty(value = "订单类型 购买类型:1=堂食,2=外送")
private Integer orderType;
......@@ -205,10 +216,22 @@ public class OrderDbDTO {
@ApiModelProperty(value = "更新来源:小程序点餐=1;院区端=2;kds=3;业务中台 = 4")
private Integer updateSource;
@ApiModelProperty(value = "截单类型")
private CloseTimeType closeTimeType;
@ApiModelProperty(value = "订单菜品详情列表")
private List<CreateOrderDetailDto> orderDetailDtos;
}
@Data
@Builder
@ToString
@ApiModel(description = "订单与订单详情视图")
public static class OrderAndDetailsDto {
private List<OrderDto> orders;
private List<OrderDetailDto> orderDetails;
}
@Data
@Builder
......@@ -383,6 +406,9 @@ public class OrderDbDTO {
@ApiModelProperty(value = "调整配料备注")
private String adjustSkuRemark;
@ApiModelProperty(value = "订单详情")
private List<OrderDetailDto> orderDetails;
}
@Data
......
package com.infoloop.tianting.model.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import javax.print.DocFlavor.STRING;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.context.annotation.Primary;
@Data
@ApiModel(description = "支付DTO")
public class PayDTO {
@Data
@Builder
@ApiModel(description = "支付通知请求dto")
@NoArgsConstructor
@AllArgsConstructor
public static class PayInformRequestDto {
private String clientId;
private String orderId;
private String openId;
private String hospitalCode;
private String price;
}
@Data
@Builder
@ApiModel(description = "支付通知结果dto")
@NoArgsConstructor
@AllArgsConstructor
public static class MiniPayRequest {
private String timeStamp;
@JsonProperty("package")
private String packageInfo;
private String paySign;
private String appId;
private String signType;
private String nonceStr;
}
@Data
@Builder
@ApiModel(description = "支付通知结果dto")
@NoArgsConstructor
@AllArgsConstructor
public static class PayResult{
private Boolean TransSN;
private String MsgId;
private MiniPayRequest miniPayRequest;
}
@Data
@Builder
@ApiModel(description = "支付通知响应dto")
@NoArgsConstructor
@AllArgsConstructor
public static class PayResponseDto {
private Boolean success;
private String error;
private PayResult result;
}
@Data
@Builder
@ApiModel(description = "第三方支付平台通知请求dto")
@NoArgsConstructor
@AllArgsConstructor
public static class ThirdPartyPayInformRequestDto {
private String ClientId;
private String TradeId;
private String RequestDate;
private String RequestSource;
private String PayerOpenId;
private String HospitalCode;
private String PID;
private String Remark;
private String TransAmount;
private String TradeDesc;
private String Sign;
}
}
......@@ -16,10 +16,11 @@ public class PermissionDTO {
private LoginSourceEnum loginSourceEnum;
private boolean shouldLoginWithHisCustomerId;
private String hisCustomerId;
private boolean shouldLoginWithCustomerId;
private Integer customerId;
private boolean shouldLoginWithOpenId;
private String openId;
private boolean shouldLoginWithOperatorPhone;
private String operatorPhone;
private boolean shouldLoginWithOpenCode;
private String openCode;
private Integer enterpriseId;
}
}
......
package com.infoloop.tianting.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.models.auth.In;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@ApiModel(description = "WxUserDto")
......@@ -12,13 +15,24 @@ public class WxUserDto {
@Data
@Builder
@ApiModel(description = "WxUserOpenIdDto")
@NoArgsConstructor
@AllArgsConstructor
public static class WxUserOpenIdDto {
public String openid;
}
@Data
@Builder
@ApiModel(description = "WxUserOpenIdDto")
public static class WxUserOpenIdDto1 {
public String openId;
}
@Data
@Builder
@ApiModel(description = "WxUserOpenIdDto")
@NoArgsConstructor
@AllArgsConstructor
public static class WxUserTokenDto {
public String access_token;
}
......@@ -26,14 +40,19 @@ public class WxUserDto {
@Data
@Builder
@ApiModel(description = "WxUserPhoneDto")
@NoArgsConstructor
@AllArgsConstructor
public static class WxUserPhoneInfoDto {
public String phoneNumber;
public String countryCode;
}
@Data
@Builder
@ApiModel(description = "WxUserPhoneDto")
@NoArgsConstructor
@AllArgsConstructor
public static class WxUserPhoneResponseDto {
public Integer errcode;
public String errmsg;
......@@ -41,4 +60,13 @@ public class WxUserDto {
public WxUserPhoneInfoDto phone_info;
}
@Data
@Builder
@ApiModel(description = "WxUserCodeDto")
@NoArgsConstructor
@AllArgsConstructor
public static class WxUserCodeDto {
public String code;
}
}
......
package com.infoloop.tianting.service;
import com.infoloop.tianting.model.dto.MenuDbDTO.BatchCreateMenuRefsDto;
import com.infoloop.tianting.model.dto.MenuDbDTO.BatchCreateMenuRefsResponseDto;
import com.infoloop.tianting.model.dto.MenuDbDTO.MenuDetailDto;
import com.infoloop.tianting.model.dto.MenuDbDTO.MenuDto;
import com.infoloop.tianting.model.dto.MenuDbDTO.MenuRefDto;
......@@ -13,4 +15,6 @@ public interface MenuService {
List<MenuDetailDto> queryMenuDetailsByMenuId(Integer enterpriseId, Integer menuId);
List<MenuRefDto> getClientCustomerMenuRefsByCustomerId(Integer enterpriseId, Integer customerId);
BatchCreateMenuRefsResponseDto batchCreateMenuRefs(BatchCreateMenuRefsDto batchCreateMenuRefsDto);
}
......
package com.infoloop.tianting.service;
import com.infoloop.tianting.model.common.PageResult;
import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderResponse;
import com.infoloop.tianting.model.dto.OrderDbDTO.OrderAndDetailsDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.OrderDetailDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.OrderDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByConditionDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByPaginationDto;
import java.util.List;
public interface OrderService {
List<OrderDto> getOrdersByCustomerId(Integer customerId);
List<OrderDto> getOrdersByCondition(QueryOrderDto queryOrderDto);
OrderAndDetailsDto getOrdersByCustomerId(Integer customerId);
OrderAndDetailsDto getOrdersByCondition(QueryOrderByConditionDto queryOrderDto);
PageResult<OrderDto> getOrdersByPagination(QueryOrderByPaginationDto queryOrderDto);
List<OrderDetailDto> getOrderDetailsByOrderId(Integer orderId);
CreateOrderResponse createOrder(CreateOrderDto createOrderDto);
}
......
package com.infoloop.tianting.service.client;
import com.infoloop.tianting.menuservice.BatchCreateClientCustomerMenuRefsRpcRequest;
import com.infoloop.tianting.menuservice.BatchCreateClientCustomerMenuRefsRpcResponse;
import com.infoloop.tianting.menuservice.ClientCustomerMenuRefCreation;
import com.infoloop.tianting.menuservice.GetClientCustomerMenuRefsByCustomerIdRpcRequest;
import com.infoloop.tianting.menuservice.GetClientCustomerMenuRefsByCustomerIdRpcResponse;
import com.infoloop.tianting.menuservice.GetMenuDetailsByMenuIdsRpcRequest;
......@@ -7,7 +10,12 @@ import com.infoloop.tianting.menuservice.GetMenuDetailsByMenuIdsRpcResponse;
import com.infoloop.tianting.menuservice.GetMicroPublishedMenusByStallIdsRpcRequest;
import com.infoloop.tianting.menuservice.GetMicroPublishedMenusByStallIdsRpcResponse;
import com.infoloop.tianting.menuservice.MenuServiceRpcGrpc;
import com.infoloop.tianting.model.dto.MenuDbDTO.BatchCreateMenuRefsDto;
import com.infoloop.tianting.utils.DateUtil;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.List;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -49,4 +57,23 @@ public class MenuServiceRpcClient {
return menuServiceRpcBlockingStub.getClientCustomerMenuRefsByCustomerId(request);
}
public BatchCreateClientCustomerMenuRefsRpcResponse batchCreateClientCustomerMenuRefs(
BatchCreateMenuRefsDto batchCreateMenuRefsDto) {
final var creations = batchCreateMenuRefsDto.getCreations().stream().map(mr->
ClientCustomerMenuRefCreation.newBuilder()
.setIsTop(mr.isTop())
.setMenuId(mr.getMenuId())
.setCustomerId(mr.getCustomerId())
.setBindAt(LocalDateTime.now().toEpochSecond(ZoneOffset.UTC))
.build())
.collect(Collectors.toList());
final var request = BatchCreateClientCustomerMenuRefsRpcRequest.newBuilder()
.setCreatedBy(batchCreateMenuRefsDto.getCreatedBy())
.setEnterpriseId(batchCreateMenuRefsDto.getEnterpriseId())
.addAllCreations(creations)
.setCreationSource(batchCreateMenuRefsDto.getCreationSource().getNumber())
.build();
return menuServiceRpcBlockingStub.batchCreateClientCustomerMenuRefs(request);
}
}
......
package com.infoloop.tianting.service.client;
import com.infoloop.tianting.COperatorServiceProtoRpcGrpc;
import com.infoloop.tianting.GetCOperatorByIdRpcRequest;
import com.infoloop.tianting.GetCOperatorByMobileOrEmailRpcRequest;
import com.infoloop.tianting.GetCOperatorByMobileOrEmailRpcResponse;
import com.infoloop.tianting.SingleCOperatorRpcResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class OperatorServiceRpcClient {
private final COperatorServiceProtoRpcGrpc.COperatorServiceProtoRpcBlockingStub
cOperatorServiceProtoRpcBlockingStub;
public SingleCOperatorRpcResponse getCOperatorByMobileOrEmail(String keyword) {
final var request = GetCOperatorByMobileOrEmailRpcRequest.newBuilder()
.setKeyword(keyword)
.build();
return cOperatorServiceProtoRpcBlockingStub.getCOperatorByMobileOrEmail(request).getResponse();
}
public SingleCOperatorRpcResponse getCOperatorById(Integer id) {
final var request = GetCOperatorByIdRpcRequest.newBuilder().setId(id).build();
return cOperatorServiceProtoRpcBlockingStub.getCOperatorById(request).getResponse();
}
}
package com.infoloop.tianting.service.client;
//import com.infoloop.tianting.clientcustomerorderservice.BatchCreateClientCustomerOrderAndDetailsRpcRequest;
//import com.infoloop.tianting.clientcustomerorderservice.BatchCreateClientCustomerOrderAndDetailsRpcResponse;
import com.infoloop.tianting.clientcustomerorderservice.BatchCreateClientCustomerOrderDetailsRpcRequest;
import com.infoloop.tianting.clientcustomerorderservice.BatchCreateClientCustomerOrderDetailsRpcResponse;
import com.infoloop.tianting.clientcustomerorderservice.ClientCustomerOrderCreation;
import com.infoloop.tianting.clientcustomerorderservice.ClientCustomerOrderDetailCreation;
import com.infoloop.tianting.clientcustomerorderservice.ClientCustomerOrderServiceRpcGrpc;
import com.infoloop.tianting.clientcustomerorderservice.CloseTimeType;
import com.infoloop.tianting.clientcustomerorderservice.CreateClientCustomerOrderRpcRequest;
import com.infoloop.tianting.clientcustomerorderservice.CreateClientCustomerOrderRpcResponse;
import com.infoloop.tianting.clientcustomerorderservice.CustomerNotice;
......@@ -16,15 +13,20 @@ import com.infoloop.tianting.clientcustomerorderservice.GetClientCustomerOrdersB
import com.infoloop.tianting.clientcustomerorderservice.MealDetail;
import com.infoloop.tianting.clientcustomerorderservice.OrderSourceEnum;
import com.infoloop.tianting.clientcustomerorderservice.OrderStatusEnum;
import com.infoloop.tianting.clientcustomerorderservice.PayStatusEnum;
import com.infoloop.tianting.clientcustomerorderservice.QueryClientCustomerOrdersByConditionRpcRequest;
import com.infoloop.tianting.clientcustomerorderservice.QueryClientCustomerOrdersByPaginationRpcRequest;
import com.infoloop.tianting.clientcustomerorderservice.QueryClientCustomerOrdersByPaginationRpcResponse;
import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderDetailRpcResponse;
import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderRpcResponse;
import com.infoloop.tianting.enums.OrderTypeEnum;
import com.infoloop.tianting.model.common.PageResult;
import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderDetailDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderResponse;
import com.infoloop.tianting.model.dto.OrderDbDTO.OrderDetailDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByConditionDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByPaginationDto;
import io.swagger.models.auth.In;
import java.time.ZoneOffset;
import java.util.ArrayList;
......@@ -43,15 +45,29 @@ public class OrderServiceRpcClient {
GetClientCustomerOrdersByCustomerIdRpcRequest.newBuilder().setCustomerId(customerId).build()).getResponsesList();
}
public List<SingleClientCustomerOrderRpcResponse> getOrdersByCondition(QueryOrderDto queryOrderDto) {
public List<SingleClientCustomerOrderRpcResponse> getOrdersByCondition(
QueryOrderByConditionDto queryOrderDto) {
final var request = QueryClientCustomerOrdersByConditionRpcRequest.newBuilder()
.setEnterpriseId(queryOrderDto.getEnterpriseId())
.setShouldFilterStatus(queryOrderDto.isShouldFilterStatus())
.setStatus(queryOrderDto.getStatus())
.setShouldFilterOpenIds(queryOrderDto.getShouldFilterOpenId())
.addAllOpenIds(List.of(queryOrderDto.getOpenId()))
.build();
return orderServiceRpcBlockingStub.queryClientCustomerOrdersByCondition(request).getResponsesList();
}
public QueryClientCustomerOrdersByPaginationRpcResponse queryClientCustomerOrdersByPagination(
QueryOrderByPaginationDto queryOrderDto) {
final var request = QueryClientCustomerOrdersByPaginationRpcRequest.newBuilder()
.setKeyword(queryOrderDto.getKeyword())
.setPageNo(queryOrderDto.getPn())
.setPageSize(queryOrderDto.getPz())
.setStatus(queryOrderDto.getStatus())
.setEnterpriseId(queryOrderDto.getEnterpriseId())
.setClientId(queryOrderDto.getClientId())
.build();
return orderServiceRpcBlockingStub.queryClientCustomerOrdersByPagination(request);
}
public List<SingleClientCustomerOrderDetailRpcResponse> getOrderDetailsByOrderId(Integer orderId) {
return orderServiceRpcBlockingStub.getClientCustomerOrderDetailsByOrderIds(
GetClientCustomerOrderDetailsByOrderIdsRpcRequest.newBuilder()
......@@ -59,6 +75,14 @@ public class OrderServiceRpcClient {
.addAllOrderIds(List.of(orderId))
.build()).getResponsesList();
}
public List<SingleClientCustomerOrderDetailRpcResponse> getOrderDetailsByOrderIds(List<Integer> orderIds) {
return orderServiceRpcBlockingStub.getClientCustomerOrderDetailsByOrderIds(
GetClientCustomerOrderDetailsByOrderIdsRpcRequest.newBuilder()
.setIncludeDeleted(false)
.addAllOrderIds(orderIds)
.build()).getResponsesList();
}
// public GetOrdersByOpenIdRpcResponse queryOrdersByOpenId(Integer openId) {
// return orderServiceRpcBlockingStub.getOrdersByCustomerId(
// GetOrdersByOpenIdRpcRequest.newBuilder().setOpenId(openId).build());
......@@ -106,26 +130,31 @@ public class OrderServiceRpcClient {
.build();
final var creation = ClientCustomerOrderCreation.newBuilder()
.setShouldCreateCustomerId(true)
.setShouldCreateCustomerId(createOrderDto.getShouldCreateCustomerId())
.setCustomerId(createOrderDto.getCustomerId())
.setStallId(createOrderDto.getStallId())
.setAddress(createOrderDto.getAddress())
.setClientId(createOrderDto.getClientId())
.setShouldCreateOpenId(!createOrderDto.getOpenId().isEmpty())
.setShouldCreateOpenId(createOrderDto.getShouldCreateOpenId())
.setOpenId(createOrderDto.getOpenId())
.setShouldCreateRoomNo(!createOrderDto.getRoomNo().isEmpty())
.setRoomNo(createOrderDto.getRoomNo())
.setShouldCreateTableCode(createOrderDto.getOrderType().equals(OrderTypeEnum.DINE_IN.getValue()))
.setTableCode(createOrderDto.getTableCode())
.setOnlinePay(createOrderDto.getOnlinePay())
.setShouldCreatePayStatus(createOrderDto.getOnlinePay())
.setPayStatus(PayStatusEnum.TO_PAY)
.setMenuId(createOrderDto.getMenuId())
.setTotalNum(createOrderDto.getTotalNum())
.setPayPrice(createOrderDto.getPayPrice())
.setMealTime(createOrderDto.getMealTime().toInstant(ZoneOffset.UTC).toEpochMilli())
.setShouldCreatePickupCode(createOrderDto.getOrderType().equals(OrderTypeEnum.DINE_IN.getValue()))
.setPickupCode(createOrderDto.getPickupCode())
.setShouldCreateTableCode(createOrderDto.getCloseTimeType().equals(CloseTimeType.IMMEDIATELY))
.setTableCode(createOrderDto.getTableCode())
.setShouldCreatePickupCode(createOrderDto.getCloseTimeType().equals(CloseTimeType.IMMEDIATELY))
// .setPickupCode(createOrderDto.getPickupCode())
.setRemark(createOrderDto.getRemark())
.setCustomerNoticeJson(customerNotice)
.setCloseTimeType(createOrderDto.getCloseTimeType())
.setShouldCreateOrderDetails(true)
.addAllOrderDetails(orderDetails)
.build();
......@@ -136,12 +165,6 @@ public class OrderServiceRpcClient {
.setEnterpriseId(createOrderDto.getEnterpriseId())
.setCreatedBy(createOrderDto.getCreatedBy())
.build());
// BatchCreateClientCustomerOrderDetailsRpcResponse orderDetailsRpcResponse = orderServiceRpcBlockingStub.batchCreateClientCustomerOrderDetails(
// BatchCreateClientCustomerOrderDetailsRpcRequest.newBuilder()
// .addAllCreations(orderDetails)
// .setCreatedBy(createOrderDto.getCreatedBy())
// .setEnterpriseId(createOrderDto.getEnterpriseId())
// .setCreationSource(OrderSourceEnum.forNumber(createOrderDto.getCreationSource())).build());
return CreateOrderResponse.builder().id(orderResponse.getId()).isCreated(true).build();
}
......
package com.infoloop.tianting.service.client;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.infoloop.tianting.model.dto.PayDTO.PayInformRequestDto;
import com.infoloop.tianting.model.dto.PayDTO.PayResponseDto;
import com.infoloop.tianting.model.dto.PayDTO.ThirdPartyPayInformRequestDto;
import com.infoloop.tianting.model.dto.WxUserDto.WxUserPhoneResponseDto;
import com.infoloop.tianting.utils.DateUtil;
import com.infoloop.tianting.utils.EncryptionUtil;
import java.time.LocalDateTime;
import lombok.RequiredArgsConstructor;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class PayServiceClient {
private final OkHttpClient client = new OkHttpClient();
public PayResponseDto payInform(PayInformRequestDto payRequestDto) {
try {
String url = "http://10.2.1.166:21051/API/Microapp/CreateOrder?appid=Order0001";
String clientId = "Order0001";
ObjectMapper objectMapper = new ObjectMapper();
ThirdPartyPayInformRequestDto jsonData = new ThirdPartyPayInformRequestDto();
jsonData.setClientId(clientId);
jsonData.setTradeId(payRequestDto.getOrderId());
String requestDate = DateUtil.formatDate(LocalDateTime.now(), DateUtil.YMDHMS);
jsonData.setRequestDate(requestDate);
jsonData.setRequestSource("");
jsonData.setPayerOpenId(payRequestDto.getOpenId());
jsonData.setHospitalCode(payRequestDto.getHospitalCode());
jsonData.setPID("");
jsonData.setRemark("");
jsonData.setTransAmount(payRequestDto.getPrice());
jsonData.setTradeDesc("");
String signStr = EncryptionUtil.sha1Encryption(
clientId+payRequestDto.getOrderId()+requestDate+"Order0001");
jsonData.setSign(signStr);
String jsonDataString = objectMapper.writeValueAsString(jsonData);
// 设置请求体的媒体类型为JSON
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(mediaType, jsonDataString);
Request getPhoneRequest = new Request.Builder()
.url(url)
.post(body)
.build();
Response payResponse = client.newCall(getPhoneRequest).execute();
String payJsonData = payResponse.body().string();
System.out.println("pay json:"+payJsonData);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
PayResponseDto payResponseDto = objectMapper.readValue(payJsonData, PayResponseDto.class);
return payResponseDto;
} catch (Exception e) {
System.out.println(e.getStackTrace().toString());
throw new IllegalArgumentException("支付通知失败");
}
}
}
package com.infoloop.tianting.service.client;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.infoloop.tianting.constant.ConfigConstants;
import com.infoloop.tianting.model.dto.WxUserDto;
import com.infoloop.tianting.model.dto.WxUserDto.WxUserCodeDto;
import com.infoloop.tianting.model.dto.WxUserDto.WxUserOpenIdDto;
import com.infoloop.tianting.model.dto.WxUserDto.WxUserOpenIdDto1;
import com.infoloop.tianting.model.dto.WxUserDto.WxUserPhoneResponseDto;
import com.infoloop.tianting.model.dto.WxUserDto.WxUserTokenDto;
import com.infoloop.tianting.utils.JsonUtil;
import lombok.RequiredArgsConstructor;
import lombok.Value;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
......@@ -24,29 +30,37 @@ public class WxMiniProgramClient {
public WxUserPhoneResponseDto getUserPhoneInfoByCode(String code) {
try {
String getTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
+ ConfigConstants.MINI_PROGRAM_APP_ID +"&secret=" + ConfigConstants.MINI_PROGRAM_APP_SECRET;
String getTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx40ec496d73b58ec6"
+"&secret=5b309517bf918abf760b2195e91b99f3";
Request getTokenRequest = new Request.Builder()
.url(getTokenUrl)
.build();
Response getTokenResponse = client.newCall(getTokenRequest).execute();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
String tokenJsonData = getTokenResponse.body().string();
WxUserTokenDto wxUserTokenDto = JsonUtil.readJsonAs(tokenJsonData, WxUserTokenDto.class);
WxUserTokenDto wxUserTokenDto = objectMapper.readValue(tokenJsonData, WxUserTokenDto.class);
System.out.println("token:" + wxUserTokenDto.getAccess_token());
String getPhoneUrl = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token="
+ wxUserTokenDto.getAccess_token();
FormBody.Builder formBuilder = new FormBody.Builder();
formBuilder.add("code", code);
RequestBody requestBody = formBuilder.build();
WxUserCodeDto jsonData = new WxUserCodeDto();
jsonData.setCode(code);
String jsonDataString = objectMapper.writeValueAsString(jsonData);
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(mediaType, jsonDataString);
Request getPhoneRequest = new Request.Builder()
.url(getPhoneUrl)
.post(requestBody)
.post(body)
.build();
Response getPhoneResponse = client.newCall(getPhoneRequest).execute();
String phoneJsonData = getPhoneResponse.body().string();
WxUserPhoneResponseDto wxUserPhoneResponseDto = JsonUtil.readJsonAs(phoneJsonData, WxUserPhoneResponseDto.class);
System.out.println("------------------------");
System.out.println("phone json:" + phoneJsonData);
WxUserPhoneResponseDto wxUserPhoneResponseDto = objectMapper.readValue(phoneJsonData, WxUserPhoneResponseDto.class);
return wxUserPhoneResponseDto;
} catch (Exception e) {
System.out.println(e.getMessage());
throw new IllegalArgumentException("获取用户手机号失败");
}
}
......@@ -55,8 +69,8 @@ public class WxMiniProgramClient {
try {
String url = "https://api.weixin.qq.com/sns/jscode2session" +
"?appid=" + ConfigConstants.MINI_PROGRAM_APP_ID + "&secret=" + ConfigConstants.MINI_PROGRAM_APP_SECRET + "&js_code=" + code + "&grant_type=authorization_code";
"?appid=wx40ec496d73b58ec6" + "&secret=5b309517bf918abf760b2195e91b99f3" + "&js_code=" + code + "&grant_type=authorization_code";
System.out.println("url:" +url);
Request request = new Request.Builder()
.url(url)
.build();
......@@ -64,13 +78,11 @@ public class WxMiniProgramClient {
Response response = client.newCall(request).execute();
String jsonData = response.body().string();
WxUserOpenIdDto res = JsonUtil.readJsonAs(jsonData, WxUserOpenIdDto.class);
return res;
// String openid = data.getOpenid();
//
// return WxUserLoginResponseDto.builder().openId(openid).build();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
return objectMapper.readValue(jsonData, WxUserOpenIdDto.class);
} catch (Exception e) {
System.out.println("error"+e.getMessage());
throw new IllegalArgumentException("获取用户openid失败");
}
}
......
......@@ -3,6 +3,7 @@ package com.infoloop.tianting.service.impl;
import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import com.infoloop.tianting.COperatorServiceProtoRpcGrpc;
import com.infoloop.tianting.clientcustomerservice.GetClientCustomerByIdRpcRequest;
import com.infoloop.tianting.clientcustomerservice.SingleClientCustomerRpcResponse;
import com.infoloop.tianting.constant.CommonConstants;
......@@ -11,7 +12,10 @@ import com.infoloop.tianting.exception.ErrorCodeEnum;
import com.infoloop.tianting.model.dto.PermissionDTO.LoginDto;
import com.infoloop.tianting.service.ClientCustomerService;
import com.infoloop.tianting.service.LoginService;
import com.infoloop.tianting.service.WxMiniProgramService;
import com.infoloop.tianting.service.client.ClientCustomerServiceRpcClient;
import com.infoloop.tianting.service.client.OperatorServiceRpcClient;
import com.infoloop.tianting.service.client.WxMiniProgramClient;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -23,20 +27,22 @@ import org.springframework.stereotype.Service;
public class LoginServiceImpl implements LoginService {
private final ClientCustomerServiceRpcClient clientCustomerServiceRpcClient;
private final OperatorServiceRpcClient operatorServiceRpcClient;
private final WxMiniProgramClient wxMiniProgramClient;
@Override
public SaTokenInfo login(LoginDto loginDto) {
if (loginDto.isShouldLoginWithOpenId()) {
if (loginDto.isShouldLoginWithOpenCode()) {
final var wxUserOpenIdDto = wxMiniProgramClient.getUserOpenIdByCode(loginDto.getOpenCode());
StpUtil.login(wxUserOpenIdDto.getOpenid(), SaLoginModel.create()
.setExtra(CommonConstants.ENTERPRISE_ID, loginDto.getEnterpriseId())
.setExtra(CommonConstants.LOGIN_SOURCE, loginDto.getLoginSourceEnum().getValue())
.build());
return StpUtil.getTokenInfo();
}
else {
final SingleClientCustomerRpcResponse customer;
if (loginDto.isShouldLoginWithHisCustomerId()){
customer = clientCustomerServiceRpcClient.getClientCustomerByHISCustomerId(loginDto.getHisCustomerId()).getResponse();
} else {
customer = clientCustomerServiceRpcClient.getClientCustomerById(loginDto.getCustomerId()).getResponse();
}
else if (loginDto.isShouldLoginWithHisCustomerId()){
final var customer = clientCustomerServiceRpcClient.getClientCustomerByHISCustomerId(
loginDto.getHisCustomerId()).getResponse();
if (customer.getId() == 0) {
throw ClientEndExceptions.AuthenticationFailure.build(ErrorCodeEnum.UNAUTHORIZED.name());
}
......@@ -46,6 +52,18 @@ public class LoginServiceImpl implements LoginService {
.build());
return StpUtil.getTokenInfo();
}
else {
final var operator = operatorServiceRpcClient.getCOperatorByMobileOrEmail(
loginDto.getOperatorPhone());
if (operator.getId() == 0) {
throw ClientEndExceptions.AuthenticationFailure.build(ErrorCodeEnum.UNAUTHORIZED.name());
}
StpUtil.login(operator.getId(), SaLoginModel.create()
.setExtra(CommonConstants.ENTERPRISE_ID, operator.getEnterpriseId())
.setExtra(CommonConstants.LOGIN_SOURCE, loginDto.getLoginSourceEnum().getValue())
.build());
return StpUtil.getTokenInfo();
}
}
}
......
package com.infoloop.tianting.service.impl;
import com.infoloop.tianting.model.dto.MenuDbDTO.BatchCreateMenuRefsDto;
import com.infoloop.tianting.model.dto.MenuDbDTO.BatchCreateMenuRefsResponseDto;
import com.infoloop.tianting.model.dto.MenuDbDTO.DishRuleJson;
import com.infoloop.tianting.model.dto.MenuDbDTO.MenuDetailDto;
import com.infoloop.tianting.model.dto.MenuDbDTO.MenuDto;
......@@ -60,6 +62,7 @@ public class MenuServiceImpl implements MenuService {
.updatedBy(menu.getUpdatedBy())
.updateSource(menu.getUpdateSource())
.updatedAt(DateUtil.formatDate(menu.getUpdatedAt()))
.publishAt(DateUtil.formatDate(menu.getPublishAt()))
.build()).collect(Collectors.toList());
}
......@@ -106,4 +109,13 @@ public class MenuServiceImpl implements MenuService {
}
@Override
public BatchCreateMenuRefsResponseDto batchCreateMenuRefs(BatchCreateMenuRefsDto batchCreateMenuRefsDto) {
final var response = menuServiceRpcClient.batchCreateClientCustomerMenuRefs(batchCreateMenuRefsDto);
return BatchCreateMenuRefsResponseDto.builder()
.ids(response.getIdsList())
.isCreated(response.getIsCreated())
.build();
}
}
......
package com.infoloop.tianting.service.impl;
import com.infoloop.tianting.model.dto.OrderDbDTO;
import com.infoloop.tianting.model.common.PageResult;
import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderResponse;
import com.infoloop.tianting.model.dto.OrderDbDTO.CustomerNotice;
import com.infoloop.tianting.model.dto.OrderDbDTO.MealDetailDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.OrderAndDetailsDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.OrderDetailDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.OrderDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderDto;
import com.infoloop.tianting.model.vo.TestExampleDbVO;
import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByConditionDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByPaginationDto;
import com.infoloop.tianting.service.OrderService;
import com.infoloop.tianting.service.client.OrderServiceRpcClient;
import com.infoloop.tianting.utils.DateUtil;
import com.infoloop.tianting.utils.PageUtil;
import java.util.List;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
......@@ -70,9 +72,9 @@ public class OrderServiceImpl implements OrderService {
}
@Override
public List<OrderDto> getOrdersByCustomerId(Integer customerId) {
public OrderAndDetailsDto getOrdersByCustomerId(Integer customerId) {
final var responseList = orderServiceRpcClient.getOrdersByCustomerId(customerId);
return responseList.stream().map(r -> OrderDto.builder()
final var orders = responseList.stream().map(r -> OrderDto.builder()
.id(r.getId())
.enterpriseId(r.getEnterpriseId())
.clientId(r.getClientId())
......@@ -103,12 +105,122 @@ public class OrderServiceImpl implements OrderService {
.updatedAt(DateUtil.formatDate(r.getUpdatedAt()))
.updatedBy(r.getUpdatedBy())
.build()).collect(Collectors.toList());
final var ids = orders.stream().map(OrderDto::getId).collect(Collectors.toList());
final var detailsResponse = orderServiceRpcClient.getOrderDetailsByOrderIds(ids);
final var detailDtos = detailsResponse.stream().map(d ->
OrderDetailDto.builder()
.id(d.getId())
.count(d.getCount())
.categoryId(d.getCategoryId())
.mealId(d.getMealId())
.menuDetailId(d.getMenuDetailId())
.orderId(d.getOrderId())
.price(d.getPrice())
.showName(d.getShowName())
.mealDetailJson(MealDetailDto.builder()
.allergies(d.getMealDetailJson().getAllergiesList())
.basicMaterials(d.getMealDetailJson().getBasicMaterials())
.dockers(d.getMealDetailJson().getDockersList())
.efficacies(d.getMealDetailJson().getEfficaciesList())
.fat(d.getMealDetailJson().getFat())
.tastes(d.getMealDetailJson().getTastesList())
.protein(d.getMealDetailJson().getProtein())
.carbohydrate(d.getMealDetailJson().getCarbohydrate())
.energy(d.getMealDetailJson().getEnergy())
.avoids(d.getMealDetailJson().getAvoidsList())
.skus(d.getMealDetailJson().getSkusList())
.build())
.adjustSkuRemark(d.getAdjustSkuRemark())
.enterpriseId(d.getEnterpriseId())
.skuId(d.getSkuId())
.notServe(d.getNotServe())
.creationSource(d.getCreationSource().getNumber())
.createdBy(d.getCreatedBy())
.createdAt(DateUtil.formatDate(d.getCreatedAt()))
.updateSource(d.getUpdateSource().getNumber())
.updatedAt(DateUtil.formatDate(d.getUpdatedAt()))
.updatedBy(d.getUpdatedBy())
.build()).collect(Collectors.toList());
return OrderAndDetailsDto.builder().orderDetails(detailDtos).orders(orders).build();
}
@Override
public List<OrderDto> getOrdersByCondition(QueryOrderDto queryOrderDto) {
public OrderAndDetailsDto getOrdersByCondition(QueryOrderByConditionDto queryOrderDto) {
final var responseList = orderServiceRpcClient.getOrdersByCondition(queryOrderDto);
return responseList.stream().map(r -> OrderDto.builder()
final var orders = responseList.stream().map(r -> OrderDto.builder()
.id(r.getId())
.enterpriseId(r.getEnterpriseId())
.clientId(r.getClientId())
.stallId(r.getStallId())
.customerId(r.getCustomerId())
.openId(r.getOpenId())
.address(r.getAddress())
.orderCode(r.getOrderCode())
.menuId(r.getMenuId())
.pickupCode(r.getPickupCode())
.tableCode(r.getTableCode())
.roomNo(r.getRoomNo())
.status(r.getStatus().getNumber())
.customerNoticeJson(CustomerNotice.builder()
.avoids(r.getCustomerNoticeJson().getAvoidsList())
.doctors(r.getCustomerNoticeJson().getDoctorsList()).build())
.onlinePay(r.getOnlinePay())
.payStatus(r.getPayStatusValue())
.payPrice(r.getPayPrice())
.payTime(DateUtil.formatDate(r.getPayTime()))
.mealTime(DateUtil.formatDate(r.getMealTime()))
.orderType(r.getOrderTypeValue())
.remark(r.getRemark())
.creationSource(r.getCreationSource().getNumber())
.createdBy(r.getCreatedBy())
.createdAt(DateUtil.formatDate(r.getCreatedAt()))
.updateSource(r.getUpdateSource().getNumber())
.updatedAt(DateUtil.formatDate(r.getUpdatedAt()))
.updatedBy(r.getUpdatedBy())
.build()).collect(Collectors.toList());
final var ids = orders.stream().map(OrderDto::getId).collect(Collectors.toList());
final var detailsResponse = orderServiceRpcClient.getOrderDetailsByOrderIds(ids);
final var detailDtos = detailsResponse.stream().map(d ->
OrderDetailDto.builder()
.id(d.getId())
.count(d.getCount())
.categoryId(d.getCategoryId())
.mealId(d.getMealId())
.menuDetailId(d.getMenuDetailId())
.orderId(d.getOrderId())
.price(d.getPrice())
.showName(d.getShowName())
.mealDetailJson(MealDetailDto.builder()
.allergies(d.getMealDetailJson().getAllergiesList())
.basicMaterials(d.getMealDetailJson().getBasicMaterials())
.dockers(d.getMealDetailJson().getDockersList())
.efficacies(d.getMealDetailJson().getEfficaciesList())
.fat(d.getMealDetailJson().getFat())
.tastes(d.getMealDetailJson().getTastesList())
.protein(d.getMealDetailJson().getProtein())
.carbohydrate(d.getMealDetailJson().getCarbohydrate())
.energy(d.getMealDetailJson().getEnergy())
.avoids(d.getMealDetailJson().getAvoidsList())
.skus(d.getMealDetailJson().getSkusList())
.build())
.adjustSkuRemark(d.getAdjustSkuRemark())
.enterpriseId(d.getEnterpriseId())
.skuId(d.getSkuId())
.notServe(d.getNotServe())
.creationSource(d.getCreationSource().getNumber())
.createdBy(d.getCreatedBy())
.createdAt(DateUtil.formatDate(d.getCreatedAt()))
.updateSource(d.getUpdateSource().getNumber())
.updatedAt(DateUtil.formatDate(d.getUpdatedAt()))
.updatedBy(d.getUpdatedBy())
.build()).collect(Collectors.toList());
return OrderAndDetailsDto.builder().orderDetails(detailDtos).orders(orders).build();
}
@Override
public PageResult<OrderDto> getOrdersByPagination(QueryOrderByPaginationDto queryOrderDto) {
final var response = orderServiceRpcClient.queryClientCustomerOrdersByPagination(queryOrderDto);
final var results = response.getResponsesList().stream().map(r -> OrderDto.builder()
.id(r.getId())
.enterpriseId(r.getEnterpriseId())
.clientId(r.getClientId())
......@@ -132,12 +244,18 @@ public class OrderServiceImpl implements OrderService {
.mealTime(DateUtil.formatDate(r.getMealTime()))
.orderType(r.getOrderTypeValue())
.remark(r.getRemark())
.isDeleted(r.getIsDeleted())
.isRead(r.getIsRead())
.creationSource(r.getCreationSource().getNumber())
.createdBy(r.getCreatedBy())
.createdAt(DateUtil.formatDate(r.getCreatedAt()))
.updateSource(r.getUpdateSource().getNumber())
.updatedAt(DateUtil.formatDate(r.getUpdatedAt()))
.updatedBy(r.getUpdatedBy())
.closeTimeType(r.getCloseTimeTypeValue())
.totalNum(r.getTotalNum())
.build()).collect(Collectors.toList());
return PageUtil.from(results, response.getTotal(), response.getPages(),
queryOrderDto.getPn(), queryOrderDto.getPz());
}
}
......
package com.infoloop.tianting.utils;
import java.security.MessageDigest;
public class EncryptionUtil {
public static String sha1Encryption(String input) {
try {
// 获取SHA1算法的MessageDigest实例
MessageDigest md = MessageDigest.getInstance("SHA1");
// 将输入字符串转换为字节数组并更新MessageDigest
md.update(input.getBytes());
// 计算哈希值,得到字节数组形式的结果
byte[] digest = md.digest();
// 将字节数组转换为十六进制字符串表示
StringBuilder hexString = new StringBuilder();
for (byte b : digest) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
return hexString.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
syntax = "proto3";
option java_multiple_files = true;
option java_package = "com.infoloop.tianting";
option java_outer_classname = "COperatorsServiceProto";
option objc_class_prefix = "OP";
package com.infoloop.tianting;
service COperatorServiceProtoRpc {
rpc GetCOperatorById(GetCOperatorByIdRpcRequest) returns (GetCOperatorByIdRpcResponse) {}
rpc GetCOperatorByIds(GetCOperatorByIdsRpcRequest) returns (GetCOperatorByIdsRpcResponse) {}
rpc GetCOperatorsByClientIds(GetCOperatorsByIdsRpcRequest) returns (GetCOperatorsByIdsRpcResponse) {}
rpc GetCOperatorByCondition(GetCOperatorByConditionRpcRequest) returns (GetCOperatorByConditionRpcResponse) {}
rpc GetCOperatorByEmail (GetCOperatorByEmailRpcRequest) returns (GetCOperatorByEmailRpcResponse) {}
rpc UpdateCOperatorStatusByClientIds(UpdateCOperatorStatusByClientIdsRpcRequest) returns (UpdateCOperatorStatusByClientIdsRpcResponse) {}
rpc GetCOperatorOnlyById(GetOperatorOnlyByIdRpcRequest) returns (GetOperatorOnlyByIdRpcResponse) {}
rpc GetCOperatorByMobile (GetCOperatorByMobileRpcRequest) returns (GetCOperatorByMobileRpcResponse) {}
rpc UpdateCOperatorPasswordById(UpdateCOperatorPasswordByIdRpcRequest) returns (UpdateCOperatorPasswordByIdRpcResponse) {}
rpc UpdateCOperatorMobileById(UpdateCOperatorMobileByIdRpcRequest) returns (UpdateCOperatorMobileByIdRpcResponse) {}
rpc UpdateCOperatorAliasById(UpdateCOperatorAliasByIdRpcRequest) returns (UpdateCOperatorAliasByIdRpcResponse) {}
rpc CreateCOperator (CreateCOperatorRpcRequest) returns (CreateCOperatorRpcResponse) {}
rpc UpdateCOperator (UpdateCOperatorRpcRequest) returns (UpdateCOperatorRpcResponse) {}
rpc DeleteCOperatorByIds (DeleteCOperatorByIdsRpcRequest) returns (DeleteCOperatorByIdsRpcResponse) {}
rpc GetRoleIdsByOperatorId (GetRoleIdsByOperatorIdRpcRequest) returns (GetRoleIdsByOperatorIdRpcResponse) {}
rpc CreateCRoles (CreateCRolesRpcRequest) returns (CreateCRolesRpcResponse) {}
rpc CreateCRole (CreateCRoleRpcRequest) returns (CreateCRoleRpcResponse) {}
rpc GetCOperatorByMobileOrEmail (GetCOperatorByMobileOrEmailRpcRequest) returns (GetCOperatorByMobileOrEmailRpcResponse) {}
}
enum COperatorStatus {
UN_KNOW_COPERATOR = 0;
ENABLE = 1;
DISABLE = 3;
}
message UpdateCOperatorStatusByClientIdsRpcRequest {
repeated int32 clientIds = 1;
int32 enterpriseId = 2;
COperatorStatus status = 3;
}
message UpdateCOperatorStatusByClientIdsRpcResponse {
bool isUpdated = 1;
}
message GetOperatorOnlyByIdRpcRequest {
int32 id = 1;
}
message GetOperatorOnlyByIdRpcResponse {
SingleCOperatorRpcResponse response = 1;
}
message GetCOperatorByMobileRpcRequest {
string mobile = 1;
}
message GetCOperatorByMobileRpcResponse {
SingleCOperatorRpcResponse response = 1;
}
message GetCOperatorByIdRpcRequest {
int32 enterpriseId = 1;
int32 id = 2;
}
message GetCOperatorByIdsRpcRequest {
repeated int32 ids = 1;
bool includeDeleted = 2;
}
message GetCOperatorsByIdsRpcRequest {
repeated int32 ids = 1;
bool includeDeleted = 2;
bool isPrimary = 3;
bool shouldFilerIsPrimary = 4;
}
message GetCOperatorByConditionRpcResponse {
repeated SingleCOperatorRpcResponse responses = 1;
}
message GetCOperatorByConditionRpcRequest {
int32 enterpriseId = 1;
repeated int32 ids = 2;
repeated int32 clientIds = 3;
string name = 4;
string email = 5;
string password = 6;
COperatorStatus status = 7;
repeated int32 stallIds = 8;
string mobile = 9;
bool isPrimary = 10;
bool shouldFilerIds = 11;
bool shouldFilerClientIds = 12;
bool shouldFilerName = 13;
bool shouldFilerEmail = 14;
bool shouldFilerPassword = 15;
bool shouldFilerStatus = 16;
bool shouldFilerStallIds = 17;
bool shouldFilerMobile = 18;
bool shouldFilerIsPrimary = 19;
}
message UpdateCOperatorPasswordByIdRpcRequest {
int32 id = 1;
string password = 2;
}
message UpdateCOperatorPasswordByIdRpcResponse {
bool isUpdated = 1;
}
message UpdateCOperatorMobileByIdRpcRequest {
int32 id = 1;
string mobile = 2;
}
message UpdateCOperatorAliasByIdRpcRequest {
int32 id = 1;
string alias = 2;
}
message UpdateCOperatorMobileByIdRpcResponse {
bool isUpdated = 1;
}
message UpdateCOperatorAliasByIdRpcResponse {
bool isUpdated = 1;
}
message SingleCOperatorRpcResponse {
int32 id = 1;
int32 enterpriseId = 2;
int32 clientId = 3;
string name = 4;
bool isEmailSet = 5;
string email = 6;
string password = 7;
int32 status = 8;
int64 createdAt = 9;
int64 updatedAt = 10;
bool isDeleted = 11;
bool isStallIdSet = 12;
int32 stallId = 13;
bool isPrimary = 14;
bool isMobileSet = 15;
string mobile = 16;
string phone = 17;
string alias = 18;
}
message GetCOperatorByIdRpcResponse {
SingleCOperatorRpcResponse response = 1;
}
message GetCOperatorsByIdsRpcResponse {
repeated SingleCOperatorRpcResponse responses = 1;
}
message GetCOperatorByIdsRpcResponse {
repeated SingleCOperatorRpcResponse responses = 1;
}
message GetCOperatorByEmailRpcRequest {
string email = 1;
}
message GetCOperatorByEmailRpcResponse {
SingleCOperatorRpcResponse response = 1;
}
message GetRoleIdsByOperatorIdRpcRequest {
int32 enterpriseId = 1;
int32 operatorId = 2;
}
message GetRoleIdsByOperatorIdRpcResponse {
repeated int32 roleIds = 1;
}
message SingleCRoleCreationRpcRequest {
int32 clientId = 1;
string code = 2;
string name = 3;
string description = 4;
int32 status = 5;
}
message CreateCRolesRpcRequest {
int32 enterpriseId = 1;
repeated SingleCRoleCreationRpcRequest creations = 2;
}
message CreateCRolesRpcResponse {
bool isCreated = 1;
repeated int32 ids = 2;
}
message CreateCOperatorRpcResponse {
bool isCreated = 1;
int32 id = 2;
}
message UpdateCOperatorRpcResponse {
bool isUpdated = 1;
}
message CreateCOperatorRpcRequest {
int32 enterpriseId = 1;
int32 clientId = 2;
string code = 3;
string name = 4;
string email = 5;
string password = 6;
string phone = 7;
string note = 8;
string openId = 9;
int32 stallId = 10;
bool isSuper = 11;
bool isPrimary = 12;
int32 bookingMode = 13;
int32 canWriteRealPurchasePrice = 14;
string mobile = 15;
int32 canWriteSkuBarcode = 16;
string description = 17;
int32 status = 18;
int32 creationSource = 19;
int32 createdBy = 20;
}
message DeleteCOperatorByIdsRpcRequest{
int32 enterpriseId = 1;
int32 clientId = 2;
repeated int32 ids = 3;
int32 updateSource = 19;
int32 updatedBy = 20;
}
message DeleteCOperatorByIdsRpcResponse{
bool isDeleted = 1;
}
message UpdateCOperatorRpcRequest {
int32 id = 38;
int32 enterpriseId = 1;
int32 clientId = 2;
string code = 3;
string name = 4;
string email = 5;
string password = 6;
string phone = 7;
string note = 8;
string openId = 9;
int32 stallId = 10;
bool isSuper = 11;
bool isPrimary = 12;
int32 bookingMode = 13;
int32 canWriteRealPurchasePrice = 14;
string mobile = 15;
int32 canWriteSkuBarcode = 16;
string description = 17;
int32 status = 18;
int32 updatedSource = 19;
int32 updatedBy = 20;
bool shouldUpdateClientId = 21;
bool shouldUpdateCode = 22;
bool shouldUpdateName = 23;
bool shouldUpdateEmail = 24;
bool shouldUpdatePassword = 25;
bool shouldUpdatePhone = 26;
bool shouldUpdateNote = 27;
bool shouldUpdateOpenId = 28;
bool shouldUpdateStallId = 29;
bool shouldUpdateIsSuper = 30;
bool shouldUpdateIsPrimary = 31;
bool shouldUpdateBookingMode = 32;
bool shouldUpdateCanWriteRealPurchasePrice = 33;
bool shouldUpdateMobile = 34;
bool shouldUpdateCanWriteSkuBarcode = 35;
bool shouldUpdateDescription = 36;
bool shouldUpdateStatus = 37;
}
message CreateCRoleRpcRequest {
int32 enterpriseId = 1;
SingleCRoleCreationRpcRequest creation = 2;
}
message CreateCRoleRpcResponse {
bool isCreated = 1;
int32 id = 2;
}
message GetCOperatorByMobileOrEmailRpcRequest {
string keyword = 1;
}
message GetCOperatorByMobileOrEmailRpcResponse {
SingleCOperatorRpcResponse response = 1;
}
\ No newline at end of file
......@@ -18,6 +18,7 @@ service ClientCustomerOrderServiceRpc {
rpc UpdateClientCustomerOrder (UpdateClientCustomerOrderRpcRequest) returns (UpdateClientCustomerOrderRpcResponse) {}
rpc BatchUpdateClientCustomerOrders (BatchUpdateClientCustomerOrdersRpcRequest) returns (BatchUpdateClientCustomerOrdersRpcResponse) {}
rpc DeleteClientCustomerOrdersByIds (DeleteClientCustomerOrdersByIdsRpcRequest) returns (DeleteClientCustomerOrdersRpcResponse) {}
rpc QueryClientCustomerOrdersByPagination (QueryClientCustomerOrdersByPaginationRpcRequest) returns (QueryClientCustomerOrdersByPaginationRpcResponse) {}
//订单明细
rpc GetClientCustomerOrderDetailById (GetClientCustomerOrderDetailByIdRpcRequest) returns (GetClientCustomerOrderDetailByIdRpcResponse) {}
......@@ -142,6 +143,21 @@ message GetClientCustomerOrdersByCustomerIdRpcResponse {
repeated SingleClientCustomerOrderRpcResponse responses = 1;
}
message QueryClientCustomerOrdersByPaginationRpcRequest {
string keyword = 1;
OrderStatusEnum status = 2;
int32 clientId = 3;
int32 enterpriseId = 4;
int32 pageNo = 5;
int32 pageSize = 6;
}
message QueryClientCustomerOrdersByPaginationRpcResponse {
int64 total = 1;
int64 pages = 2;
repeated SingleClientCustomerOrderRpcResponse responses = 3;
}
message QueryClientCustomerOrdersByConditionRpcRequest {
int32 enterpriseId = 1;
bool shouldFilterOrderCode = 2;
......
......@@ -61,8 +61,11 @@ grpc.meal-service.port=3017
grpc.delivery-service.url=47.101.193.136
grpc.delivery-service.port=3017
miniprogram.appId=
miniprogram.appSecret=
grpc.operator-service.url=47.101.193.136
grpc.operator-service.port=3031
miniprogram.appId=wx40ec496d73b58ec6
miniprogram.appSecret=5b309517bf918abf760b2195e91b99f3
##Actuator\u914D\u7F6E
management.server.port=8088
......