feat:分账

This commit is contained in:
suzhuhong
2026-04-16 18:25:22 +08:00
parent d90f8eb2a8
commit 5ccfbc96d7
13 changed files with 254 additions and 8 deletions

View File

@@ -175,6 +175,7 @@ public enum ShopSubStageStatusEnum {
SHOP_SUB_STAGE_STATUS_283(ShopSubStageEnum.SHOP_STAGE_28, 2830, "审批拒绝", Boolean.FALSE),
SHOP_SUB_STAGE_STATUS_284(ShopSubStageEnum.SHOP_STAGE_28, 2840, "待缴费", Boolean.FALSE),
SHOP_SUB_STAGE_STATUS_284_5(ShopSubStageEnum.SHOP_STAGE_28, 2845, "对账中", Boolean.FALSE),
SHOP_SUB_STAGE_STATUS_284_7(ShopSubStageEnum.SHOP_STAGE_28, 2847, "其他费用待扣款", Boolean.FALSE),
SHOP_SUB_STAGE_STATUS_285(ShopSubStageEnum.SHOP_STAGE_28, 2850, "已完成", Boolean.TRUE),
SHOP_SUB_STAGE_STATUS_290(ShopSubStageEnum.SHOP_STAGE_29, 2900, "待通知发货", Boolean.FALSE),

View File

@@ -78,4 +78,21 @@ public class PreAllocationRecordDAO {
}
return preAllocationRecordMapper.deleteByIdsNotPaid(ids) > 0;
}
/**
* 软删除
*/
public boolean softDeleteById(Long id) {
return preAllocationRecordMapper.softDeleteById(id) > 0;
}
/**
* 批量软删除
*/
public boolean softDeleteByIds(List<Long> ids) {
if (ids == null || ids.isEmpty()) {
return false;
}
return preAllocationRecordMapper.softDeleteByIds(ids) > 0;
}
}

View File

@@ -33,4 +33,14 @@ public interface PreAllocationRecordMapper extends Mapper<PreAllocationRecordDO>
int deleteByIdsNotPaid(@Param("ids") List<Long> ids);
Integer updateByPayNoList(@Param("payNoList") List<String> payNoList, @Param("status") Integer status);
/**
* 软删除
*/
int softDeleteById(@Param("id") Long id);
/**
* 批量软删除
*/
int softDeleteByIds(@Param("ids") List<Long> ids);
}

View File

@@ -14,11 +14,17 @@
<result column="allocation_status" property="allocationStatus" jdbcType="INTEGER"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
<result column="remark" property="remark" jdbcType="VARCHAR"/>
<result column="deleted" property="deleted" jdbcType="TINYINT"/>
</resultMap>
<sql id="Base_Column_List">
id, order_id, shop_id, pay_no, expense_type, payee_name, payee_code,
pay_amount, allocation_status, create_time, update_time
pay_amount, allocation_status, create_time, update_time, remark, deleted
</sql>
<sql id="Not_Deleted_Condition">
deleted = 0
</sql>
<select id="getById" resultMap="BaseResultMap">
@@ -31,6 +37,7 @@
SELECT <include refid="Base_Column_List"/>
FROM zxjp_pre_allocation_record
WHERE order_id = #{orderId}
AND <include refid="Not_Deleted_Condition"/>
ORDER BY create_time DESC
</select>
@@ -38,6 +45,7 @@
SELECT <include refid="Base_Column_List"/>
FROM zxjp_pre_allocation_record
WHERE shop_id = #{shopId}
AND <include refid="Not_Deleted_Condition"/>
ORDER BY create_time DESC
</select>
@@ -45,14 +53,16 @@
SELECT <include refid="Base_Column_List"/>
FROM zxjp_pre_allocation_record
WHERE shop_id = #{shopId}
and expense_type = #{expenseType}
AND expense_type = #{expenseType}
ORDER BY create_time DESC
limit 1
</select>
<select id="queryPageByPayNo" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List"/>
FROM zxjp_pre_allocation_record
WHERE pay_no = #{payNo}
AND <include refid="Not_Deleted_Condition"/>
ORDER BY create_time DESC
</select>
@@ -130,6 +140,23 @@
</foreach>
</delete>
<update id="softDeleteById">
UPDATE zxjp_pre_allocation_record
SET deleted = 1,
update_time = NOW()
WHERE id = #{id}
AND <include refid="Not_Deleted_Condition"/>
</update>
<update id="softDeleteByIds">
UPDATE zxjp_pre_allocation_record
SET deleted = 1,
update_time = NOW()
WHERE id IN
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
AND <include refid="Not_Deleted_Condition"/>
</update>
</mapper>

View File

@@ -53,4 +53,10 @@ public class PreAllocationRecordDO implements Serializable {
@Column(name = "update_time")
private Date updateTime;
@Column(name = "remark")
private String remark;
@Column(name = "deleted")
private Integer deleted;
}

