Browse Source

质量事故单

yuansh 2 years ago
parent
commit
b04add8cb3

+ 65 - 1
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/IncidentTicketController.java

@@ -298,8 +298,72 @@ public class IncidentTicketController {
 		if(incidentTicket==null) {
 			return Result.error("未找到对应数据");
 		}
+		if(!incidentTicket.getState().equals("3")){//1未处理 2已通知 3通知已反馈 4已推送 5已完结
+			return Result.error("此单据状态下无法推送");
+		}
+
+		String businessType = incidentTicket.getBusinessType();//业务类型
+		if(StringUtils.isBlank(businessType)){
+			return Result.error("业务类型为空无法同步");
+		}
+		if(!businessType.trim().equals("普通采购") && !businessType.trim().equals("委外加工")){
+			return Result.error("业务类型有误,请联系管理员");
+		}
+		String moneyType = incidentTicket.getMoneyType();//币种
+		if(StringUtils.isBlank(moneyType)){
+			return Result.error("币种为空无法同步");
+		}
+		String factory = incidentTicket.getFactory();//工厂
+		if(StringUtils.isBlank(factory)){
+			return Result.error("工厂为空无法同步");
+		}
+		String responsibilityCompany = incidentTicket.getResponsibilityCompany();//责任单位
+		if(StringUtils.isBlank(responsibilityCompany)){
+			return Result.error("工厂为空责任单位");
+		}
+
+
+		List<IncidentTicketChildren> childrenList = incidentTicketChildrenService.selectByMainId(incidentTicket.getId());
+		StringBuffer sb = new StringBuffer();
+		for (IncidentTicketChildren o:childrenList){
+
+			String exchangeRate = o.getExchangeRate();//子表汇率
+			String planNumber = o.getPlanNumber();//计划单号
+			String practicalSum = o.getPracticalSum();//实际事故金额
+			String zhanghaoId = o.getZhanghaoId();//账套号
+			if(StringUtils.isBlank(planNumber)){
+				return Result.error("计划单号为空");
+			}
+			if(StringUtils.isBlank(exchangeRate)){
+				return Result.error("子表汇率为空");
+			}
+			if(StringUtils.isBlank(practicalSum)){
+				return Result.error("实际事故金额为空");
+			}
+			if(StringUtils.isBlank(practicalSum)){
+				return Result.error("实际事故金额为空");
+			}
+			if(StringUtils.isBlank(zhanghaoId)){
+				return Result.error("账套号为空");
+			}
+
+			Map<String,Object> cCode = incidentTicketService.propellingThree(incidentTicket,o);
+			if(cCode.get("res").toString().equals("false")){
+				sb.append(cCode.get("msg").toString()).append("<br/>");
+			}else{
+				o.setU8Invoice(cCode.get("cCode").toString());
+				incidentTicketChildrenService.updateById(o);
+			}
+		}
+
+//		LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+		incidentTicket.setState("4");
+//		incidentTicket.setUpdateBy(sysUser.getUsername());
+//		incidentTicket.setUpdateTime(new Date());
+//		incidentTicketService.updateById(incidentTicket);
 
-		return incidentTicketService.propelling(incidentTicket);
+		return Result.ok(sb.toString());
+//		return incidentTicketService.propelling(incidentTicket);
 
 
 	}

+ 18 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/IncidentTicketMapper.java

@@ -1,7 +1,9 @@
 package org.jeecg.modules.oa.mapper;
 
 import java.util.List;
+import java.util.Map;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.oa.entity.IncidentTicket;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -14,4 +16,20 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface IncidentTicketMapper extends BaseMapper<IncidentTicket> {
 
+    /**
+     * 修改流水号最大值
+     */
+    void updateVoucherHistoryCNumber(@Param("cNumber")String cNumber,@Param("cardNumber")String cardNumber);
+    String getMaxCode(@Param("code")String code,@Param("tableName")String tableName,@Param("dDate")String dDate);
+    int getMaxCode2();
+    int getMaxCode3();
+
+    void insertPurBillVouch(@Param("PurBillVouch")Map<String,Object> PurBillVouch);
+    void insertPurBillVouchs(@Param("PurBillVouchs")Map<String,Object> PurBillVouchs);
+
+    /**
+     * 获取供应商
+     * @return
+     */
+    Map<String,Object> getVendor(String name);
 }

+ 131 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/IncidentTicketMapper.xml

@@ -2,4 +2,135 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.oa.mapper.IncidentTicketMapper">
 
