|
@@ -24,11 +24,20 @@ import com.iohao.mmo.equip.entity.Equip;
|
|
|
import com.iohao.mmo.equip.entity.EquipTemplate;
|
|
|
import com.iohao.mmo.equip.entity.Goods;
|
|
|
import com.iohao.mmo.equip.utils.RandomUtils;
|
|
|
-import jakarta.annotation.Resource;
|
|
|
+import com.mongodb.bulk.BulkWriteResult;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.data.mongodb.core.BulkOperations;
|
|
|
import org.springframework.data.mongodb.core.MongoTemplate;
|
|
|
+import org.springframework.data.mongodb.core.query.Criteria;
|
|
|
+import org.springframework.data.mongodb.core.query.Query;
|
|
|
+import org.springframework.data.mongodb.core.query.Update;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.beans.JavaBean;
|
|
|
+import java.util.Arrays;
|
|
|
+
|
|
|
/**
|
|
|
* @author 唐斌
|
|
|
* @date 2023-07-30
|
|
@@ -38,93 +47,151 @@ import org.springframework.stereotype.Service;
|
|
|
@AllArgsConstructor
|
|
|
public class EquipTemplateService {
|
|
|
|
|
|
- @Resource
|
|
|
- private GoodsService goodsService;
|
|
|
-
|
|
|
final MongoTemplate mongoTemplate;
|
|
|
|
|
|
public EquipTemplate findById(String id) {
|
|
|
-
|
|
|
return mongoTemplate.findById(id, EquipTemplate.class);
|
|
|
}
|
|
|
|
|
|
- public void saveEquipTemplate(EquipTemplate equipTemplate) {
|
|
|
- mongoTemplate.save(equipTemplate);
|
|
|
+ public void save(EquipTemplate equipTemplate) {
|
|
|
+ if(StringUtils.isNotBlank(equipTemplate.getId())){
|
|
|
+ mongoTemplate.save(equipTemplate);
|
|
|
+ }else {
|
|
|
+ //双向存储,便于后期查找
|
|
|
+ Goods goods = equipTemplate.getGoods();
|
|
|
+ mongoTemplate.save(goods);
|
|
|
+ equipTemplate.setGoods(goods);
|
|
|
+ mongoTemplate.save(equipTemplate);
|
|
|
+ goods.setType(3);
|
|
|
+ goods.setDetailId(equipTemplate.getId());
|
|
|
+ mongoTemplate.save(goods);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+ public void delBatch(String ids) {
|
|
|
+ String[] idsArr = ids.split("-");
|
|
|
+ GameCode.objNotFound.assertTrue(idsArr.length>0);
|
|
|
+ Query query = new Query();
|
|
|
+ query.addCriteria(Criteria.where("id").in(Arrays.asList(idsArr)));
|
|
|
+
|
|
|
+ // 更新的字段
|
|
|
+ Update update = new Update();
|
|
|
+ //获取分配的字段
|
|
|
+ update.set("delFlag", true);
|
|
|
+ update.set("goods.delFlag", true);
|
|
|
+
|
|
|
+ //UNORDERED是平行处理,即使某条记录出错了,其余的也会继续处理;ORDERED是队列排序处理,只要中途有个失败了,那么后续的操作流程就会终止了。
|
|
|
+ BulkOperations bulkOps = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, EquipTemplate.class);
|
|
|
+ bulkOps.updateMulti(query, update);
|
|
|
+ BulkWriteResult result = bulkOps.execute();
|
|
|
+
|
|
|
+ //逻辑删除对应的商品
|
|
|
+ delGoodsByChildBatch(idsArr);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据子表id批量删除物品(逻辑删除)
|
|
|
+ * @param detailIdArr 子表主键
|
|
|
+ */
|
|
|
+ public void delGoodsByChildBatch(String[] detailIdArr) {
|
|
|
+ if (detailIdArr.length==0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Query query = new Query();
|
|
|
+ query.addCriteria(Criteria.where("detailId").in(Arrays.asList(detailIdArr)));
|
|
|
+
|
|
|
+ // 更新的字段
|
|
|
+ Update update = new Update();
|
|
|
+ //获取分配的字段
|
|
|
+ update.set("delFlag", true);
|
|
|
+
|
|
|
+ //UNORDERED是平行处理,即使某条记录出错了,其余的也会继续处理;ORDERED是队列排序处理,只要中途有个失败了,那么后续的操作流程就会终止了。
|
|
|
+ BulkOperations bulkOps = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, Goods.class);
|
|
|
+ bulkOps.updateMulti(query, update);
|
|
|
+ BulkWriteResult result = bulkOps.execute();
|
|
|
+ }
|
|
|
|
|
|
public void initEquipTemplate() {
|
|
|
// 初始化一些装备配置,后期将移到 excel 中做。
|
|
|
EquipTemplate equipTemplate = new EquipTemplate();
|
|
|
equipTemplate.setPosition(1);
|
|
|
- equipTemplate.setLevel(10);
|
|
|
- equipTemplate.setTotalAttrMin(10);
|
|
|
- equipTemplate.setTotalAttrMax(40);
|
|
|
+ equipTemplate.setLevel(20);
|
|
|
+ equipTemplate.setTotalAttrMin(50);
|
|
|
+ equipTemplate.setTotalAttrMax(80);
|
|
|
|
|
|
Goods goods = new Goods();
|
|
|
- goods.setName("布甲");
|
|
|
- goods.setDesc("一件普通的布甲");
|
|
|
+ goods.setName("皮甲");
|
|
|
+ goods.setDesc("一件厚重的皮甲");
|
|
|
goods.setIcon("https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png");
|
|
|
goods.setImage("https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png");
|
|
|
- goods.setBindPrice(120);
|
|
|
- goods.setPrice(100);
|
|
|
+ goods.setBindPrice(220);
|
|
|
+ goods.setPrice(200);
|
|
|
goods.setDealFlag(true);
|
|
|
goods.setType(3);
|
|
|
- goodsService.save(goods);
|
|
|
+ mongoTemplate.save(goods);
|
|
|
equipTemplate.setGoods(goods);
|
|
|
|
|
|
- mongoTemplate.insert(equipTemplate);
|
|
|
+ mongoTemplate.save(equipTemplate);
|
|
|
+ goods.setDetailId(equipTemplate.getId());
|
|
|
+ mongoTemplate.save(goods);
|
|
|
|
|
|
// 初始化一些装备配置,后期将移到 excel 中做。
|
|
|
EquipTemplate equipTemplate2 = new EquipTemplate();
|
|
|
equipTemplate2.setPosition(2);
|
|
|
- equipTemplate2.setLevel(1);
|
|
|
- equipTemplate2.setTotalAttrMin(5);
|
|
|
- equipTemplate2.setTotalAttrMax(18);
|
|
|
+ equipTemplate2.setLevel(18);
|
|
|
+ equipTemplate2.setTotalAttrMin(20);
|
|
|
+ equipTemplate2.setTotalAttrMax(35);
|
|
|
|
|
|
Goods goods2 = new Goods();
|
|
|
- goods2.setName("木剑");
|
|
|
- goods2.setDesc("一把木剑,看起来像玩具,打起来还有点疼");
|
|
|
+ goods2.setName("铁剑");
|
|
|
+ goods2.setDesc("一把铁剑,有些锈迹斑斑了");
|
|
|
goods2.setIcon("https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png");
|
|
|
goods2.setImage("https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png");
|
|
|
- goods2.setBindPrice(80);
|
|
|
- goods2.setPrice(60);
|
|
|
+ goods2.setBindPrice(180);
|
|
|
+ goods2.setPrice(160);
|
|
|
goods2.setDealFlag(true);
|
|
|
goods2.setType(3);
|
|
|
- goodsService.save(goods2);
|
|
|
+ mongoTemplate.save(goods2);
|
|
|
equipTemplate2.setGoods(goods2);
|
|
|
|
|
|
- mongoTemplate.insert(equipTemplate2);
|
|
|
+ mongoTemplate.save(equipTemplate2);
|
|
|
+ goods2.setDetailId(equipTemplate2.getId());
|
|
|
+ mongoTemplate.save(goods2);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 根据装备模板随机一件新的装备
|
|
|
+ * 根据装备库随机一件新的装备
|
|
|
* @param equipTemplateId
|
|
|
* @return
|
|
|
*/
|
|
|
public Equip randomEquip(String equipTemplateId,long userId){
|
|
|
- //取到装备模板
|
|
|
+ //取到装备库
|
|
|
EquipTemplate equipTemplate = mongoTemplate.findById(equipTemplateId, EquipTemplate.class);
|
|
|
|
|
|
GameCode.objNotFound.assertTrue(equipTemplate!=null);
|
|
|
|
|
|
Equip equip = new Equip();
|
|
|
- //随机属性值
|
|
|
- equip.setAttrTotal(RandomUtils.randomFromInt(equipTemplate.getTotalAttrMin(),equipTemplate.getTotalAttrMax()));
|
|
|
- equip.setName(equipTemplate.getGoods().getName());
|
|
|
//新建装备对应的物品类
|
|
|
Goods goods = equipTemplate.getGoods();
|
|
|
goods.setId(null);
|
|
|
goods.setType(0);
|
|
|
- goodsService.save(goods);
|
|
|
- //物品id
|
|
|
- equip.setItemId(goods.getId());
|
|
|
+ mongoTemplate.save(goods);
|
|
|
+ //将装备库属性拷贝到装备中
|
|
|
+ //对应的物品数据是新建的
|
|
|
+ BeanUtils.copyProperties(equipTemplate,equip);
|
|
|
+ equip.setId(null);
|
|
|
+ equip.setGoods(goods);
|
|
|
+ equip.setName(equipTemplate.getGoods().getName());
|
|
|
+ //随机属性值
|
|
|
+ equip.setAttrTotal(RandomUtils.randomFromInt(equipTemplate.getTotalAttrMin(),equipTemplate.getTotalAttrMax()));
|
|
|
equip.setUndistributedAttr(equip.getAttrTotal());
|
|
|
- equip.setEquipTemplate(equipTemplate);
|
|
|
+
|
|
|
//初始化分配的具体属性点
|
|
|
equip.setBasicEquipProperty(BasicEquipProperty.resetBasicEquipProperty());
|
|
|
equip.setUserId(userId);
|
|
|
mongoTemplate.save(equip);
|
|
|
+ goods.setDetailId(equip.getId());
|
|
|
+ mongoTemplate.save(goods);
|
|
|
return equip;
|
|
|
}
|
|
|
}
|