拖动排序

This commit is contained in:
2026-04-28 17:37:50 +08:00
parent d8b8b55e7a
commit e823cb7e6b
4 changed files with 78 additions and 32 deletions

View File

@@ -18,6 +18,7 @@ import java.util.List;
/**
* 支付方式管理
*
* @author Administrator
*/
@RestController
@@ -60,7 +61,19 @@ public class ShopPayTypeController {
@PostMapping
public CzgResult<Boolean> add(@RequestBody @Validated(InsertGroup.class) ShopPayTypeAddDTO shopPayTypeAddDTO) {
ShopPayType shopPayType = BeanUtil.copyProperties(shopPayTypeAddDTO, ShopPayType.class);
return CzgResult.success(shopPayTypeService.add(StpKit.USER.getShopId(),shopPayType));
return CzgResult.success(shopPayTypeService.add(StpKit.USER.getShopId(), shopPayType));
}
/**
* 支付类型拖动排序
*
* @param shopId 店铺ID
* @param id 拖动的支付类型ID
* @param targetSort 目标位置排序号
*/
@PostMapping("/sort")
public CzgResult<Void> sort(@RequestParam Long shopId, @RequestParam Integer id, @RequestParam Integer targetSort) {
shopPayTypeService.updateSort(shopId, id, targetSort);
return CzgResult.success();
}
}

View File

@@ -37,6 +37,12 @@ public class ShopPayType implements Serializable {
@Id(keyType = KeyType.Auto)
private Integer id;
/**
* 图标
*/
private String icon;
/**
* 支付类型cash,alipay,weixin,deposit,arrears,virtual,member-account
*/
@@ -57,26 +63,6 @@ public class ShopPayType implements Serializable {
*/
private Long shopId;
/**
* 0允许退款 1-不允许退款
*/
private Integer isRefundable;
/**
* 是否打开钱箱
*/
private Integer isOpenCashDrawer;
/**
* 0不是 1是 [系统级支付]
*/
private Integer isSystem;
/**
* 0-非虚拟 1虚拟 virtual
*/
private Integer isIdeal;
/**
* 0-不显示1显示
*/
@@ -91,10 +77,4 @@ public class ShopPayType implements Serializable {
private LocalDateTime createTime;
@Column(onInsertValue = "now()")
private LocalDateTime updateTime;
/**
* 图标
*/
private String icon;
}

View File

@@ -21,4 +21,12 @@ public interface ShopPayTypeService extends IService<ShopPayType> {
Boolean edit(Long shopId, ShopPayTypeDTO shopPayTypeDTO);
void addInfo(Long shopId);
/**
* 拖动排序
* @param shopId 店铺ID
* @param payTypeId 当前拖动的支付类型ID
* @param targetSort 目标排序号
*/
void updateSort(Long shopId, Integer payTypeId, Integer targetSort);
}

View File

@@ -11,6 +11,7 @@ import com.czg.account.entity.ShopPayType;
import com.czg.account.service.ShopPayTypeService;
import com.czg.service.account.mapper.ShopPayTypeMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@@ -24,11 +25,11 @@ import java.util.List;
@Service
public class ShopPayTypeServiceImpl extends ServiceImpl<ShopPayTypeMapper, ShopPayType> implements ShopPayTypeService{
private final ArrayList<ShopPayType> payTypeArrayList = new ArrayList<>(){{
add(new ShopPayType().setPayType("cash").setPayName("现金").setIcon("https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/3/319005ffef734aa6a88d432459fa59d8.png"));
add(new ShopPayType().setPayType("bank").setPayName("银行卡").setIcon("https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/3/98e6199cc61a480b9c63617600b2f2fe.png"));
add(new ShopPayType().setPayType("scanCode").setPayName("扫码支付").setIcon("https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/3/3a344b46638547df81d5857a3c8cac66.png"));
add(new ShopPayType().setPayType("deposit").setPayName("储值卡").setIcon("https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/3/6f778df10ea74142a6cba310c2a19063.png"));
add(new ShopPayType().setPayType("virtual").setPayName("挂账支付").setIcon("https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/3/6f778df10ea74142a6cba310c2a19063.png").setIsShowShortcut(0));
add(new ShopPayType().setPayType("cash").setPayName("现金").setIcon("https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/3/319005ffef734aa6a88d432459fa59d8.png").setSorts(1));
add(new ShopPayType().setPayType("bank").setPayName("银行卡").setIcon("https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/3/98e6199cc61a480b9c63617600b2f2fe.png").setSorts(2));
add(new ShopPayType().setPayType("scanCode").setPayName("扫码支付").setIcon("https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/3/3a344b46638547df81d5857a3c8cac66.png").setSorts(3));
add(new ShopPayType().setPayType("deposit").setPayName("储值卡").setIcon("https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/3/6f778df10ea74142a6cba310c2a19063.png").setSorts(4));
add(new ShopPayType().setPayType("virtual").setPayName("挂账支付").setIcon("https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/3/6f778df10ea74142a6cba310c2a19063.png").setIsShowShortcut(0).setSorts(5));
}};
@Override
@@ -44,6 +45,50 @@ public class ShopPayTypeServiceImpl extends ServiceImpl<ShopPayTypeMapper, ShopP
});
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateSort(Long shopId, Integer payTypeId, Integer targetSort) {
// 1. 查询当前拖动的项
ShopPayType current = getById(payTypeId);
if (current == null) {
throw new RuntimeException("支付类型不存在");
}
Integer oldSort = current.getSorts();
// 如果位置没变,不处理
if (oldSort.equals(targetSort)) {
return;
}
// 2. 查询同店铺下所有支付类型(按排序升序)
QueryWrapper wrapper = QueryWrapper.create()
.eq(ShopPayType::getShopId, shopId)
.orderBy(ShopPayType::getSorts, true);
List<ShopPayType> list = list(wrapper);
// 3. 重新排序(核心算法)
for (int i = 0; i < list.size(); i++) {
ShopPayType item = list.get(i);
if (item.getId().equals(payTypeId)) {
// 当前拖动项,设置目标排序
item.setSorts(targetSort);
} else if (oldSort < targetSort) {
// 向下拖动:原排序 < 目标排序 → 中间项排序 -1
if (item.getSorts() > oldSort && item.getSorts() <= targetSort) {
item.setSorts(item.getSorts() - 1);
}
} else {
// 向上拖动:原排序 > 目标排序 → 中间项排序 +1
if (item.getSorts() < oldSort && item.getSorts() >= targetSort) {
item.setSorts(item.getSorts() + 1);
}
}
}
// 4. 批量更新排序
updateBatch(list);
}
@Override
public List<ShopPayType> getList(Long shopId) {
List<ShopPayType> list = list(new QueryWrapper().eq(ShopPayType::getShopId, StpKit.USER.getShopId()));