Commit 3ef9d884 by huluobin

美甲作品

parent a44147c9
...@@ -65,4 +65,6 @@ public interface CareerCmdService { ...@@ -65,4 +65,6 @@ public interface CareerCmdService {
* @return * @return
*/ */
Page<BaseProduce> queryWorkTpl(Integer technicianId, Integer pageNum, Integer pageSize, String searchKeyWord); Page<BaseProduce> queryWorkTpl(Integer technicianId, Integer pageNum, Integer pageSize, String searchKeyWord);
} }
...@@ -49,6 +49,15 @@ public class CareerCmdServiceImpl implements CareerCmdService { ...@@ -49,6 +49,15 @@ public class CareerCmdServiceImpl implements CareerCmdService {
@Override @Override
public void submitWorks(SubmitWorksCommand cmd) { public void submitWorks(SubmitWorksCommand cmd) {
Works submittedWork = worksMapper.selectOne(new LambdaQueryWrapper<Works>()
.eq(Works::getTechnicianId, cmd.getTechnicianId())
.eq(Works::getProduceId, cmd.getProduceId())
);
if (submittedWork != null) {
throw new RRException("您已经上传过美甲作品");
}
Works works = new Works(); Works works = new Works();
works.setCreateTime(System.currentTimeMillis()); works.setCreateTime(System.currentTimeMillis());
works.setRemarks(cmd.getRemarks()); works.setRemarks(cmd.getRemarks());
......
package com.gogirl.infrastructure.util.lock;
import java.util.HashMap;
import java.util.concurrent.locks.ReentrantLock;
/**
*  * 分段锁,系统提供一定数量的原始锁,根据传入用户id值获取对应的锁并加锁  * 注意:要锁的用户id值如果发生改变,有可能导致锁无法成功释放!!!
*/
public class WorkLock {
private final static HashMap<Integer, ReentrantLock> lockMap = new HashMap<>();
private Integer segments = 1;// 默认分段数量
private WorkLock() {
init(null, false);
}
private WorkLock(Integer counts, boolean fair) {
init(counts, fair);
}
/*静态内部类实现单例*/
public static WorkLock getInstance() {
return SingletonHolder.instance;
}
private void init(Integer counts, boolean fair) {
if (counts != null) {
segments = counts;
}
for (int i = 0; i < segments; i++) {
lockMap.put(i, new ReentrantLock(fair));
}
}
public void lock(int key) {
ReentrantLock lock = lockMap.get(key % segments);
lock.lock();
}
public void unlock(int key) {
ReentrantLock lock = lockMap.get(key % segments);
lock.unlock();
}
@Override
public String toString() {
return "SegmentLock [segments=" + segments + ", lockMap=" + lockMap
+ "]";
}
/*静态内部类实现单例*/
private static class SingletonHolder {
private static final WorkLock instance = new WorkLock(null, true);
}
}
...@@ -27,6 +27,7 @@ import com.gogirl.infrastructure.mapper.store.training.TrainingStartClassLogTech ...@@ -27,6 +27,7 @@ import com.gogirl.infrastructure.mapper.store.training.TrainingStartClassLogTech
import com.gogirl.infrastructure.mapper.store.training.TrainingStartClassMapper; import com.gogirl.infrastructure.mapper.store.training.TrainingStartClassMapper;
import com.gogirl.infrastructure.mapper.user.customer.CustomerBalanceRecordMapper; import com.gogirl.infrastructure.mapper.user.customer.CustomerBalanceRecordMapper;
import com.gogirl.infrastructure.util.SessionUtils; import com.gogirl.infrastructure.util.SessionUtils;
import com.gogirl.infrastructure.util.lock.WorkLock;
import com.gogirl.shared.store.*; import com.gogirl.shared.store.*;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -61,8 +62,15 @@ public class CareerController { ...@@ -61,8 +62,15 @@ public class CareerController {
public JsonResult<Void> submitWorks(@RequestHeader String token, public JsonResult<Void> submitWorks(@RequestHeader String token,
@RequestBody @Valid SubmitWorksCommand cmd) { @RequestBody @Valid SubmitWorksCommand cmd) {
Integer technicianId = SessionUtils.getTechnicianId(); Integer technicianId = SessionUtils.getTechnicianId();
WorkLock workLock = WorkLock.getInstance();
try {
workLock.lock(technicianId);
cmd.setTechnicianId(technicianId); cmd.setTechnicianId(technicianId);
careerCmdService.submitWorks(cmd); careerCmdService.submitWorks(cmd);
} finally {
workLock.unlock(technicianId);
}
return JsonResult.success(); return JsonResult.success();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment