ioioio %!s(int64=4) %!d(string=hai) anos
pai
achega
bd26140aae

+ 8 - 1
blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/Lock.java

@@ -19,6 +19,8 @@ package org.springblade.client.entity;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.time.LocalDateTime;
 import java.io.Serializable;
+import java.util.Date;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import io.swagger.annotations.ApiModel;
@@ -38,6 +40,11 @@ public class Lock implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 	private Long id;
+
+	private Long userId;
+
+
+
 	/**
 	* 编辑人
 	*/
@@ -47,7 +54,7 @@ public class Lock implements Serializable {
 	* 锁定时间
 	*/
 		@ApiModelProperty(value = "锁定时间")
-		private LocalDateTime lockTime;
+		private Date lockTime;
 	/**
 	* 锁号:电脑序列号+用户名
 	*/

+ 1 - 1
blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/LockConfig.java

@@ -51,7 +51,7 @@ public class LockConfig implements Serializable {
 	* 0 不启动 1启动
 	*/
 		@ApiModelProperty(value = "0 不启动 1启动")
-		private Boolean isEnable;
+		private Integer isEnable;
 	/**
 	* 备注
 	*/

+ 4 - 2
blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/entity/InvoiceItem.java

@@ -20,6 +20,8 @@ import java.math.BigDecimal;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.time.LocalDateTime;
 import java.io.Serializable;
+import java.util.Date;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import io.swagger.annotations.ApiModel;
@@ -96,7 +98,7 @@ public class InvoiceItem implements Serializable {
 	* 创建时间
 	*/
 		@ApiModelProperty(value = "创建时间")
-		private LocalDateTime createTime;
+		private Date createTime;
 	/**
 	* 修改人
 	*/
@@ -106,7 +108,7 @@ public class InvoiceItem implements Serializable {
 	* 修改时间
 	*/
 		@ApiModelProperty(value = "修改时间")
-		private LocalDateTime updateTime;
+		private Date updateTime;
 	/**
 	* 状态(-1 初始化 0 正常 1停用)
 	*/

+ 3 - 0
blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/vojo/Settlement.java

@@ -30,6 +30,7 @@ import java.util.Map;
 import lombok.Data;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import org.springblade.finance.entity.InvoiceItem;
 
 /**
  * 结算表实体类
@@ -254,4 +255,6 @@ public class Settlement  implements Serializable {
 	@ApiModelProperty(value = "未核销  核销完成")
 	private String foundStatus;
 
+	@TableField(exist = false)
+	private List<InvoiceItem> invoiceItemList;
 }

+ 136 - 4
blade-service/blade-client/src/main/java/org/springblade/client/lock/controller/LockController.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.client.lock.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -23,10 +24,14 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
 import javax.validation.Valid;
 
+import org.springblade.client.entity.LockConfig;
+import org.springblade.client.lock.service.ILockConfigService;
 import org.springblade.client.lock.service.ILockService;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.AesUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -34,6 +39,9 @@ import org.springblade.client.entity.Lock;
 import org.springblade.client.vo.LockVO;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
 /**
  *  控制器
  *
@@ -48,6 +56,8 @@ public class LockController extends BladeController {
 
 	private final ILockService lockService;
 
+	private final ILockConfigService lockConfigService;
+
 	/**
 	 * 详情
 	 */
@@ -122,12 +132,134 @@ public class LockController extends BladeController {
 		return R.status(lockService.removeByIds(Func.toLongList(ids)));
 	}
 
+	//检查当前表单是否可以编辑
 	@GetMapping("checkLock")
-	public R<Boolean> checkLock()
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "检查当前表单是否可以编辑", notes = "")
+	public R<?> checkLock(@ApiParam(value = "模块名称", required = true) @RequestParam String moduleName,
+								@ApiParam(value = "数据表名称", required = true) @RequestParam String tableName,
+								@ApiParam(value = "单据id", required = true) @RequestParam Long billId)
 	{
-		//先查看当前租户是否配置锁
-        return null;
-		//
+		//先查看当前租户是在此模块否配置锁,如果没有锁或者没开启,直接返回true
+		LambdaQueryWrapper<LockConfig> lockConfigLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		lockConfigLambdaQueryWrapper
+			.eq(LockConfig::getModuleName,moduleName)
+			.eq(LockConfig::getTableName,tableName)
+			.eq(LockConfig::getTenantId, AuthUtil.getTenantId());
+		LockConfig lockConfig = lockConfigService.getOne(lockConfigLambdaQueryWrapper, false);
+		if(lockConfig==null || lockConfig.getIsEnable()!=1)
+		{
+			return R.success("目前订单可以编辑");
+		}
+
+		//如果存在配置,则查看是否需要已经上锁,如果上锁,且上锁人不是自己,直接返回false。如果是自己直接返回true
+		LambdaQueryWrapper<Lock> lockLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		lockLambdaQueryWrapper
+			.eq(Lock::getBillId,billId)
+			.eq(Lock::getMoudleName,moduleName)
+			.eq(Lock::getTableName,tableName)
+			.eq(Lock::getTenantId,AuthUtil.getTenantId());
+		Lock lock = lockService.getOne(lockLambdaQueryWrapper, false);
+		//没有锁
+        if(lock==null)
+        {
+			return R.success("目前订单可以编辑");
+        }
+        //有锁 不是自己
+        else if(lock!=null && lock.getUserId()!=AuthUtil.getUserId())
+        {
+			SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
+
+			return R.fail("账号:"+lock.getRealName()+"于"+simpleDateFormat.format(lock.getLockTime())+"正在编辑请稍后再试!");
+		}
+        //有锁 是自己
+		else if(lock!=null && lock.getUserId()==AuthUtil.getUserId())
+		{
+			return R.success("目前订单可以编辑");
+		}
+		//其他潜在情况,一律false
+		else
+		{
+			return R.fail("目前订单暂时无法编辑");
+		}
+	}
+
+	//上锁
+	@PostMapping("onLock")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "上锁", notes = "")
+    public R onLock(@ApiParam(value = "模块名称", required = true) @RequestParam String moduleName,
+					@ApiParam(value = "数据表名称", required = true) @RequestParam String tableName,
+					@ApiParam(value = "电脑序列号", required = true) @RequestParam String no,
+					@ApiParam(value = "单据id", required = true) @RequestParam Long billId)
+	{
+		//校验防止上锁多次
+		LambdaQueryWrapper<Lock> lockLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		lockLambdaQueryWrapper
+			.eq(Lock::getBillId,billId)
+			.eq(Lock::getMoudleName,moduleName)
+			.eq(Lock::getTableName,tableName)
+			.eq(Lock::getTenantId,AuthUtil.getTenantId());
+		int count = lockService.count(lockLambdaQueryWrapper);
+		//存在锁,不再新增锁
+		if(count>0)
+		{
+			Lock lock = lockService.getOne(lockLambdaQueryWrapper, false);
+			//存在自己的锁
+			if(lock.getUserId()==AuthUtil.getUserId())
+			{
+				 return R.success("OK");
+			}
+			//存在别人的锁, 直接报错
+			else if(lock.getUserId()!=AuthUtil.getUserId())
+			{
+				return R.fail("上锁失败:存在其他用户的锁");
+			}
+		}
+		//不存在锁,新增锁
+		else
+		{
+			Lock lock=new Lock();
+			lock.setUserId(AuthUtil.getUserId());
+			lock.setRealName(AuthUtil.getUserName());
+			lock.setLockTime(new Date());
+			lock.setMoudleName(moduleName);
+			lock.setTableName(tableName);
+			lock.setBillId(billId);
+			//生成16位 code
+			int code = (no + AuthUtil.getUserName()).hashCode();
+			lock.setLockNo(String.valueOf(code));
+			lockService.save(lock);
+			return R.success("OK");
+		}
+		return null;
+	}
+
+
+	//释放锁
+	@DeleteMapping("unLock")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "释放锁", notes = "")
+	public R unLock(@ApiParam(value = "模块名称", required = true) @RequestParam String moduleName,
+					@ApiParam(value = "数据表名称", required = true) @RequestParam String tableName,
+					@ApiParam(value = "单据id", required = true) @RequestParam Long billId)
+	{
+		 LambdaQueryWrapper<Lock> lockLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		 lockLambdaQueryWrapper.eq(Lock::getMoudleName,moduleName);
+		 lockLambdaQueryWrapper.eq(Lock::getTableName,tableName);
+		 lockLambdaQueryWrapper.eq(Lock::getBillId,billId);
+		 lockLambdaQueryWrapper.eq(Lock::getTenantId,AuthUtil.getTenantId());
+		 Lock lock = lockService.getOne(lockLambdaQueryWrapper);
+         if(lock!=null)
+         {
+			 lockService.removeById(lock.getId());
+			 return R.success("释放锁成功");
+		 }
+         else
+		 {
+			 return R.success("释放锁成功");
+		 }
+
 	}
 
 

+ 7 - 0
blade-service/trade-finance/src/main/java/org/springblade/finance/controller/SettlementController.java

@@ -357,6 +357,13 @@ public class SettlementController extends BladeController {
 		return R.success("操作成功");
 	}
 
+	@PostMapping("createInvoiceItem")
+	public R createInvoiceItem(@RequestBody Settlement settlement)
+	{
+		settlementService.createInvoiceItem(settlement);
+		return R.success("操作成功");
+	}
+
 
 
 

+ 2 - 0
blade-service/trade-finance/src/main/java/org/springblade/finance/service/ISettlementService.java

@@ -66,4 +66,6 @@ public interface ISettlementService extends IService<Settlement> {
 
 	void cancelFund(Settlement settlement);
 
+	void createInvoiceItem(Settlement settlement);
+
 }

+ 22 - 0
blade-service/trade-finance/src/main/java/org/springblade/finance/service/impl/SettlementServiceImpl.java

@@ -1109,6 +1109,28 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 		}
 	}
 
+	@Override
+	@Transactional
+	public void createInvoiceItem(Settlement settlement)
+	{
+		List<Items> itemsList = settlement.getItemsList();
+		if(CollectionUtils.isEmpty(itemsList))
+		{
+			throw new SecurityException("生成开票失败");
+		}
+		BigDecimal total = itemsList.stream().filter(e -> e.getAmount()!=null).map(Items::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+		InvoiceItem invoiceItem=new InvoiceItem();
+		invoiceItem.setPid(settlement.getId());
+		invoiceItem.setNumber(new BigDecimal("1"));
+		invoiceItem.setPrice(total);
+		invoiceItem.setAmount(total);
+		invoiceItem.setTenantId(AuthUtil.getTenantId());
+		invoiceItem.setCreateTime(new Date());
+		invoiceItem.setCreateUser(AuthUtil.getUserId());
+		invoiceItemMapper.updateById(invoiceItem);
+	}
+
 
 	//金蝶保存凭证测试
 	public void toJinDie(Items items,String accountId,String groupName,JdTenant jdTenant) {