Commit f1001688 authored by lining's avatar lining

feat: 预约下单接口img信息处理

parent e09a6220
......@@ -13,5 +13,8 @@ public class BizConstants {
public static final String ORDER_ID = "orderId";
}
public static class FormatConstants {
public static final String CATEGORY_SUBCLASS_SERVICE_NAME = "%s-%s";
}
}
package com.onsiteservice.dao.component;
import com.onsiteservice.dao.mapper.service.ServiceOrderImgMapper;
import com.onsiteservice.dao.mapper.service.ServiceOrderLogMapper;
import com.onsiteservice.entity.order.ServiceOrder;
import com.onsiteservice.entity.service.ServiceOrderImg;
import com.onsiteservice.entity.service.ServiceOrderLog;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* <P></P>
*
* @author 李宁
* @version v1.0
* @since 2022/7/14 10:08
*/
@Component
@Slf4j
public class RecordComponent {
@Resource
private ServiceOrderImgMapper serviceOrderImgMapper;
@Resource
private ServiceOrderLogMapper serviceOrderLogMapper;
@Async
public void recordServiceOrderImg(ServiceOrder serviceOrder, List<String> urls) {
log.info("recordServiceOrderImg serviceOrder: {}, urls: {}", serviceOrder, urls);
if (CollectionUtils.isEmpty(urls)) {
return;
}
List<ServiceOrderImg> serviceOrderImgList = urls
.parallelStream().map(url -> {
ServiceOrderImg serviceOrderImg = new ServiceOrderImg();
serviceOrderImg.setOrderId(serviceOrder.getId());
serviceOrderImg.setUrl(url);
serviceOrderImg.setCreateTime(new Date());
return serviceOrderImg;
}).collect(Collectors.toList());
serviceOrderImgMapper.insertList(serviceOrderImgList);
}
@Async
public void recordProcess(Long orderId, Integer processId, String description, Long hostId, String remark) {
log.info("recordProcess orderId: {}, processId: {}, description: {}, hostId: {}, remark: {}",
orderId, processId, description, hostId, remark);
ServiceOrderLog serviceOrderLog = new ServiceOrderLog();
serviceOrderLog.setOrderId(orderId);
serviceOrderLog.setProcessId(processId);
serviceOrderLog.setDescription(description);
serviceOrderLog.setHostId(hostId);
serviceOrderLog.setRemark(remark);
serviceOrderLogMapper.insertSelective(serviceOrderLog);
}
}
package com.onsiteservice.dao.mapper.service;
import com.onsiteservice.dao.common.Mapper;
import com.onsiteservice.entity.service.ServiceOrderImg;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface ServiceOrderImgMapper extends Mapper<ServiceOrderImg> {
List<ServiceOrderImg> selectByOrderIdList(@Param("list") List<Long> orderIdList);
}
\ No newline at end of file
......@@ -2,6 +2,12 @@ package com.onsiteservice.dao.mapper.service;
import com.onsiteservice.dao.common.Mapper;
import com.onsiteservice.entity.order.ServiceOrder;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface ServiceOrderMapper extends Mapper<ServiceOrder> {
List<ServiceOrder> selectServiceOrderPage(@Param("orderStatus") Integer orderStatus);
}
\ No newline at end of file
<?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.onsiteservice.dao.mapper.service.ServiceOrderImgMapper">
<resultMap id="BaseResultMap" type="com.onsiteservice.entity.service.ServiceOrderImg">
<!--
WARNING - @mbg.generated
-->
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="order_id" jdbcType="BIGINT" property="orderId"/>
<result column="url" jdbcType="VARCHAR" property="url"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
</resultMap>
<select id="selectByOrderIdList" resultType="com.onsiteservice.entity.service.ServiceOrderImg">
select * from service_order_img where order_id in
<foreach collection="list" open="(" separator="," close=")" item="orderId">
#{orderId}
</foreach>
</select>
</mapper>
\ No newline at end of file
<?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.onsiteservice.dao.mapper.service.ServiceOrderMapper">
<resultMap id="BaseResultMap" type="com.onsiteservice.entity.order.ServiceOrder">
<!--
WARNING - @mbg.generated
-->
<id column="id" jdbcType="BIGINT" property="id" />
<result column="account_no" jdbcType="BIGINT" property="accountNo" />
<result column="address_id" jdbcType="BIGINT" property="addressId" />
<result column="expect_arrival_time" jdbcType="TIMESTAMP" property="expectArrivalTime" />
<result column="num" jdbcType="INTEGER" property="num" />
<result column="demand_img" jdbcType="VARCHAR" property="demandImg" />
<result column="demand_desc" jdbcType="VARCHAR" property="demandDesc" />
<result column="read_agreement" jdbcType="INTEGER" property="readAgreement" />
<result column="price" jdbcType="DECIMAL" property="price" />
<result column="remark" jdbcType="VARCHAR" property="remark" />
<result column="order_status" jdbcType="INTEGER" property="orderStatus" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="modify_time" jdbcType="TIMESTAMP" property="modifyTime" />
</resultMap>
<select id="selectServiceOrderPage" resultType="com.onsiteservice.entity.order.ServiceOrder">
select *
from service_order
where
1=1
<if test="orderStatus != 0">
and order_status = #{orderStatus,jdbcType=INTEGER}
</if>
order by create_time asc
</select>
</mapper>
\ No newline at end of file
......@@ -31,6 +31,13 @@ public class ServiceOrder implements Serializable {
@ApiModelProperty("订单号")
private String orderNo;
/**
* 服务名
*/
@Column(name = "service_name")
@ApiModelProperty("服务名")
private String serviceName;
/**
* 账号
*/
......
package com.onsiteservice.entity.service;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
@ApiModel("订单图片表")
@Table(name = "service_order_img")
public class ServiceOrderImg implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@ApiModelProperty("")
private Long id;
/**
* 订单id
*/
@Column(name = "order_id")
@ApiModelProperty("订单id")
private Long orderId;
/**
* 图片oss地址
*/
@ApiModelProperty("图片oss地址")
private String url;
/**
* 创建时间
*/
@Column(name = "create_time")
@ApiModelProperty("创建时间")
private Date createTime;
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
......@@ -49,7 +49,7 @@ public class ServiceOrderController {
@ApiOperation(value = "分页查询订单")
@PostMapping("page")
public Result<PageInfoVO<ServiceOrderVO>> getPage(@RequestBody @NonNull @Validated PageServiceOrderDTO dto, @CurrentUserId Long userId) {
return serviceOrderService.selectByUserId(dto, userId);
return serviceOrderService.getPage(dto, userId);
}
@ApiOperation(value = "订单预约")
......
......@@ -7,7 +7,9 @@ import lombok.Data;
import javax.validation.constraints.Future;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;
@Data
@ApiModel("订单预约请求模型")
......@@ -60,4 +62,8 @@ public class ReserveServiceOrderDTO {
@NotNull(message = "请确认是否阅读协议")
private Boolean readAgreement;
@ApiModelProperty("服务图片数组")
@Size(max = 8, message = "最多上传8张图片")
private List<String> urls;
}
\ No newline at end of file
package com.onsiteservice.miniapp.controller.order.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@Data
public class ServiceOrderVO {
......@@ -47,4 +41,6 @@ public class ServiceOrderVO {
private Date modifyTime;
private List<String> urls;
}
\ No newline at end of file
......@@ -14,6 +14,6 @@ import java.util.List;
*/
public interface ServiceOrderBizMapper {
List<ServiceOrder> selectServiceOrderPage(@Param("dto") PageServiceOrderDTO dto, @Param("uid") Long uid);
List<ServiceOrder> selectServiceOrderPage(@Param("dto") PageServiceOrderDTO dto, @Param("userId") Long userId);
}
......@@ -13,6 +13,7 @@ import com.onsiteservice.dao.common.page.PageInfoVO;
import com.onsiteservice.dao.mapper.service.*;
import com.onsiteservice.dao.mapper.user.UserMapper;
import com.onsiteservice.entity.address.ServiceAddress;
import com.onsiteservice.entity.category.ServiceCategory;
import com.onsiteservice.entity.category.ServiceSubclass;
import com.onsiteservice.entity.order.ServiceOrder;
import com.onsiteservice.entity.service.*;
......@@ -22,8 +23,10 @@ import com.onsiteservice.miniapp.controller.order.vo.ServiceOrderLogVO;
import com.onsiteservice.miniapp.controller.order.vo.ServiceOrderVO;
import com.onsiteservice.miniapp.mapper.order.ServiceOrderBizMapper;
import com.onsiteservice.util.AttrCopyUtils;
import com.onsiteservice.util.ListUtils;
import com.onsiteservice.util.RandomUtils;
import com.onsiteservice.util.aliyun.SmsUtils;
import com.onsiteservice.dao.component.RecordComponent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
......@@ -34,9 +37,8 @@ import org.springframework.util.CollectionUtils;
import tk.mybatis.mapper.entity.Condition;
import javax.annotation.Resource;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@Service
......@@ -58,12 +60,16 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
private ServiceOrderBizMapper serviceOrderBizMapper;
@Resource
private ServiceOrderMapper serviceOrderMapper;
@Resource
private ServiceOrderImgMapper serviceOrderImgMapper;
@Resource
private ServiceAddressMapper serviceAddressMapper;
@Resource
private ServiceSubclassMapper serviceSubclassMapper;
@Resource
private ServiceCategoryMapper serviceCategoryMapper;
@Resource
private ServiceOrderLogMapper serviceOrderLogMapper;
......@@ -81,38 +87,32 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
@Resource
private UserMapper userMapper;
@Autowired
private RecordComponent recordComponent;
public ServiceOrderVO selectById(Long id, Long userId) {
log.info("order selectById id: {}, userId: {}", id, userId);
// 订单信息
Condition c = new Condition(ServiceOrder.class);
c.createCriteria().andEqualTo("id", id).andEqualTo(BizConstants.UserConstants.ACCOUNT_NO, userId);
c.createCriteria().andEqualTo("id", id);
List<ServiceOrder> serviceOrderList = this.selectByCondition(c);
if (CollectionUtils.isEmpty(serviceOrderList)) {
throw new ServiceException(BizCodeEnum.SERVICE_ORDER_NOT_EXIST);
}
ServiceOrder serviceOrder = serviceOrderList.get(0);
ServiceOrderVO serviceOrderVO = AttrCopyUtils.copy(serviceOrder, new ServiceOrderVO());
serviceOrderVO.setName(serviceOrderVO.getName());
serviceOrderVO.setPhone(serviceOrderVO.getPhone());
Condition cc = new Condition(ServiceAddress.class);
cc.createCriteria().andEqualTo("id", serviceOrder.getAddressId()).andEqualTo(BizConstants.UserConstants.ACCOUNT_NO, userId);
List<ServiceAddress> serviceAddressList = serviceAddressMapper.selectByCondition(cc);
if (!CollectionUtils.isEmpty(serviceAddressList)) {
// 订单地址信息
serviceOrderVO.setAddress(serviceAddressList.get(0).getAddress());
}
return serviceOrderVO;
return buildServiceOrderVO(serviceOrderList).get(0);
}
public Result<PageInfoVO<ServiceOrderVO>> selectByUserId(PageServiceOrderDTO dto, Long uid) {
public Result<PageInfoVO<ServiceOrderVO>> getPage(PageServiceOrderDTO dto, Long userId) {
log.info("order getPage dto: {}, userId: {}", dto, userId);
PageHelper.startPage(dto.getPage(), dto.getSize());
List<ServiceOrder> serviceOrders = serviceOrderBizMapper.selectServiceOrderPage(dto, uid);
List<ServiceOrderVO> serviceOrderVOList = serviceOrders.parallelStream().map(e -> AttrCopyUtils.copy(e, new ServiceOrderVO())).collect(Collectors.toList());
return ResultGenerator.success(new PageInfoVO<>(serviceOrderVOList));
List<ServiceOrder> serviceOrderList = serviceOrderMapper.selectServiceOrderPage(dto.getOrderStatus());
return ResultGenerator.success(new PageInfoVO<>(buildServiceOrderVO(serviceOrderList)));
}
......@@ -124,6 +124,8 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
throw new ServiceException(BizCodeEnum.SERVICE_SUBCLASS_NOT_EXIST);
}
ServiceCategory serviceCategory = serviceCategoryMapper.selectByPrimaryKey(serviceSubclass.getCategoryId());
ServiceAddress serviceAddress = serviceAddressMapper.selectByPrimaryKey(dto.getAddressId());
if (Objects.isNull(serviceAddress)) {
throw new ServiceException(BizCodeEnum.SERVICE_ADDRESS_NOT_EXIST);
......@@ -138,14 +140,21 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
serviceOrder.setPhone(serviceAddress.getPhone());
// 创建人
serviceOrder.setCreateBy(userId);
// 服务名
serviceOrder.setServiceName(
String.format(BizConstants.FormatConstants.CATEGORY_SUBCLASS_SERVICE_NAME,
serviceCategory.getServiceName(),
serviceSubclass.getServiceName()));
int result = this.insertSelective(serviceOrder);
recordComponent.recordServiceOrderImg(serviceOrder, dto.getUrls());
// TODO 发短信通知所有客服
// 记录流程
if (result == 1) {
recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.RESERVE.getStatus(), ServiceOrderStatusEnum.RESERVE.getMsg(), null, null);
recordComponent.recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.RESERVE.getStatus(), ServiceOrderStatusEnum.RESERVE.getMsg(), null, null);
}
return result;
......@@ -179,7 +188,7 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
if (result == 1) {
String description = String.format(ServiceOrderStatusEnum.VALUATION.getMsg(), user.getUserName(), serviceValuator.getName());
recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.VALUATION.getStatus(), description, serviceValuator.getId(), dto.getRemark());
recordComponent.recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.VALUATION.getStatus(), description, serviceValuator.getId(), dto.getRemark());
}
return result;
......@@ -207,7 +216,7 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
if (result == 1) {
String description = String.format(ServiceOrderStatusEnum.REVALUATION.getMsg(), user.getUserName(), serviceValuator.getName());
recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.REVALUATION.getStatus(), description, serviceValuator.getId(), dto.getRemark());
recordComponent.recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.REVALUATION.getStatus(), description, serviceValuator.getId(), dto.getRemark());
}
return result;
......@@ -255,7 +264,7 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
if (result == 1) {
boolean isAdmin = user.getRoleType().equals(ServiceUserTypeEnum.ADMIN.getId());
String description = String.format(ServiceOrderStatusEnum.SEND.getMsg(), (isAdmin ? ServiceUserTypeEnum.ADMIN.getName() : ServiceUserTypeEnum.VALUATOR.getName()) + user.getUserName());
recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.SEND.getStatus(), description, null, null);
recordComponent.recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.SEND.getStatus(), description, null, null);
}
return result;
......@@ -279,7 +288,7 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
// TODO 调用微信支付接口
if (result == 1) {
recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.PAY.getStatus(), ServiceOrderStatusEnum.PAY.getMsg(), null, null);
recordComponent.recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.PAY.getStatus(), ServiceOrderStatusEnum.PAY.getMsg(), null, null);
}
return result;
......@@ -314,7 +323,7 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
if (result == 1) {
String description = String.format(ServiceOrderStatusEnum.DISPATCH.getMsg(), user.getUserName(), serviceWorker.getName());
recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.DISPATCH.getStatus(), description, serviceWorker.getId(), dto.getRemark());
recordComponent.recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.DISPATCH.getStatus(), description, serviceWorker.getId(), dto.getRemark());
}
return result;
......@@ -346,7 +355,7 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
if (result == 1) {
String description = String.format(ServiceOrderStatusEnum.REDISPATCH.getMsg(), user.getUserName(), serviceWorker.getName());
recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.REDISPATCH.getStatus(), description, serviceWorker.getId(), dto.getRemark());
recordComponent.recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.REDISPATCH.getStatus(), description, serviceWorker.getId(), dto.getRemark());
}
return result;
......@@ -381,7 +390,7 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
if (result == 1) {
String description = String.format(ServiceOrderStatusEnum.FINISH.getMsg(), isUser ? ServiceUserTypeEnum.USER.getName() : ServiceUserTypeEnum.ADMIN.getName() + user.getUserName());
recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.FINISH.getStatus(), description, null, null);
recordComponent.recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.FINISH.getStatus(), description, null, null);
}
return result;
......@@ -404,7 +413,7 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
int result = serviceOrderMapper.updateByPrimaryKeySelective(serviceOrder);
if (result == 1) {
recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.CANCEL.getStatus(), ServiceOrderStatusEnum.CANCEL.getMsg(), null, null);
recordComponent.recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.CANCEL.getStatus(), ServiceOrderStatusEnum.CANCEL.getMsg(), null, null);
}
return result;
......@@ -499,6 +508,8 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
* @param finalExecuted 逻辑上谁最有可能是最终的上门人员
*/
public void disableServiceValuatorAssign(ServiceOrder serviceOrder, Long userId, Boolean finalExecuted) {
log.info("disableServiceValuatorAssign serviceOrder: {}, userId: {}, finalExecuted: {}", serviceOrder, userId, finalExecuted);
ServiceValuatorAssign serviceValuatorAssign = new ServiceValuatorAssign();
serviceValuatorAssign.setModifyBy(userId);
serviceValuatorAssign.setDeleted(true);
......@@ -535,6 +546,8 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
* @param userId 用户id
*/
public void disableServiceWorkerAssign(ServiceOrder serviceOrder, Long userId, Boolean finalExecuted) {
log.info("disableServiceWorkerAssign serviceOrder: {}, userId: {}, finalExecuted: {}", serviceOrder, userId, finalExecuted);
ServiceWorkerAssign serviceWorkerAssign = new ServiceWorkerAssign();
serviceWorkerAssign.setModifyBy(userId);
serviceWorkerAssign.setDeleted(true);
......@@ -549,17 +562,31 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
}
@Async
public void recordProcess(Long orderId, Integer processId, String description, Long hostId, String remark) {
ServiceOrderLog serviceOrderLog = new ServiceOrderLog();
serviceOrderLog.setOrderId(orderId);
serviceOrderLog.setProcessId(processId);
serviceOrderLog.setDescription(description);
serviceOrderLog.setHostId(hostId);
serviceOrderLog.setRemark(remark);
private List<ServiceOrderVO> buildServiceOrderVO(List<ServiceOrder> serviceOrderList){
// 地址信息
List<Long> addressIdList = serviceOrderList.parallelStream().map(ServiceOrder::getAddressId).collect(Collectors.toList());
List<ServiceAddress> serviceAddressList = serviceAddressMapper.selectByIdList(addressIdList);
Map<Long, ServiceAddress> serviceAddressMap = serviceAddressList.parallelStream().collect(Collectors.toMap(ServiceAddress::getId, Function.identity()));
serviceOrderLogMapper.insertSelective(serviceOrderLog);
// 图片信息
List<Long> orderIdList = serviceOrderList.parallelStream().map(ServiceOrder::getId).collect(Collectors.toList());
List<ServiceOrderImg> serviceOrderImgList = serviceOrderImgMapper.selectByOrderIdList(orderIdList);
Map<Long, List<ServiceOrderImg>> serviceOrderImgMap = serviceOrderImgList.parallelStream().collect(Collectors.groupingBy(ServiceOrderImg::getOrderId));
return serviceOrderList.parallelStream().map(e -> {
ServiceOrderVO serviceOrderVO = AttrCopyUtils.copy(e, new ServiceOrderVO());
ServiceAddress sa = serviceAddressMap.getOrDefault(serviceOrderVO.getAddressId(), new ServiceAddress());
serviceOrderVO.setName(sa.getName());
serviceOrderVO.setAddress(sa.getAddress());
serviceOrderVO.setUrls(serviceOrderImgMap.getOrDefault(serviceOrderVO.getId(), new ArrayList<>()).parallelStream()
.map(ServiceOrderImg::getUrl).collect(Collectors.toList()));
return serviceOrderVO;
}).collect(Collectors.toList());
}
}
......@@ -7,7 +7,7 @@
select *
from service_order
where
account_no = #{uid,jdbcType=BIGINT}
account_no = #{userId,jdbcType=BIGINT}
<if test="dto.orderStatus != 0">
and order_status = #{dto.orderStatus,jdbcType=INTEGER}
</if>
......
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