+    <update id="updateVoucherHistoryCNumber" >
+        update VoucherHistory set cNumber=#{cNumber} where CardNumber=#{cardNumber}
+    </update>
+
+    <select id="getMaxCode"  parameterType="String"  resultType="String">
+        select top 1 ${code} from ${tableName} ORDER BY ${dDate} desc
+    </select>
+
+    <select id="getMaxCode2"  resultType="int">
+        select max(pbvid) from PurBillVouch
+    </select>
+
+    <select id="getMaxCode3"  resultType="int">
+        select max(id) from PurBillVouchs rBillVouchs
+    </select>
+
+    <select id="getVendor" resultType="Map">
+        select * from Vendor where cVenAbbName=#{name}
+    </select>
+
+    <insert id="insertPurBillVouch">
+        INSERT INTO PurBillVouch(
+            cPBVBillType,
+            pbvid,
+            cPBVCode,
+            cPTCode,
+            dPBVDate,
+            cVenCode,
+            cUnitCode,
+            cexch_name,
+            cExchRate,
+            iPBVTaxRate,
+            cBusType,
+            cPBVMaker,
+            bNegative,
+            bOriginal,
+            bFirst,
+            iNetLock,
+            cDefine2,
+            dVouDate,
+            iVTid,
+            cSource,
+            cDefine12,
+            cDefine13,
+            iDiscountTaxType,
+            bCredit,
+            cVenAccount,
+            cVenBank,
+            iPrintCount,
+            cContactCode,
+            cVenPerson,
+            IsWfControlled,
+            csysbarcode,
+            cmaketime
+
+        )
+        VALUES (
+                #{PurBillVouch.cPBVBillType},
+                #{PurBillVouch.pbvid},
+                #{PurBillVouch.cPBVCode},
+                #{PurBillVouch.cPTCode},
+                #{PurBillVouch.dPBVDate},
+                #{PurBillVouch.cVenCode},
+                #{PurBillVouch.cUnitCode},
+                #{PurBillVouch.cexch_name},
+                #{PurBillVouch.cExchRate},
+                #{PurBillVouch.iPBVTaxRate},
+                #{PurBillVouch.cBusType},
+                #{PurBillVouch.cPBVMaker},
+                #{PurBillVouch.bNegative},
+                #{PurBillVouch.bOriginal},
+                #{PurBillVouch.bFirst},
+                #{PurBillVouch.iNetLock},
+                #{PurBillVouch.cDefine2},
+                #{PurBillVouch.dVouDate},
+                #{PurBillVouch.iVTid},
+                #{PurBillVouch.cSource},
+                #{PurBillVouch.cDefine12},
+                #{PurBillVouch.cDefine13},
+                #{PurBillVouch.iDiscountTaxType},
+                #{PurBillVouch.bCredit},
+                #{PurBillVouch.cVenAccount},
+                #{PurBillVouch.cVenBank},
+                #{PurBillVouch.iPrintCount},
+                #{PurBillVouch.cContactCode},
+                #{PurBillVouch.cVenPerson},
+                #{PurBillVouch.IsWfControlled},
+                #{PurBillVouch.csysbarcode},
+                #{PurBillVouch.cmaketime}
+        )
+
+    </insert>
+
+    <insert id="insertPurBillVouchs">
+        INSERT INTO PurBillVouchs(
+            id,
+            pbvid,
+            cInvCode,
+            bExBill,
+            iOriMoney,
+            iOriSum,
+            iOriTaxPrice,
+            iMoney,
+            iSum,
+            iTaxPrice,
+            iTaxRate,
+            ivouchrowno,
+            cbsysbarcode,
+            bgift
+
+        )
+        VALUES (
+                #{PurBillVouchs.id},
+                #{PurBillVouchs.pbvid},
+                #{PurBillVouchs.cInvCode},
+                #{PurBillVouchs.bExBill},
+                #{PurBillVouchs.iOriMoney},
+                #{PurBillVouchs.iOriSum},
+                #{PurBillVouchs.iOriTaxPrice},
+                #{PurBillVouchs.iMoney},
+                #{PurBillVouchs.iSum},
+                #{PurBillVouchs.iTaxPrice},
+                #{PurBillVouchs.iTaxRate},
+                #{PurBillVouchs.ivouchrowno},
+                #{PurBillVouchs.cbsysbarcode},
+                #{PurBillVouchs.bgift}
+        )
+
+    </insert>
+
+
 </mapper>

+ 2 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IIncidentTicketService.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import java.io.Serializable;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 森_工厂质量事故单-主表
@@ -43,4 +44,5 @@ public interface IIncidentTicketService extends IService<IncidentTicket> {
 	public Result<?> noticeUserReturn(String headId, String code, String title);
 
 	public Result<?> propelling(IncidentTicket incidentTicket);
+	public Map<String,Object> propellingThree(IncidentTicket incidentTicket, IncidentTicketChildren children);
 }

+ 271 - 8
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/IncidentTicketServiceImpl.java

@@ -1,5 +1,6 @@
 package org.jeecg.modules.oa.service.impl;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.apache.commons.lang.StringUtils;
 import org.apache.shiro.SecurityUtils;
@@ -7,6 +8,7 @@ import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.system.api.ISysBaseAPI;
 import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.DateUtils;
 import org.jeecg.modules.oa.entity.IncidentTicket;
 import org.jeecg.modules.oa.entity.IncidentTicketChildren;
 import org.jeecg.modules.oa.entity.IncidentTicketMsg;
