拖动排序
This commit is contained in:
@@ -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()));
|
||||
|
||||
Reference in New Issue
Block a user