zjh
2024-10-09 77717de6a75b6e59ffcafaeb97187b1852862d4c
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjOrderController.java
@@ -12,6 +12,7 @@
import java.util.*;
import java.util.List;
import java.util.concurrent.*;
import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Resource;
@@ -88,6 +89,8 @@
import org.springframework.http.HttpRequest;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.util.DigestUtils;
@@ -871,12 +874,18 @@
    }
    /**
     * 体检签到登记接口
     */
    ReentrantLock lock=new ReentrantLock();
    @PostMapping
    @ApiOperation(value = "体检签到登记接口")
    @Transactional  //(切换数据库出错,所以注释)
//    @Transactional  //(切换数据库出错,所以注释)
    @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
    public AjaxResult addOrderAndDetail(@RequestBody TjOrder tjOrder) throws Exception {
        Long userId = Long.valueOf(SecurityUtils.getLoginUser().getUserId());
        SysUser sysUser = userService.getById(userId);
@@ -898,7 +907,6 @@
            transitionService.deletedTbTransitionListByCusIdAndTjNum(tjCustomer.getCusIdcard(), tjCustomer.getCardId());
            return AjaxResult.error("不可重复登记");
        }
        TjFlowingWater tjFlowingWater = new TjFlowingWater();
        LambdaQueryWrapper<TjReservation> wq1 = new LambdaQueryWrapper<>();
        wq1.eq(TjReservation::getIdCard, tjCustomer.getCusIdcard());
@@ -935,9 +943,7 @@
                tjOrder.setTjType("2");
            }
        }
        //生成体检号
        String tjNumber = (SecurityUtils.getUsername() + new SimpleDateFormat("yyMMddHHmmss").format(new Date()));
        tjOrder.setTjNumber(tjNumber);
        if (null != tjOrder.getPhoto()) {
            File file = new File(tjOrder.getPhoto());
            if (file.isFile()) {
@@ -966,11 +972,16 @@
            tjOrder.setStatus(TjConstants.TJ_WAIT);
//            tjFlowingWater.setPayStasus(1L);
        }
//        else {
        tjFlowingWater.setPayStasus(0L);
//        }
        if (tjOrderService.save(tjOrder)) {
        try {
            boolean b = lock.tryLock(3, TimeUnit.MINUTES);
            if(b){
                //生成体检号
                String tjNumber = (SecurityUtils.getUsername() + new SimpleDateFormat("yyMMddHHmmss").format(new Date()));
                tjOrder.setTjNumber(tjNumber);
                if (tjOrderService.save(tjOrder)) {
            //保存收货地址
            if ("2".equals(tjOrder.getGetType())) {
                final TjReportGetAddress address = tjOrder.getAddAddress();
@@ -1093,7 +1104,6 @@
                tjOrderService.updateById(tjOrder);
            }
            //团体
            if ("1".equals(tjOrder.getTjType())) {
                asyncService.ttextracted(tjOrder, tjCustomer, sysUser, tjReservation, tjFlowingWater);
@@ -1104,6 +1114,12 @@
                newSaveextracted(tjOrder, tjCustomer, discount, sysUser, tjReservation, tjFlowingWater);
            }
            return AjaxResult.success(tjNumber);
                }
                return AjaxResult.error();
            }
        } finally {
            lock.unlock();
        }
        return AjaxResult.error();
    }
@@ -1116,7 +1132,7 @@
        SysUser sysUser = UserHoder.getLoginUser().getUser();
        List<String> cusIds = daoDto.getCusIds();
        ArrayList<String> tjNumbers = new ArrayList<>();
        if (null != cusIds && cusIds.size() > 0) {
        if (null != cusIds && !cusIds.isEmpty()) {
            ExecutorService threadPools = Executors.newFixedThreadPool(cusIds.size());
            for (String cusId : cusIds) {
                threadPools.execute(new Runnable() {
@@ -1129,7 +1145,7 @@
            LambdaQueryWrapper<TjCustomer> wq = new LambdaQueryWrapper<>();
            wq.in(TjCustomer::getCusIdcard, cusIds);
            List<Long> list = tjCustomerService.list(wq).stream().map(TjCustomer::getCusId).collect(Collectors.toList());
            if (list.size() > 0) {
            if (!list.isEmpty()) {
//                ExecutorService threadPool = Executors.newFixedThreadPool(list.size());
                ThreadPoolTaskExecutor executor = threadPoolConfig.threadPoolTaskExecutor();
                for (Long aLong : list) {