@@ -1,6 +1,7 @@ | |||
package cn.com.taiji.core.entity.comm; | |||
import cn.com.taiji.core.entity.AbstractStringPropertyUUIDEntity; | |||
import cn.com.taiji.core.entity.dict.basic.CardType; | |||
import javax.persistence.Column; | |||
import javax.persistence.Entity; | |||
@@ -17,7 +18,7 @@ import java.time.LocalDateTime; | |||
@Entity | |||
@Table(name = "USER_VEHICLE_BIND") | |||
public class IawVehicleBind extends AbstractStringPropertyUUIDEntity { | |||
public class UserVehicleBind extends AbstractStringPropertyUUIDEntity { | |||
/** 车牌号+颜色 */ | |||
private String vehicleId; | |||
@@ -28,7 +29,7 @@ public class IawVehicleBind extends AbstractStringPropertyUUIDEntity { | |||
/** etc卡号 */ | |||
private String cardId; | |||
/** 卡类型1-记账卡 2-储值卡 3-预存卡 */ | |||
private Integer cardType; | |||
private CardType cardType; | |||
/** 用户账号openId,关联USER_ACCOUNT_INFO表 */ | |||
private String openId; | |||
/** 绑定状态,默认1-绑定 2-解除 */ | |||
@@ -80,11 +81,11 @@ public class IawVehicleBind extends AbstractStringPropertyUUIDEntity { | |||
} | |||
@Column(name = "CARD_TYPE") | |||
public Integer getCardType() { | |||
public CardType getCardType() { | |||
return cardType; | |||
} | |||
public void setCardType(Integer cardType) { | |||
public void setCardType(CardType cardType) { | |||
this.cardType = cardType; | |||
} | |||
@@ -1,14 +0,0 @@ | |||
package cn.com.taiji.core.repo.jpa.comm; | |||
import cn.com.taiji.common.repo.jpa.AbstractJpaRepo; | |||
import cn.com.taiji.core.entity.comm.IawVehicleBind; | |||
import org.springframework.data.jpa.repository.Query; | |||
import java.util.List; | |||
public interface IawVehicleBindRepo extends AbstractJpaRepo<IawVehicleBind,String> { | |||
@Query(" from IawVehicleBind where openId = ?1 order by bindTime desc") | |||
List<IawVehicleBind> queryVehicleBind(String openId); | |||
} |
@@ -0,0 +1,13 @@ | |||
package cn.com.taiji.core.repo.jpa.comm; | |||
import cn.com.taiji.common.repo.jpa.AbstractJpaRepo; | |||
import cn.com.taiji.core.entity.comm.RefundReceiveInfo; | |||
import org.springframework.data.jpa.repository.Query; | |||
public interface RefundReceiveInfoRepo extends AbstractJpaRepo<RefundReceiveInfo,String> { | |||
@Query(" from RefundReceiveInfo where bankIdCode = ?1 and openId = ?2 and delFlag = 0") | |||
RefundReceiveInfo findByBankAndBankIdCodeAndOpenId(String bankIdCode, String openId); | |||
} |
@@ -0,0 +1,14 @@ | |||
package cn.com.taiji.core.repo.jpa.comm; | |||
import cn.com.taiji.common.repo.jpa.AbstractJpaRepo; | |||
import cn.com.taiji.core.entity.comm.UserVehicleBind; | |||
import org.springframework.data.jpa.repository.Query; | |||
import java.util.List; | |||
public interface UserVehicleBindRepo extends AbstractJpaRepo<UserVehicleBind,String> { | |||
@Query(" from UserVehicleBind where openId = ?1 order by bindTime desc") | |||
List<UserVehicleBind> queryVehicleBind(String openId); | |||
} |
@@ -0,0 +1,41 @@ | |||
package cn.com.taiji.iaw.api.comm; | |||
import cn.com.taiji.common.manager.ManagerException; | |||
import cn.com.taiji.common.model.dao.Pagination; | |||
import cn.com.taiji.common.web.ApiResponse; | |||
import cn.com.taiji.iaw.api.MyValidController; | |||
import cn.com.taiji.iaw.dto.ass.RefundInfoDTO; | |||
import cn.com.taiji.iaw.manager.comm.RefundReceiveInfoManager; | |||
import cn.com.taiji.iaw.repo.jpa.request.ass.RefundInfoPageRequest; | |||
import io.swagger.annotations.Api; | |||
import io.swagger.annotations.ApiOperation; | |||
import lombok.RequiredArgsConstructor; | |||
import org.springframework.validation.annotation.Validated; | |||
import org.springframework.web.bind.annotation.*; | |||
@Api(tags = {"退费相关-退费信息相关"}) | |||
@RestController | |||
@RequestMapping("/api/refundInfo/") | |||
@RequiredArgsConstructor | |||
public class RefundReceiveInfoController extends MyValidController { | |||
private final RefundReceiveInfoManager refundReceiveInfoManager; | |||
@ApiOperation("分页查询退费信息") | |||
@PostMapping("/page") | |||
public ApiResponse<Pagination> page(@RequestBody @Validated RefundInfoPageRequest request) throws ManagerException { | |||
return ApiResponse.of(refundReceiveInfoManager.page(request)); | |||
} | |||
@ApiOperation("/保存或者修改退费信息") | |||
@PostMapping("/addOrUpdate") | |||
public ApiResponse<String> addOrUpdate(@RequestBody @Validated RefundInfoDTO dto) throws ManagerException { | |||
return ApiResponse.of(refundReceiveInfoManager.addOrUpdate(dto)); | |||
} | |||
@ApiOperation("/退费信息失效") | |||
@GetMapping("/loseEfficacy/{id}") | |||
public ApiResponse<String> loseEfficacy(@PathVariable("id") String id) throws ManagerException { | |||
return ApiResponse.of(refundReceiveInfoManager.loseEfficacy(id)); | |||
} | |||
} |
@@ -0,0 +1,67 @@ | |||
package cn.com.taiji.iaw.dto.ass; | |||
import cn.com.taiji.common.model.BaseModel; | |||
import cn.com.taiji.core.entity.dict.issue.ProvinceType; | |||
import io.swagger.annotations.ApiModel; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import javax.validation.constraints.NotEmpty; | |||
import javax.validation.constraints.NotNull; | |||
@ApiModel(description = "通行费退费-退费信息上传-新增") | |||
@Getter | |||
@Setter | |||
public class RefundInfoDTO extends BaseModel { | |||
@ApiModelProperty("编号") | |||
private String id; | |||
@ApiModelProperty(name = "用户编号") | |||
@NotEmpty(message = "用户编号不能为空") | |||
private String openId ; | |||
@ApiModelProperty(name = "开户行名称") | |||
@NotNull(message = "开户行名称不能为空") | |||
// todo 开户行名称是否有固定值 Bank | |||
private String bankName ; | |||
@ApiModelProperty(name = "开户行省份") | |||
@NotNull(message = "开户行省份不能为空") | |||
private ProvinceType bankProvince ; | |||
@ApiModelProperty(name = "开户行支行名称") | |||
@NotEmpty(message = "开户行支行名称不能为空") | |||
private String bankBranchName ; | |||
@ApiModelProperty(name = "银行卡号") | |||
@NotEmpty(message = "银行卡号不能为空") | |||
private String bankIdCode ; | |||
@ApiModelProperty(name = "持卡人姓名") | |||
@NotEmpty(message = "持卡人姓名不能为空") | |||
private String userName ; | |||
@ApiModelProperty(name = "持卡人手机号") | |||
@NotEmpty(message = "持卡人手机号不能为空") | |||
private String userMobile ; | |||
@ApiModelProperty(name = "授权书地址") | |||
private String proxyUrl ; | |||
@ApiModelProperty(name = "身份证正面地址") | |||
private String userPosUrl ; | |||
@ApiModelProperty(name = "身份证反面地址") | |||
private String userNegUrl ; | |||
@ApiModelProperty(name = "行驶证正面地址") | |||
private String vehiclePosUrl ; | |||
@ApiModelProperty(name = "行驶证反面地址") | |||
private String vehicleNegUrl ; | |||
@ApiModelProperty(name = "信息失效标记") | |||
private Integer delFlag ; | |||
} |
@@ -0,0 +1,66 @@ | |||
package cn.com.taiji.iaw.dto.ass; | |||
import cn.com.taiji.common.model.BaseModel; | |||
import com.fasterxml.jackson.annotation.JsonFormat; | |||
import io.swagger.annotations.ApiModel; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import java.time.LocalDateTime; | |||
@Getter | |||
@Setter | |||
@ApiModel(description = "通行费退费-退费信息上传-分页") | |||
public class RefundInfoVO extends BaseModel { | |||
@ApiModelProperty("编号") | |||
private String id; | |||
@ApiModelProperty(name = "录入时间") | |||
@JsonFormat(pattern ="yyyy-MM-dd HH:mm:ss") | |||
private LocalDateTime insertTime ; | |||
@ApiModelProperty(name = "修改时间") | |||
@JsonFormat(pattern ="yyyy-MM-dd HH:mm:ss") | |||
private LocalDateTime updateTime ; | |||
@ApiModelProperty(name = "用户编号") | |||
private String openId ; | |||
@ApiModelProperty(name = "开户行名称") | |||
private String bankName ; | |||
@ApiModelProperty(name = "开户行省份") | |||
private String bankProvince ; | |||
@ApiModelProperty(name = "开户行支行名称") | |||
private String bankBranchName ; | |||
@ApiModelProperty(name = "银行卡号") | |||
private String bankIdCode ; | |||
@ApiModelProperty(name = "持卡人姓名") | |||
private String userName ; | |||
@ApiModelProperty(name = "持卡人手机号") | |||
private String userMobile ; | |||
@ApiModelProperty(name = "授权书地址") | |||
private String proxyUrl ; | |||
@ApiModelProperty(name = "身份证正面地址") | |||
private String userPosUrl ; | |||
@ApiModelProperty(name = "身份证反面地址") | |||
private String userNegUrl ; | |||
@ApiModelProperty(name = "行驶证正面地址") | |||
private String vehiclePosUrl ; | |||
@ApiModelProperty(name = "行驶证反面地址") | |||
private String vehicleNegUrl ; | |||
@ApiModelProperty(name = "信息失效标记") | |||
private Integer delFlag ; | |||
} |
@@ -5,9 +5,9 @@ import cn.com.taiji.common.model.dao.Pagination; | |||
import cn.com.taiji.common.pub.BeanTools; | |||
import cn.com.taiji.common.pub.CollectionTools; | |||
import cn.com.taiji.core.entity.basic.QtkCardInfo; | |||
import cn.com.taiji.core.entity.comm.IawVehicleBind; | |||
import cn.com.taiji.core.entity.comm.UserVehicleBind; | |||
import cn.com.taiji.core.repo.jpa.basic.QtkCardInfoRepo; | |||
import cn.com.taiji.core.repo.jpa.comm.IawVehicleBindRepo; | |||
import cn.com.taiji.core.repo.jpa.comm.UserVehicleBindRepo; | |||
import cn.com.taiji.iaw.dto.comm.*; | |||
import cn.com.taiji.iaw.repo.jpa.request.comm.VehicleBindPageRequest; | |||
import cn.com.taiji.iaw.tools.WxLoginUserUtil; | |||
@@ -31,7 +31,7 @@ import java.util.stream.Collectors; | |||
public class IawVehicleBindManagerImpl implements IawVehicleBindManager { | |||
@Autowired | |||
private IawVehicleBindRepo repo; | |||
private UserVehicleBindRepo repo; | |||
@Autowired | |||
private WxLoginUserUtil wxLoginUserUtil; | |||
@Autowired | |||
@@ -52,7 +52,7 @@ public class IawVehicleBindManagerImpl implements IawVehicleBindManager { | |||
if (!cardInfos.stream().map(QtkCardInfo::getCardId).collect(Collectors.toList()).contains(dto.getCardId())){ | |||
throw new ManagerException("该车辆的ETC卡号校验失败,无法绑定!"); | |||
} | |||
IawVehicleBind vehicleBind = new IawVehicleBind(); | |||
UserVehicleBind vehicleBind = new UserVehicleBind(); | |||
BeanTools.copyProperties(dto, vehicleBind,"id"); | |||
vehicleBind.setVehicleId(dto.getVehiclePlate() + "_" + dto.getVehiclePlateColor()); | |||
vehicleBind.setBindStatus(1);//默认1,1-绑定 2-解除 | |||
@@ -66,7 +66,7 @@ public class IawVehicleBindManagerImpl implements IawVehicleBindManager { | |||
@Override | |||
public VehicleUnBindResponseDTO unBind(VehicleUnBindRequestDTO dto) throws ManagerException { | |||
IawVehicleBind vehicleBind = repo.findById(dto.getId()).orElse(null); | |||
UserVehicleBind vehicleBind = repo.findById(dto.getId()).orElse(null); | |||
if (vehicleBind == null){ | |||
throw new ManagerException("未查询到车辆信息,请刷新重试!"); | |||
} |
@@ -0,0 +1,14 @@ | |||
package cn.com.taiji.iaw.manager.comm; | |||
import cn.com.taiji.common.manager.ManagerException; | |||
import cn.com.taiji.common.model.dao.Pagination; | |||
import cn.com.taiji.iaw.dto.ass.RefundInfoDTO; | |||
import cn.com.taiji.iaw.repo.jpa.request.ass.RefundInfoPageRequest; | |||
public interface RefundReceiveInfoManager { | |||
Pagination page(RefundInfoPageRequest request) throws ManagerException; | |||
String addOrUpdate(RefundInfoDTO dto) throws ManagerException; | |||
String loseEfficacy(String id) throws ManagerException; | |||
} |
@@ -0,0 +1,102 @@ | |||
package cn.com.taiji.iaw.manager.comm; | |||
import cn.com.taiji.common.manager.AbstractManager; | |||
import cn.com.taiji.common.manager.ManagerException; | |||
import cn.com.taiji.common.model.dao.Pagination; | |||
import cn.com.taiji.common.pub.BeanTools; | |||
import cn.com.taiji.core.entity.comm.RefundReceiveInfo; | |||
import cn.com.taiji.core.entity.user.AccountInfo; | |||
import cn.com.taiji.core.repo.jpa.comm.RefundReceiveInfoRepo; | |||
import cn.com.taiji.core.repo.jpa.user.AccountInfoRepo; | |||
import cn.com.taiji.iaw.dto.ass.RefundInfoDTO; | |||
import cn.com.taiji.iaw.dto.ass.RefundInfoVO; | |||
import cn.com.taiji.iaw.repo.jpa.request.ass.RefundInfoPageRequest; | |||
import lombok.RequiredArgsConstructor; | |||
import org.apache.commons.lang3.StringUtils; | |||
import org.springframework.stereotype.Service; | |||
import java.time.LocalDateTime; | |||
import java.util.List; | |||
import java.util.UUID; | |||
import java.util.stream.Collectors; | |||
@Service | |||
@RequiredArgsConstructor | |||
public class RefundReceiveInfoManagerImpl extends AbstractManager implements RefundReceiveInfoManager { | |||
private final RefundReceiveInfoRepo refundReceiveInfoRepo; | |||
private final AccountInfoRepo accountInfoRepo; | |||
@Override | |||
public Pagination page(RefundInfoPageRequest request) throws ManagerException { | |||
validOpenId(request.getOpenId()); | |||
Pagination pagination = refundReceiveInfoRepo.page(request); | |||
List<RefundInfoVO> list = pagination.getResult(RefundReceiveInfo.class).stream() | |||
.map(this::convertRefundInfoVO).collect(Collectors.toList()); | |||
pagination.setResult(list); | |||
return pagination; | |||
} | |||
@Override | |||
public String addOrUpdate(RefundInfoDTO dto) throws ManagerException { | |||
validOpenId(dto.getOpenId()); | |||
RefundReceiveInfo exitRefundInfo = refundReceiveInfoRepo.findByBankAndBankIdCodeAndOpenId(dto.getBankIdCode(), dto.getOpenId()); | |||
LocalDateTime now = LocalDateTime.now(); | |||
String id = dto.getId(); | |||
if (StringUtils.isNotBlank(id)) { | |||
// 修改 | |||
RefundReceiveInfo entity = refundReceiveInfoRepo.findById(id).orElse(null); | |||
if (entity == null) { | |||
throw new ManagerException("该退费信息不存在"); | |||
} | |||
if (exitRefundInfo != null && !dto.getOpenId().equals(exitRefundInfo.getOpenId())) { | |||
throw new ManagerException("退费信息中该银行卡信息已存在"); | |||
} | |||
BeanTools.copyProperties(dto, entity, "id", "insertTime", "delFlag"); | |||
entity.setUpdateTime(now); | |||
refundReceiveInfoRepo.save(entity); | |||
return "修改退费信息成功"; | |||
}else { | |||
// 保存 | |||
if (exitRefundInfo != null){ | |||
throw new ManagerException("退费信息中该银行卡信息已存在"); | |||
} | |||
RefundReceiveInfo RefundReceiveInfo = new RefundReceiveInfo(); | |||
BeanTools.copyProperties(dto, RefundReceiveInfo); | |||
RefundReceiveInfo.setId(UUID.randomUUID().toString().replace("-", "")); | |||
RefundReceiveInfo.setInsertTime(now); | |||
RefundReceiveInfo.setUpdateTime(now); | |||
RefundReceiveInfo.setDelFlag(0); | |||
refundReceiveInfoRepo.persist(RefundReceiveInfo); | |||
return "保存退费信息成功"; | |||
} | |||
} | |||
@Override | |||
public String loseEfficacy(String id) throws ManagerException { | |||
RefundReceiveInfo entity = refundReceiveInfoRepo.findById(id).orElse(null); | |||
if (entity == null) { | |||
throw new ManagerException("该退费信息不存在"); | |||
} | |||
entity.setDelFlag(1); | |||
entity.setUpdateTime(LocalDateTime.now()); | |||
refundReceiveInfoRepo.save(entity); | |||
return "退费信息以失效"; | |||
} | |||
private RefundInfoVO convertRefundInfoVO(RefundReceiveInfo RefundReceiveInfo) { | |||
RefundInfoVO refundInfoVO = new RefundInfoVO(); | |||
BeanTools.copyProperties(RefundReceiveInfo, refundInfoVO); | |||
refundInfoVO.setBankProvince(RefundReceiveInfo.getBankProvince().getShortName()); | |||
refundInfoVO.setBankName(RefundReceiveInfo.getBankName()); | |||
return refundInfoVO; | |||
} | |||
private void validOpenId(String openId) throws ManagerException { | |||
AccountInfo accountInfo = accountInfoRepo.findByOpenId(openId); | |||
if (accountInfo == null){ | |||
throw new ManagerException("身份信息错误"); | |||
} | |||
} | |||
} |
@@ -0,0 +1,29 @@ | |||
package cn.com.taiji.iaw.repo.jpa.request.ass; | |||
import cn.com.taiji.common.pub.dao.HqlBuilder; | |||
import cn.com.taiji.common.repo.request.jpa.JpaPageableDataRequest; | |||
import cn.com.taiji.core.entity.comm.UserVehicleBind; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import javax.validation.constraints.NotEmpty; | |||
@Getter | |||
@Setter | |||
public class RefundInfoPageRequest extends JpaPageableDataRequest<UserVehicleBind> { | |||
@NotEmpty(message = "openId不能为空") | |||
private String openId; | |||
public RefundInfoPageRequest() { | |||
super.orderBy = "updateTime"; | |||
super.desc = true; | |||
} | |||
@Override | |||
public HqlBuilder toSelectHql() { | |||
HqlBuilder hql = new HqlBuilder("from AssRefundInfo where 1=1"); | |||
hql.append(" and openId = :openId", openId); | |||
hql.append(" and delFlag = 0"); | |||
return hql; | |||
} | |||
} |
@@ -2,7 +2,7 @@ package cn.com.taiji.iaw.repo.jpa.request.comm; | |||
import cn.com.taiji.common.pub.dao.HqlBuilder; | |||
import cn.com.taiji.common.repo.request.jpa.JpaPageableDataRequest; | |||
import cn.com.taiji.core.entity.comm.IawVehicleBind; | |||
import cn.com.taiji.core.entity.comm.UserVehicleBind; | |||
import io.swagger.annotations.ApiModel; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
@@ -19,7 +19,7 @@ import lombok.experimental.Accessors; | |||
@Getter | |||
@Setter | |||
@Accessors(chain = true) | |||
public class VehicleBindPageRequest extends JpaPageableDataRequest<IawVehicleBind> { | |||
public class VehicleBindPageRequest extends JpaPageableDataRequest<UserVehicleBind> { | |||
/** 绑定状态 */ | |||
private Integer bindStatus = 1; | |||
@@ -32,7 +32,7 @@ public class VehicleBindPageRequest extends JpaPageableDataRequest<IawVehicleBin | |||
@Override | |||
public HqlBuilder toSelectHql() { | |||
HqlBuilder hql = new HqlBuilder("from " + IawVehicleBind.class.getName() + " where 1=1 "); | |||
HqlBuilder hql = new HqlBuilder("from " + UserVehicleBind.class.getName() + " where 1=1 "); | |||
hql.append(" and bindStatus = :bindStatus ", bindStatus); | |||
hql.append(" and openId = :openId ", openId); | |||
hql.append(" and vehiclePlate = :vehiclePlate ", vehiclePlate); |