View File

@@ -0,0 +1,42 @@
package com.cool.store.request.store;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
* 新增预分账记录请求
*/
@Data
public class PreAllocationAddRequest {
@NotNull(message = "订单ID不能为空")
@ApiModelProperty("订单ID")
private Long orderId;
@NotNull(message = "门店ID不能为空")
@ApiModelProperty("门店ID")
private Long shopId;
@NotBlank(message = "费用类型不能为空")
@ApiModelProperty("费用类型")
private String expenseType;
@ApiModelProperty("收款公司名称")
private String payeeName;
@ApiModelProperty("收款公司Code")
private String payeeCode;
@NotNull(message = "分账金额不能为空")
@DecimalMin(value = "0.01", message = "分账金额必须大于0")
@ApiModelProperty("分账金额")
private BigDecimal payAmount;
@ApiModelProperty("分账备注")
private String remark;
}

View File

@@ -0,0 +1,36 @@
package com.cool.store.request.store;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
* 编辑预分账记录请求
*/
@Data
public class PreAllocationEditRequest {
@NotNull(message = "记录ID不能为空")
@ApiModelProperty("记录ID")
private Long id;
@ApiModelProperty("费用类型")
private String expenseType;
@ApiModelProperty("收款公司名称")
private String payeeName;
@ApiModelProperty("收款公司Code")
private String payeeCode;
@ApiModelProperty("分账金额")
@DecimalMin(value = "0.01", message = "分账金额必须大于0")
private BigDecimal payAmount;
@ApiModelProperty("分账备注")
private String remark;
}

View File

@@ -50,5 +50,7 @@ public class PreAllocationRecordVO {
@ApiModelProperty("更新时间")
private Date updateTime;
@ApiModelProperty("分账备注")
private String remark;
}

View File

@@ -335,7 +335,7 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService {
stageList.add(SHOP_SUB_STAGE_STATUS_80);
}else {
//标准店
stageList.add(SHOP_SUB_STAGE_STATUS_285);
stageList.add(SHOP_SUB_STAGE_STATUS_284_7);
stageList.add(SHOP_SUB_STAGE_STATUS_80);
//查询可乐机缴费状态
PreAllocationRecordDO preAllocationRecordDO = preAllocationRecordDAO.queryPageByShopIdAndExpenseType(request.getShopId(), WalletFeeItemEnum.DEVICE_EARNEST_MONEY.getExpenseType());

View File

@@ -44,8 +44,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import static com.cool.store.enums.point.ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_285;
import static com.cool.store.enums.point.ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_80;
import static com.cool.store.enums.point.ShopSubStageStatusEnum.*;
/**
* @Author suzhuhong
@@ -127,7 +126,7 @@ public class OpenApiServiceImpl implements OpenApiService {
if (request.getClaimStatus() == 1 && preAllocationRecordDO!=null&&WalletFeeItemEnum.DEVICE_EARNEST_MONEY.getExpenseType().equals(preAllocationRecordDO.getExpenseType())){
String key = MessageFormat.format(RedisConstant.XGJ_CALLBACK_SHOP, preAllocationRecordDO.getShopId());
if (StringUtils.isNotEmpty(redisUtilPool.getString(key))){
shopStageInfoDAO.batchUpdateShopStageStatus(preAllocationRecordDO.getShopId(),Arrays.asList(SHOP_SUB_STAGE_STATUS_285,SHOP_SUB_STAGE_STATUS_80));
shopStageInfoDAO.batchUpdateShopStageStatus(preAllocationRecordDO.getShopId(),Arrays.asList(SHOP_SUB_STAGE_STATUS_284_7,SHOP_SUB_STAGE_STATUS_80));
}
}
return ApiResponse.success(Boolean.TRUE);

View File

@@ -3,6 +3,8 @@ package com.cool.store.service.store;
import com.cool.store.entity.order.PreAllocationRecordDO;
import com.cool.store.entity.order.StoreOrderDO;
import com.cool.store.entity.wallet.WalletTradeDO;
import com.cool.store.request.store.PreAllocationAddRequest;
import com.cool.store.request.store.PreAllocationEditRequest;
import com.cool.store.request.store.PreAllocationQueryShopRequest;
import com.cool.store.request.store.PreAllocationSaveRequest;
import com.cool.store.request.store.TransRequest;
@@ -37,4 +39,26 @@ public interface PreAllocationRecordService {
*/
Boolean transStatusRefresh(WalletTradeDO walletTradeDO);
/**
* 新增预分账记录
* @param request
* @return
*/
Boolean add(PreAllocationAddRequest request);
/**
* 编辑预分账记录
* @param request
* @return
*/
Boolean edit(PreAllocationEditRequest request);
/**
* 删除预分账记录(软删除)
* @param id
* @return
*/
Boolean delete(Long id);
}

View File