@@ -20,6 +22,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.*;
 
 /**
@@ -44,34 +47,294 @@ public class IncidentTicketServiceImpl extends ServiceImpl<IncidentTicketMapper,
 	private IIncidentTicketMsgService iIncidentTicketMsgService;
 
 
-	@Override
-	@Transactional
-	public Result<?> propelling(IncidentTicket incidentTicket){
+	/**
+	 * 获取流水号最大值去除单号中的前缀0
+	 * @param testStr
+	 * @return
+	 */
+	public static String maxNumber(String testStr){
+		String[] strs = testStr.split("[^0-9]");//根据不是数字的字符拆分字符串
+		String numStr = strs[strs.length - 1];//取出最后一组数字
+		if (numStr != null && numStr.length() > 0) {//如果最后一组没有数字(也就是不以数字结尾),抛NumberFormatException异常
+			int i = Integer.valueOf(testStr);
+			return String.valueOf(i);
+		}else {
+			throw new NumberFormatException();
+		}
+	}
 
-		if(!incidentTicket.getState().equals("3")){//1未处理 2已通知 3通知已反馈 4已推送 5已完结
-			return Result.error("此单据状态下无法推送");
+	public static String addOne(String testStr) {
+		String[] strs = testStr.split("[^0-9]");//根据不是数字的字符拆分字符串
+		String numStr = strs[strs.length - 1];//取出最后一组数字
+		if (numStr != null && numStr.length() > 0) {//如果最后一组没有数字(也就是不以数字结尾),抛NumberFormatException异常
+			int n = numStr.length();//取出字符串的长度
+			BigDecimal num=new BigDecimal(numStr).add(new BigDecimal(1));//将该数字加一
+			String added = String.valueOf(num);
+			n = Math.min(n, added.length());
+			//拼接字符串
+			return testStr.subSequence(0, testStr.length() - n) + added;
+		} else {
+			throw new NumberFormatException();
 		}
+	}
+
+	public static void main(String[] args) {
+		String cCode=addOne("123");
+		System.out.println(cCode);
+	}
 
+	@DS("master3")
+	@Override
+	@Transactional
+	public Map<String,Object> propellingThree(IncidentTicket incidentTicket,IncidentTicketChildren children) {
+		Map<String,Object> resMap = new HashMap<>();
+		resMap.put("res","false");
 		LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+		String businessType = incidentTicket.getBusinessType();//业务类型
+		String moneyType = incidentTicket.getMoneyType();//币种
+		String accidentData = incidentTicket.getAccidentData();//日期
+		String factory = incidentTicket.getFactory();//工厂
+		String responsibilityCompany = incidentTicket.getResponsibilityCompany();//责任单位
+
+		String exchangeRate = children.getExchangeRate();//子表汇率
+		String planNumber = children.getPlanNumber();//计划单号
+		String practicalSum = children.getPracticalSum();//实际事故金额
+		String zhanghaoId = children.getZhanghaoId();//账套
+
+		Map<String,Object> factoryMap = incidentTicketMapper.getVendor(factory);
+		Map<String,Object> responsibilityCompanyMap = incidentTicketMapper.getVendor(responsibilityCompany);
+
+		if(factoryMap == null){
+			resMap.put("msg",zhanghaoId+"账套不存在工厂 "+factory);
+			return resMap;
+		}
+		if(responsibilityCompanyMap == null){
+			resMap.put("msg",zhanghaoId+"账套不存在责任单位 "+responsibilityCompany);
+			return resMap;
+		}
 
+		Map<String,Object> map = new HashMap<>();
 		//推送正文
+		/**
+		 * 主表
+		 */
+		map.put("cPBVBillType","03");//发票类型 03
+		String cCode = "test";
+//		String cCode=this.addOne(incidentTicketMapper.getMaxCode("cPBVCode","PurBillVouch","cpbvcode"));
+//		incidentTicketMapper.updateVoucherHistoryCNumber(this.maxNumber(cCode),"2502");
+
+		map.put("cPBVCode",cCode);//采购发票号  生成
+		if(StringUtils.isNotBlank(businessType) && businessType.equals("委外加工")){
+			map.put("cPTCode","02");//采购类型编码 01普通采购 02委外加工
+		}else{
+			map.put("cPTCode","01");//采购类型编码 01普通采购 02委外加工
+		}
+		map.put("dPBVDate", DateUtils.getDate("yyyy-MM-dd"));//开票日期 当前日期
+		String cVenCode = factoryMap.get("cVenCode").toString();
+		map.put("cVenCode", cVenCode);//供应商编码 对接质量事故单责任单位(U8显示简称即可)
+		String cUnitCode = responsibilityCompanyMap.get("cVenCode").toString();
+		map.put("cUnitCode", cUnitCode);//代垫单位编码 供应商
+		map.put("cexch_name", moneyType);//人民币、美元
+//		map.put("cExchRate", exchangeRate);//汇率 子表汇率
+		map.put("cExchRate", 12);//汇率 子表汇率
+		map.put("iPBVTaxRate", 0.0);//税率(101默认为0,102/103默认为13,可取U8该字段设置的默认值)
+		if(StringUtils.isNotBlank(businessType)){
+			map.put("cBusType", businessType);//业务类型 普通采购/委外加工
+		}else{
+			map.put("cBusType", "普通采购");//业务类型 普通采购/委外加工
+		}
 
-		String businessType = incidentTicket.getBusinessType();//业务类型
-		List<IncidentTicketChildren> childrenList = incidentTicketChildrenMapper.selectByMainId(incidentTicket.getId());
+		map.put("cPBVMaker", sysUser.getRealname());//创建人 推送人姓名
+		map.put("bNegative", 0);//负发票标志 0
+		map.put("bOriginal", 0);//采购期初标志 0
+		map.put("bFirst", 0);//应付期初标志 0
+		map.put("iNetLock", 0);//现无用 0
+		map.put("cDefine2", planNumber);//计划单号 计划单号
+		map.put("dVouDate", accidentData);//单据日期 日期
+		map.put("iVTid", 8167);//单据模版号 8167
+//		map.put("ufts", DateUtils.getTimestamp());//时间戳
+//		map.put("cSource", businessType);//单据来源 采购、委外
+		map.put("cSource", "采购");//单据来源 采购、委外
+		map.put("cDefine12", factory);//江苏康弘纺织品有限公司
+		map.put("cDefine13", responsibilityCompany);//江苏康弘纺织品有限公司
+		map.put("iDiscountTaxType",0);//扣税类别(0应税外加,1应税内含) 0
+		map.put("bCredit",0);//是否为立账依据0
+		String cVenAccount = "";
+		String cVenBank = "";
+		if(factoryMap.get("cVenAccount") != null){
+			cVenAccount = factoryMap.get("cVenAccount").toString();
+		}
+		if(factoryMap.get("cVenBank") != null){
+			cVenBank = factoryMap.get("cVenBank").toString();
+		}
+		map.put("cVenAccount",cVenAccount);//供方银行账号
+		map.put("cVenBank",cVenBank);//供方银行名称
+		map.put("iPrintCount",0);//打印次数 0
+		String cVenContactCode = "";
+		String cVenPerson = "";
+		if(factoryMap.get("cVenContactCode") != null){
+			cVenContactCode = factoryMap.get("cVenContactCode").toString();
+		}
+		if(factoryMap.get("cVenPerson") != null){
+			cVenPerson = factoryMap.get("cVenPerson").toString();
+		}
+		map.put("cContactCode",cVenContactCode);//供方联系人编码
+		map.put("cVenPerson",cVenPerson);//供方联系人
+		map.put("IsWfControlled",0);//是否工作流控制 0
+		StringBuffer sb = new StringBuffer();
+		sb.append("||puzl|");
+		sb.append(cCode);
+		map.put("csysbarcode",sb.toString());//单据条码 ||puzl|0000001185
+		map.put("cmaketime",DateUtils.now());//制单时间
 
-		for (IncidentTicketChildren children:childrenList){
+
+		/**
+		 * 子表
+		 */
+		Map<String,Object> map2 = new HashMap<>();
 
 
 
+		map2.put("cInvCode","N3000002424");//存货编码
+		map2.put("bExBill",1);//是否为费用 1
+//		map2.put("iPBVQuantity","1");//数量
+		//税率(101默认为0,102/103默认为13,可取U8该字段设置的默认值)
+		if(StringUtils.isNotBlank(practicalSum)){
 
+		}else{
+			map2.put("iOriMoney",0);//原币金额 -- 原币无税金额=原币金额/(1+税率)
 		}
 
+		map2.put("iOriSum",practicalSum);//原币价税合计  --实际事故金额
+		map2.put("iOriTaxPrice",0);//原币税额 原币金额-原币无税金额
+		map2.put("iMoney",practicalSum);//本币金额 (本币无税金额) 本币金额/(1+税率)
+		map2.put("iSum",practicalSum);//本币价税合计 原币金额*汇率
+		map2.put("iTaxPrice",practicalSum);//本币税额 本币金额-本币无税金额
+		map2.put("iTaxRate",0);//税率(101默认为0,102/103默认为13,可取U8该字段设置的默认值)
+		map2.put("ivouchrowno",1);//行号
+		map2.put("cbsysbarcode",sb.toString()+"|1");//行条码 ||puzl|0000001185|1
+		map2.put("bgift",0);//是否赠品 0
+
+//		int chId = incidentTicketMapper.getMaxCode2();
+//		map.put("pbvid",chId+1);//主表主键
+//		incidentTicketMapper.insertPurBillVouch(map);
+//
+//		int chIds = incidentTicketMapper.getMaxCode3();
+//		map2.put("pbvid",chId+1);//主表主键
+//		map2.put("id",chIds+1);//主键
+//		incidentTicketMapper.insertPurBillVouchs(map2);
+
+		return resMap;
+	}
+
+	@DS("master3")
+	@Override
+	@Transactional
+	public Result<?> propelling(IncidentTicket incidentTicket){
 
+		if(!incidentTicket.getState().equals("3")){//1未处理 2已通知 3通知已反馈 4已推送 5已完结
+			return Result.error("此单据状态下无法推送");
+		}
+		LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
 
 
+		String businessType = incidentTicket.getBusinessType();//业务类型
+		String moneyType = incidentTicket.getMoneyType();//币种
+		String accidentData = incidentTicket.getAccidentData();//日期
+		String factory = incidentTicket.getFactory();//工厂
+		String responsibilityCompany = incidentTicket.getResponsibilityCompany();//责任单位
+		List<IncidentTicketChildren> childrenList = incidentTicketChildrenMapper.selectByMainId(incidentTicket.getId());
 
+		for (IncidentTicketChildren children:childrenList){
 
+			String exchangeRate = children.getExchangeRate();//子表汇率
+			String planNumber = children.getPlanNumber();//计划单号
+			String practicalSum = children.getPracticalSum();//实际事故金额
+
+			Map<String,Object> map = new HashMap<>();
+			//推送正文
+			/**
+			 * 主表
+			 */
+			map.put("cPBVBillType","03");//发票类型 03
+
+			String cCode=this.addOne(incidentTicketMapper.getMaxCode("cPBVCode","PurBillVouch","cmaketime"));
+			incidentTicketMapper.updateVoucherHistoryCNumber(this.maxNumber(cCode),"2502");
+
+			map.put("PBVID","2"+cCode);//采购发票主表标识
+			map.put("cPBVCode",cCode);//采购发票号  生成
+			if(businessType.equals("普通采购")){
+				map.put("cPTCode","01");//采购类型编码 01普通采购 02委外加工
+			}else{
+				map.put("cPTCode","02");//采购类型编码 01普通采购 02委外加工
+			}
+			map.put("dPBVDate", DateUtils.getDate("yyyy-MM-dd"));//开票日期 当前日期
+			map.put("cVenCode", "0001");//供应商编码 对接质量事故单责任单位(U8显示简称即可)
+			map.put("cUnitCode", "0001");//代垫单位编码 供应商
+			map.put("cexch_name", moneyType);//人民币、美元
+//			map.put("cExchRate", exchangeRate);//汇率 子表汇率
+			map.put("cExchRate", 12.0);//汇率 子表汇率
+			map.put("iPBVTaxRate", 0);//税率(101默认为0,102/103默认为13,可取U8该字段设置的默认值)
+			if(StringUtils.isNotBlank(businessType)){
+				map.put("cBusType", businessType);//业务类型 普通采购/委外加工
+			}else{
+				map.put("cBusType", "普通采购");//业务类型 普通采购/委外加工
+			}
 
+			map.put("cPBVMaker", sysUser.getRealname());//创建人 推送人姓名
+			map.put("bNegative", 0);//负发票标志 0
+			map.put("bOriginal", 0);//采购期初标志 0
+			map.put("bFirst", 0);//应付期初标志 0
+			map.put("iNetLock", 0);//现无用 0
+			map.put("cDefine2", planNumber);//计划单号 计划单号
+			map.put("dVouDate", accidentData);//单据日期 日期
+			map.put("iVTid", "8167");//单据模版号 8167
+//			map.put("ufts", DateUtils.getTimestamp());//时间戳
+			map.put("cSource", businessType);//单据来源 采购、委外
+			map.put("cDefine12", factory);//江苏康弘纺织品有限公司
+			map.put("cDefine13", responsibilityCompany);//江苏康弘纺织品有限公司
+			map.put("iDiscountTaxType",0);//扣税类别(0应税外加,1应税内含) 0
+			map.put("bCredit",0);//是否为立账依据0
+			map.put("cVenAccount","1112333333333");//供方银行账号
+			map.put("cVenBank","中国银行");//供方银行名称
+			map.put("iPrintCount",0);//打印次数 0
+			map.put("cContactCode","0001");//供方联系人编码
+			map.put("cVenPerson","同步");//供方联系人
+			map.put("IsWfControlled",0);//是否工作流控制 0
+			StringBuffer sb = new StringBuffer();
+			sb.append("||puzl|");
+			sb.append(cCode);
+			map.put("csysbarcode",sb.toString());//单据条码 ||puzl|0000001185
+			map.put("cmaketime",DateUtils.now());//制单时间
+
+
+			/**
+			 * 子表
+			 */
+			Map<String,Object> map2 = new HashMap<>();
+
+			map2.put("pbvid",map.get("PBVID"));//主表主键
+			map2.put("cInvCode","N3000002424");//存货编码
+			map2.put("bExBill",1);//是否为费用 1
+//			map2.put("iPBVQuantity","1");//数量
+			//税率(101默认为0,102/103默认为13,可取U8该字段设置的默认值)
+			map2.put("iOriMoney",practicalSum);//原币金额 -- 原币无税金额=原币金额/(1+税率)
+			map2.put("iOriSum",practicalSum);//原币价税合计  --实际事故金额
+			map2.put("iOriTaxPrice",0);//原币税额 原币金额-原币无税金额
+			map2.put("iMoney",practicalSum);//本币金额 (本币无税金额) 本币金额/(1+税率)
+			map2.put("iSum",practicalSum);//本币价税合计 原币金额*汇率
+			map2.put("iTaxPrice",practicalSum);//本币税额 本币金额-本币无税金额
+			map2.put("iTaxRate",0);//税率(101默认为0,102/103默认为13,可取U8该字段设置的默认值)
+			map2.put("ivouchrowno",1);//行号
+			map2.put("cbsysbarcode",sb.toString()+"|1");//行条码 ||puzl|0000001185|1
+			map2.put("bgift",0);//是否赠品 0
+
+			incidentTicketMapper.insertPurBillVouch(map);
+			incidentTicketMapper.insertPurBillVouchs(map2);
+
+			children.setU8Invoice(cCode);
+			incidentTicketChildrenMapper.updateById(children);
+		}
 
 
 		incidentTicket.setState("4");

+ 125 - 23
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/SyCarryServiceImpl.java

@@ -13,6 +13,8 @@ import org.jeecg.modules.oa.entity.SyCottonYarnB;
 import org.jeecg.modules.oa.mapper.SyCarryBMapper;
 import org.jeecg.modules.oa.mapper.SyCarryMapper;
 import org.jeecg.modules.oa.service.ISyCarryService;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.service.ISysUserService;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -38,6 +40,8 @@ public class SyCarryServiceImpl extends ServiceImpl<SyCarryMapper, SyCarry> impl
 	private SyCarryBMapper syCarryBMapper;
 	@Autowired
 	private ISysBaseAPI iSysBaseAPI;
+	@Autowired
+	private ISysUserService sysUserService;
 
 	@Override
 	@Transactional
@@ -62,26 +66,26 @@ public class SyCarryServiceImpl extends ServiceImpl<SyCarryMapper, SyCarry> impl
 				}
 				entity.setJhyNameData(sb.toString());
 			}
-//			if( entity.getJhyDatas().length>0 && StringUtils.isNotBlank(entity.getJhyByData()) ){
-//				StringBuffer sb= new StringBuffer();
-//				for (String s:entity.getJhyDatas()) {
-//					if(sb==null){
-//						sb.append(s);
-//					}
-//					sb.append("-"+s);
-//				}
-//				entity.setJhyByData(sb.toString());
-//			}
-//			if( entity.getJhyNames().length>0 && StringUtils.isNotBlank(entity.getJhyNameData()) ){
-//				StringBuffer sb= new StringBuffer();
-//				for (String s:entity.getJhyNames()) {
-//					if(sb==null){
-//						sb.append(s);
-//					}
-//					sb.append("/"+s);
-//				}
-//				entity.setJhyByData(sb.toString());
-//			}
+			/*if( entity.getJhyDatas().length>0 && StringUtils.isNotBlank(entity.getJhyByData()) ){
+				StringBuffer sb= new StringBuffer();
+				for (String s:entity.getJhyDatas()) {
+					if(sb==null){
+						sb.append(s);
+					}
+					sb.append("-"+s);
+				}
+				entity.setJhyByData(sb.toString());
+			}
+			if( entity.getJhyNames().length>0 && StringUtils.isNotBlank(entity.getJhyNameData()) ){
+				StringBuffer sb= new StringBuffer();
+				for (String s:entity.getJhyNames()) {
+					if(sb==null){
+						sb.append(s);
+					}
+					sb.append("/"+s);
+				}
+				entity.setJhyByData(sb.toString());
+			}*/
 			syCarryBMapper.insert(entity);
 		}
 	}