@@ -43,6 +43,8 @@ import com.cool.store.enums.point.ShopSubStageStatusEnum;
import com.cool.store.enums.wallet.TradeTypeEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.mapper.FranchiseFeeMapper;
import com.cool.store.request.store.PreAllocationAddRequest;
import com.cool.store.request.store.PreAllocationEditRequest;
import com.cool.store.request.store.PreAllocationSaveRequest;
import com.cool.store.request.store.TransRequest;
import com.cool.store.request.wallet.*;
@@ -74,8 +76,8 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import static com.cool.store.enums.order.StoreOrderStatusEnum.PAY_FAIL;
import static com.cool.store.enums.wallet.WalletTradeModuleEnum.STANDARD_STORE;
import static com.cool.store.enums.wallet.WalletTradeModuleEnum.TRANSFER;
import static com.cool.store.enums.point.ShopSubStageStatusEnum.*;
import static com.cool.store.enums.wallet.WalletTradeModuleEnum.*;
/**
* @Auther zx_szh
@@ -756,6 +758,7 @@ public class PreAllocationRecordServiceImpl implements PreAllocationRecordServic
throw new ServiceException(ErrorCodeEnum.ERROR_MESSAGE);
}
record.setAllocationStatus(AllocationPayStatusEnum.PAYING.getStatus());
record.setRemark(transRequest.getRemark());
//先改为分账中
preAllocationRecordDAO.updateByPrimaryKeySelective(record);
WalletTradeDO walletTradeDO = new WalletTradeDO();
@@ -804,10 +807,68 @@ public class PreAllocationRecordServiceImpl implements PreAllocationRecordServic
if (BigDecimalUtils.equals(unpaidAmount,new BigDecimal(0))){
//剩余缴纳金额是0 缴费完成
updateOrder.setStatus( StoreOrderStatusEnum.PAID.getCode());
//阶段状态变为完成
shopStageInfoDAO.updateShopStageInfo(storeOrder.getShopId(), SHOP_SUB_STAGE_STATUS_285);
}
storeOrderDAO.updateSelective(updateOrder);
}
return Boolean.TRUE;
}
@Override
public Boolean add(PreAllocationAddRequest request) {
if (request == null) {
throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR);
}
PreAllocationRecordDO record = PreAllocationRecordDO.builder()
.orderId(request.getOrderId())
.shopId(request.getShopId())
.expenseType(request.getExpenseType())
.payeeName(request.getPayeeName())
.payeeCode(request.getPayeeCode())
.payAmount(request.getPayAmount())
.remark(request.getRemark())
.deleted(0)
.allocationStatus(AllocationPayStatusEnum.UNPAID.getStatus())
.createTime(new Date())
.updateTime(new Date())
.build();
return dao.insertSelective(record);
}
@Override
public Boolean edit(PreAllocationEditRequest request) {
if (request == null || request.getId() == null) {
throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR);
}
PreAllocationRecordDO exist = dao.getById(request.getId());
if (exist == null) {
throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR);
}
PreAllocationRecordDO record = PreAllocationRecordDO.builder()
.id(request.getId())
.expenseType(request.getExpenseType())
.payeeName(request.getPayeeName())
.payeeCode(request.getPayeeCode())
.payAmount(request.getPayAmount())
.remark(request.getRemark())
.updateTime(new Date())
.build();
return dao.updateByPrimaryKeySelective(record);
}
@Override
public Boolean delete(Long id) {
if (id == null) {
throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR);
}
return dao.softDeleteById(id);
}
}

View File

@@ -1,5 +1,7 @@
package com.cool.store.controller.webb;
import com.cool.store.request.store.PreAllocationAddRequest;
import com.cool.store.request.store.PreAllocationEditRequest;
import com.cool.store.request.store.PreAllocationQueryShopRequest;
import com.cool.store.request.store.PreAllocationSaveRequest;
import com.cool.store.request.store.TransRequest;
@@ -45,4 +47,23 @@ public class PreAllocationRecordController {
public ResponseResult<List<PreAllocationRecordVO>> queryByShop(@RequestParam(value = "shopId" ,required = true) Long shopId){
return ResponseResult.success(preAllocationRecordService.queryByShop(shopId));
}
@ApiOperation("新增预分账记录")
@PostMapping("/add")
public ResponseResult<Boolean> add(@RequestBody @Valid PreAllocationAddRequest request){
return ResponseResult.success(preAllocationRecordService.add(request));
}
@ApiOperation("编辑预分账记录")
@PostMapping("/edit")
public ResponseResult<Boolean> edit(@RequestBody @Valid PreAllocationEditRequest request){
return ResponseResult.success(preAllocationRecordService.edit(request));
}
@ApiOperation("删除预分账记录")
@PostMapping("/delete")
public ResponseResult<Boolean> delete(@RequestParam(value = "id" ,required = true) Long id){
return ResponseResult.success(preAllocationRecordService.delete(id));
}
}