@@ -145,6 +149,7 @@ public class SyCarryServiceImpl extends ServiceImpl<SyCarryMapper, SyCarry> impl
 	@Transactional
 	public String commitBatch(Collection<? extends Serializable> idList,String state) {
 		StringBuffer sb = new StringBuffer();
+		HashMap<String,Object> taskParam = new HashMap<>();
 		LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
 		for(Serializable id:idList) {
 			SyCarry syCarry = syCarryMapper.selectById(id);
@@ -196,8 +201,8 @@ public class SyCarryServiceImpl extends ServiceImpl<SyCarryMapper, SyCarry> impl
 				syCarry.setCkTime(new Date());//仓库提交时间
 				boolean ifAll = true;
 
-				LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-				HashMap<String,Object> taskParam = new HashMap<>();
+
+
 
 				List<SyCarryB> syCarryB2 = syCarryBMapper.selectByMainId(syCarry.getId());
 				for(SyCarryB o:syCarryB2){
@@ -218,7 +223,7 @@ public class SyCarryServiceImpl extends ServiceImpl<SyCarryMapper, SyCarry> impl
 							if(StringUtils.isNotBlank(q) && q.equals("T0114")){
 								continue;
 							}
-							iSysBaseAPI.sendSysAnnouncement(sysUser,sysUser.getUsername(),q,"搬运工对账单","您有一个新的搬运工对账单需要签字,请查看: "+syCarry.getName(), CommonConstant.MSG_CATEGORY_2,taskParam);
+							iSysBaseAPI.sendSysAnnouncement(loginUser,loginUser.getUsername(),q,"搬运工对账单","您有一个新的搬运工对账单需要签字,请查看: "+syCarry.getName(), CommonConstant.MSG_CATEGORY_2,taskParam);
 
 						}
 
@@ -270,6 +275,18 @@ public class SyCarryServiceImpl extends ServiceImpl<SyCarryMapper, SyCarry> impl
 				syCarry.setRsxzTime(new Date());//人事行政提交人提交时间
 				syCarryMapper.updateById(syCarry);
 				sb.append("单据"+syCarry.getName()+"审批成功");
+
+				// 财务经理
+				List<SysUser> getUserByRoleCode = sysUserService.getUserByRoleCode("SY002",null);
+				for(SysUser o:getUserByRoleCode){
+					iSysBaseAPI.sendSysAnnouncement(loginUser,loginUser.getUsername(),o.getUsername(),"搬运工对账单","您有一个新的搬运工对账单需要审批,请查看: "+syCarry.getName(), CommonConstant.MSG_CATEGORY_2,taskParam);
+				}
+				//财务总监角色
+				List<SysUser> getUserByRoleCode1 = sysUserService.getUserByRoleCode("SY008",null);
+				for(SysUser o:getUserByRoleCode1){
+					iSysBaseAPI.sendSysAnnouncement(loginUser,loginUser.getUsername(),o.getUsername(),"搬运工对账单","您有一个新的搬运工对账单需要审批,请查看: "+syCarry.getName(), CommonConstant.MSG_CATEGORY_2,taskParam);
+				}
+
 				continue;
 			}
 
@@ -307,6 +324,7 @@ public class SyCarryServiceImpl extends ServiceImpl<SyCarryMapper, SyCarry> impl
 		return sb.toString();
 	}
 
+/*
 	@Override
 	@Transactional
 	public String signPlan(String id) {
@@ -358,9 +376,93 @@ public class SyCarryServiceImpl extends ServiceImpl<SyCarryMapper, SyCarry> impl
 			}
 		}
 		if(ifAll){
+
+			SyCarry syCarry = syCarryMapper.selectById(syCarryB.getHeadId());
+			syCarry.setState("2");//0草稿,1仓库已提交(计划签字),2人事行政,3财务经理
+			syCarryMapper.updateById(syCarry);
+			HashMap<String,Object> taskParam = new HashMap<>();
+			//人事角色
+			List<SysUser> getUserByRoleCode = sysUserService.getUserByRoleCode("SY003",null);
+			for(SysUser o:getUserByRoleCode){
+				iSysBaseAPI.sendSysAnnouncement(loginUser,loginUser.getUsername(),o.getUsername(),"搬运工对账单","您有一个新的搬运工对账单需要审批,请查看: "+syCarry.getName(), CommonConstant.MSG_CATEGORY_2,taskParam);
+			}
+
+		}
+
+		return "签字成功";
+	}
+*/
+
+	@Override
+	@Transactional
+	public String signPlan(String id) {
+		LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+		SyCarryB syCarryB = syCarryBMapper.selectById(id);
+		if(syCarryB == null){
+			return "数据存在,请刷新后重试";
+		}
+		String jhyByData = syCarryB.getJhyByData();
+		String jhyBy = syCarryB.getJhyBy();
+
+		if(StringUtils.isBlank(jhyByData)){
+			return "计划员为空,该数据不合法";
+		}
+
+		if(!jhyByData.contains(loginUser.getUsername())){
+			return "您无权操作此条数据";
+		}
+		if(StringUtils.isNotBlank(jhyBy) && jhyBy.contains(loginUser.getUsername())){
+			return "此条数据以签字,请勿重新操作";
+		}
+
+		List<SyCarryB> syCarryB1 = syCarryBMapper.selectByMainId(syCarryB.getHeadId());
+
+		for(SyCarryB o:syCarryB1){
+			if(!o.getJhyByData().contains(loginUser.getUsername())){
+				continue;
+			}
+			if(StringUtils.isNotBlank(o.getJhyBy()) && o.getJhyBy().contains(loginUser.getUsername())){
+				continue;
+			}
+			if(StringUtils.isNotBlank(o.getJhyBy())){
+				o.setJhyBy(o.getJhyBy()+"/"+loginUser.getUsername());
+				o.setJhyName(o.getJhyName()+"/"+loginUser.getRealname());
+				o.setJhyTime(o.getJhyTime()+"/"+ DateUtils.getDate("yyyy-MM-dd HH:mm:ss"));
+			}else{
+				o.setJhyBy(loginUser.getUsername());
+				o.setJhyName(loginUser.getRealname());
+				o.setJhyTime(DateUtils.getDate("yyyy-MM-dd HH:mm:ss"));
+			}
+			syCarryBMapper.updateById(o);
+
+		}
+
+		List<SyCarryB> syCarryB2 = syCarryBMapper.selectByMainId(syCarryB.getHeadId());
+		boolean ifAll = true;
+		for(SyCarryB o:syCarryB2){
+			if(StringUtils.isBlank(o.getJhyBy())){
+				ifAll = false;
+				break;
+			}
+			String[] jhy = o.getJhyBy().split("/");
+			String[] jhyData = o.getJhyByData().split(",");
+			if(jhyData.length != jhy.length){
+				ifAll = false;
+				break;
+			}
+		}
+		if(ifAll){
+
 			SyCarry syCarry = syCarryMapper.selectById(syCarryB.getHeadId());
 			syCarry.setState("2");//0草稿,1仓库已提交(计划签字),2人事行政,3财务经理
 			syCarryMapper.updateById(syCarry);
+			HashMap<String,Object> taskParam = new HashMap<>();
+			//人事角色
+			List<SysUser> getUserByRoleCode = sysUserService.getUserByRoleCode("SY003",null);
+			for(SysUser o:getUserByRoleCode){
+				iSysBaseAPI.sendSysAnnouncement(loginUser,loginUser.getUsername(),o.getUsername(),"搬运工对账单","您有一个新的搬运工对账单需要审批,请查看: "+syCarry.getName(), CommonConstant.MSG_CATEGORY_2,taskParam);
+			}
+
 		}
 
 		return "签字成功";

+ 20 - 3
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java

@@ -107,13 +107,19 @@ public class SysUserController {
         user.setDeptName(null);
 //        String realname = user.getRealname();
 //        user.setRealname(null);
+        String syHireType = user.getSyHireType();
+        user.setSyHireType(null);
 		QueryWrapper<SysUser> queryWrapper = QueryGenerator.initQueryWrapper(user, req.getParameterMap());
 //		queryWrapper.like(StringUtils.isNotBlank(realname),"realname",realname);
 		Page<SysUser> page = new Page<SysUser>(pageNo, pageSize);
 		//根据公司id过滤
         LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
         queryWrapper.lambda().like(SysUser::getPkOrg,sysUser.getOrgCode());
-        queryWrapper.last("order by substring_index(work_no, '-', 1) + 0 asc,work_no asc");
+        if(StringUtils.isNotBlank(syHireType) && syHireType.equals("在职")){
+            queryWrapper.last("and IFNULL(sy_Hire_Type,'在职') !='离职' order by substring_index(work_no, '-', 1) + 0 asc,work_no asc");
+        }else{
+            queryWrapper.last("order by substring_index(work_no, '-', 1) + 0 asc,work_no asc");
+        }
 
         if(StringUtils.isNotBlank(deptName)){
             SysUser user2 = new SysUser();
@@ -476,14 +482,25 @@ public class SysUserController {
      * @return
      */
     @RequestMapping(value = "/queryUserByDepId", method = RequestMethod.GET)
-    public Result<List<SysUser>> queryUserByDepId(@RequestParam(name = "id", required = true) String id,String username) {
+    public Result<List<SysUser>> queryUserByDepId(@RequestParam(name = "id", required = true) String id,String username,String realname) {
         Result<List<SysUser>> result = new Result<>();
         //List<SysUser> userList = sysUserDepartService.queryUserByDepId(id);
         SysDepart sysDepart = sysDepartService.getById(id);
-        List<SysUser> userList = sysUserDepartService.queryUserByDepCode(sysDepart.getOrgCode());
+        List<SysUser> userList = new ArrayList<>();
+        List<SysUser> userList2 = sysUserDepartService.queryUserByDepCode(sysDepart.getOrgCode());
+        for (SysUser o:userList2){
+            if(StringUtils.isNotBlank(o.getSyHireType()) && o.getSyHireType().equals("离职")){
+
+            }else{
+                userList.add(o);
+            }
+        }
         if (StrUtil.isNotBlank(username)){
             userList = userList.stream().filter(u->StrUtil.containsAnyIgnoreCase(u.getUsername(),username)).collect(Collectors.toList());
         }
+        if (StrUtil.isNotBlank(realname)){
+            userList = userList.stream().filter(u->StrUtil.containsAnyIgnoreCase(u.getRealname(),realname)).collect(Collectors.toList());
+        }
         //批量查询用户的所属部门
         //step.1 先拿到全部的 useids
         //step.2 通过 useids,一次性查询用户的所属部门名字